--- work_item: ORCH-113 stage: architecture author_agent: architect status: proposed created_at: 2026-06-15 model_used: claude-opus-4-8 --- # 07 — Инфра-требования: ORCH-113 — reaper finalizer-liveness ownership Work Item: **ORCH-113** · Repo: **orchestrator** · Стадия: architecture > When-applicable / информационный. Топология **не меняется**; ниже — только конфиг и операционные > инварианты, которые сопровождающий обязан удержать. ## Изменения топологии **N/A.** Ни новых сервисов/контейнеров, ни портов, ни томов, ни сетевых правил. Решение целиком внутри процесса `orchestrator` (новый leaf + две врезки в существующие потоки monitor/reaper). ## Новый конфиг (env) | Ключ | Дефолт | Назначение | |------|--------|-----------| | `ORCH_REAPER_FINALIZER_LIVENESS_ENABLED` | `true` | Kill-switch. `false` → reaper байт-в-байт прежний (маркер пишется, но не консультируется). Откат фикса = установить `false`. | Существующие `reaper_finalize_grace_s` (300) и `reaper_max_running_s` (5400) — **не меняются**. `.env.example` пополнить новым ключом (дефолт = боевое значение, паттерн ORCH-101: пустой `.env` ⇒ прежнее поведение). ## Операционные инварианты (сопровождение) - **Одно-процессная модель — несущий инвариант.** Авторитетность in-memory реестра владения держится на том, что монитор и reaper — потоки **одного** uvicorn-процесса. CMD/команда compose **не должны** получать `uvicorn --workers>1` без перевода сигнала в durable (см. `10-tech-risks.md` TR-3, ADR-001). Сверено: `Dockerfile:65`, `docker-compose.yml:36` (prod), `docker-compose.yml:123` (staging) — без `--workers`. - **Сквозной бюджет ORCH-065/109/110** `reaper_max_running_s (5400) > Σ(deploy-staging gate-work)+grace (≈4460)` остаётся в силе и фиксом не затрагивается (TR-4). - **Self-hosting-страховка:** обкатка — на staging (8501, изолированная БД) до прод-деплоя; деплой орка — только через статус «Confirm Deploy». Фикс не рестартит прод и не пушит `main`.