4.7 KiB
4.7 KiB
work_item, stage, author_agent, status, created_at, model_used
| work_item | stage | author_agent | status | created_at | model_used |
|---|---|---|---|---|---|
| ORCH-111 | architecture | architect | proposed | 2026-06-15 | claude-opus-4-8 |
07 — Инфра-требования: ORCH-111 — watchdog-алерт на долго живущий тест-процесс
Work Item: ORCH-111 · Repo: orchestrator · Стадия: architecture
Применимо: меняется топология контейнера-наблюдателя (
pid: host) и добавляются env-ключи watchdog. Решение —06-adr/ADR-001+ сквознойadr-0041.
I-1. Топология / окружения
- Изменение: сервису
orchestrator-watchdogвdocker-compose.ymlдобавляетсяpid: host(ADR-001 D6). Подpid: hostконтейнерный/procотражает корневой PID-namespace хоста → watchdog видит таблицу процессов хоста (включая осиротевшие pytest, репарентированные на tini orchestrator-контейнера). Отдельный mount/procне требуется (procfs зависит от namespace читателя). pid: host— НЕ volume → существующий тестtests/watchdog/test_compose_service.py:: test_host_paths_mounted_read_only(требует:roна каждом volume) остаётся зелёным; разработчик добавляет позитивный тест на наличиеpid: host.- Привилегия — только у наблюдателя (
orchestrator-watchdog). Продorchestratorиorchestrator-stagingне меняются. Прочие тома/порты/сеть watchdog — без изменений (network_mode: host,docker.sock:ro,/repos:ro,./data:ro,mem_limit: 128m). - Тираж (Lite/Bundled, ORCH-102/103):
pid: hostвходит в канонический compose sidecar; сигнал дефолт-off → нулевое изменение поведения у тиражных инсталляций.
I-2. Переменные окружения / секреты
- Новые ключи (ADR-001 D5), парсеры never-raise:
Ключ Дефолт Смысл WATCHDOG_PROC_ENABLEDfalsekill-switch / осознанный opt-in WATCHDOG_PROC_AGE_MIN60порог возраста (мин); обязан > max(merge_retest_timeout_s=600, coverage_run_timeout_s=900)/60WATCHDOG_PROC_PATTERNSpytestCSV паттернов cmdline (substring-матч) WATCHDOG_PROC_COOLDOWN_S1800per-signal cooldown - Канон тиража (NFR-5 / AC-10): ключи добавить в том же PR в
.env.watchdog.exampleИ в блокWATCHDOG_*.env.example(равенство множеств держитtests/test_lite_setup_doc.pyTC-02b) + описать вdocs/deployment/LITE_SETUP.mdиdocs/architecture/README.md. - Секреты: новых нет. Канал алертов — существующий
WATCHDOG_TG_*(свой бот sidecar, C-1). - На прод-хосте (разово, человек): в
.env.watchdogвыставитьWATCHDOG_PROC_ENABLED=true(включение сигнала; без этого — дремлет).
I-3. Деплой / рестарт
- Self-hosting инвариант (NFR-3): выкат пересобирает/рестартит только контейнер
orchestrator-watchdog(docker compose up -d --build orchestrator-watchdog). Прод-контейнерorchestratorНЕ перезапускается (иначе встанет конвейер всех проектов, включая enduro). - Прод-выкат sidecar — через staging-эквивалент (smoke на staging-хосте перед прод): проверить, что
под
pid: hostколлектор видит процессы, сигнал поднимается на синтетическом старом pytest и молчит при дефолт-off. - Откат:
WATCHDOG_PROC_ENABLED=false(мгновенный; привилегия дремлет) либо снятиеpid: host+ рестарт только sidecar.
I-4. CI/CD
- Без изменений
.gitea/workflows/. Новые тесты —tests/watchdog/test_proc_blocking_signal.py,tests/watchdog/test_tick_proc_blocking_integration.py(TRZ §2) — исполняются существующимpytest tests/. Key-sync (test_lite_setup_doc.py) и compose-тесты watchdog должны остаться зелёными.