ouroboros/scripts
nkolesnikov fd72ff82cf feat(packaging): systemd-юнит для управления рантаймом
Запущенный из десктопного лаунчера Ouroboros попадает в transient scope
systemd со сгенерированным именем вида run-p497094-i8877010.scope. Имя
меняется при каждом старте, поэтому остановку нельзя записать в скрипт:
приходится сперва выяснять имя через cgroup процесса.

Замена на pkill не годится. Лаунчер порождает server.py и пул воркеров;
если убить только родителя, воркеры остаются держать порт 8765, и
следующий старт падает с address already in use.

Юнит даёт стабильное имя: systemctl --user stop ouroboros.

Пакеты deb и rpm ставят его в /usr/lib/systemd/user, поэтому после
установки имя доступно сразу. Активации при этом нет: включать
десктопного агента за пользователя неправильно, у него уже есть запись
рабочего стола. Юнит из домашнего каталога имеет приоритет над
пакетным — это и есть поддерживаемый способ переопределить ExecStart
для headless-узла.

Выбран пользовательский юнит, а не системный: состояние живёт в домашнем
каталоге, а десктопной сборке нужна сессия пользователя. Системный
работал бы от другого пользователя и молча использовал бы другой каталог
данных.

KillMode=control-group доводит сигнал до всей группы процессов, что и
делает обычную остановку достаточной. TimeoutStopSec оставляет запас на
незавершённый вызов инструмента. Ограничение частоты перезапусков
прекращает бесконечный цикл вместо того, чтобы хоронить первую реальную
ошибку под десятками повторов; оба ключа размещены в секции Unit, где их
ожидает systemd начиная с версии 229.

Отдельно описана готовность, поскольку сигналов три и совпадают они не
всегда. Активность юнита означает лишь запуск процесса. Ответ HTTP и
даже заполненный пул воркеров готовности не означают: поданная в этот
момент задача отклоняется кодом 503. Авторитетный признак —
supervisor_ready в ответе /api/state. Скриптам, которые всё равно подают
работу, рекомендован повтор на 503: так поступает собственная обвязка
бенчмарков проекта.

Добавлен тест состава пакетов: он требует наличия юнита в обеих ветках
сборки и запрещает включение или запуск из установочных сценариев.

Проверено на живой системе: остановка снимает всю группу процессов и
освобождает порт за секунду с небольшим, запуск даёт готовность за
десять секунд, задача подаётся без отказа и доходит до completed.
Отдельно собран deb с заглушкой вместо полезной нагрузки: юнит попадает
в пакет по пути /usr/lib/systemd/user/ouroboros.service с правами 644 и
проходит валидацию после извлечения.
2026-08-13 00:46:15 +03:00
..
bench_delegated_snapshot.py release 6.100.0: delegated runs execute in private snapshots — capture, disposition, and GC carry one honest truth (sprint phase C) 2026-08-12 17:54:10 +03:00
build_appimage.sh fix(packaging): harden AppImage runtime lifecycle 2026-08-11 04:21:16 +03:00
build_linux_packages.sh feat(packaging): systemd-юнит для управления рантаймом 2026-08-13 00:46:15 +03:00
build_repo_bundle.py fix: harden cross-platform release packaging 2026-08-11 17:18:31 +03:00
claudexor_platform_smoke.py fix(ci): tolerate only the Windows Git atomic-object poll race 2026-08-07 06:05:26 +03:00
cleanup_test_pollution.py v5.15.0-rc.8: quality dx closed-loop skills wave on top of rc.7 2026-05-11 03:32:41 +03:00
download_node_standalone.ps1 rc(reliability): close subagent crash/ghost/spinner classes; provider-agnostic review; bundled node 2026-05-29 22:48:13 +03:00
download_node_standalone.sh rc(reliability): close subagent crash/ghost/spinner classes; provider-agnostic review; bundled node 2026-05-29 22:48:13 +03:00
download_python_standalone.ps1 fix(deps): complete uv migration contracts 2026-08-11 06:34:54 +03:00
download_python_standalone.sh build(deps): manage Python dependencies with uv 2026-08-11 05:28:21 +03:00
download_ripgrep_standalone.ps1 fix(ci): release-lane smoke paths and ripgrep pin parsing 2026-08-05 00:13:49 +03:00
download_ripgrep_standalone.sh feat(code-intelligence): add query_code and clearer evolution settings 2026-06-09 07:46:59 +03:00
fetch_claudexor_runtime.py Managed Claudexor runtime delivery: exact pin, single Connect, staged updates 2026-08-06 15:15:09 +03:00
pyi_rth_pythonnet.py chore(build): import build artifacts from main + adapt spec for Phase 5 skills 2026-04-22 14:31:53 +03:00
release_proof.py fix(packaging): harden AppImage runtime lifecycle 2026-08-11 04:21:16 +03:00
run_external_review.py Merge branch 'ouroboros' (v6.88.0) into cxi/integration 2026-08-05 05:54:46 +03:00
run_plan_review.py release: ship Ouroboros 6.65.0 planning and delivery reliability 2026-07-16 00:04:29 +00:00
smoke_linux_packages.sh fix(packaging): preserve Linux desktop portability 2026-08-10 18:02:34 +03:00