architect(ET): auto-commit from architect run_id=675

This commit is contained in:
2026-06-15 01:28:17 +03:00
committed by orchestrator-deployer
parent 44adcba389
commit 7298f11064
5 changed files with 458 additions and 0 deletions

View File

@@ -108,6 +108,24 @@ F1b (рамка C-1: наблюдатель отделён от наблюдае
`disk_watchdog` (ORCH-063, канал орка) ⇒ **нулевой дубль по построению**; sidecar покрывает провал
«орк+disk_watchdog мертвы» через `orch_down`, плюс **opt-in** независимый критический потолок
`host_disk_crit` (97%, `WATCHDOG_DISK_CRIT_ENABLED=false` по умолчанию) — другое событие/канал.
- **`proc_blocking` — алерт на долго живущий осиротевший тест-процесс (ORCH-111, opt-in,
[adr-0041](adr/adr-0041-watchdog-orphan-test-process-alert.md)):** закрывает слепую зону между
`agent_hung` (видит только треканые джобы по `jobs.pid`) и осиротевшими субпроцессами pytest,
которые орк запускает сам (`merge_gate.retest_branch`/`coverage_gate.measure_coverage`) и которые
при timeout-kill агента (`-9`, ORCH-109) репарентируются на tini и живут сутками, грузя CPU и валя
merge-gate re-test. Sidecar **сам** сканирует `/proc` хоста (новый коллектор
`watchdog/collectors/proc.py`, stdlib-only, read-only, never-raise→`[]`); per-entity сигнал
`("proc_blocking", pid)` active ⇔ возраст > порога **И** cmdline матчит тест-класс (дефолт `pytest`).
Анти-false-positive и отсутствие дубля с `agent_hung` — **по построению**: cmdline-скоуп
(`claude`-агент ≠ `pytest`) + порог возраста > макс. бюджета тест-прогона
(`max(merge_retest_timeout_s, coverage_run_timeout_s)`), а не хрупким кросс-namespace матчингом PID.
Алерт/recovery — через ту же `decide()`/`AlertState` (RECOVERY синтезируется для исчезнувшего
процесса). Watchdog процесс **не трогает** (только наблюдение, C-1/BR-3). **Топология:** сервису
`orchestrator-watchdog` добавлен `pid: host` (видимость хост-namespace; привилегия только у
наблюдателя, read-only, меньше уже-смонтированного `docker.sock`). Ключи `WATCHDOG_PROC_*`
(`ENABLED` дефолт **false** / `AGE_MIN`=60 / `PATTERNS`=`pytest` / `COOLDOWN_S`); дефолт-off →
нулевая регрессия. Деплой пересобирает **только** sidecar — прод `orchestrator` не рестартится.
Детали — `docs/work-items/ORCH-111/06-adr/ADR-001-watchdog-orphan-test-process-alert.md`.
- **Гарантии:** never-raise (per-source/per-tick/per-send); kill-switch `WATCHDOG_ENABLED=false` →
демон инертен (idle-loop, нулевой эффект на орк); строго read-only к наблюдаемому (нет
start/stop/restart/exec/записи в `docker.sock`/БД/`main`) ⇒ self-hosting-безопасно (enduro не