--- work_item: ORCH-090 stage: architecture author_agent: architect status: proposed created_at: 2026-06-09 model_used: claude-opus-4-8 --- # 07 — Инфра-требования: ORCH-090 — Механизм отмены задачи (STOP) Work Item: **ORCH-090** · Repo: **orchestrator** · Стадия: architecture ## I-1. Топология / окружения Без изменения топологии. Тот же прод-контейнер `orchestrator` (8500) и staging (8501), та же общая SQLite-БД и очередь. STOP — обработка вебхука внутри существующего сервиса; новых контейнеров/портов/томов/сетей нет. **Инфра-предусловие (обязательно):** на доске Plane проекта ORCH создать статус **«STOP»** с **группой `cancelled`** (а не `started`/`unstarted`). Группа `cancelled` обеспечивает нативный терминал-скип реконсилятора (`_is_terminal_state`, ORCH-068/086) без доп-кода. До создания статуса фича в fail-safe: `get_project_states(...).get("stop")` → `None` → ветка STOP не активируется (нет `KeyError`, ничего не ломается). После создания — сбросить кэш состояний (`reload_project_states`) или дождаться TTL `ORCH_PLANE_STATES_TTL_S` (дефолт 300с). > Для enduro-trails статус STOP **не** обязателен: `stop` отсутствует в `_DEFAULT_STATES` > (fail-closed), отмена для enduro станет доступна только при создании статуса на их доске. ## I-2. Переменные окружения / секреты Новые env (в `.env.example`, аддитивно; секретов нет): - `ORCH_STOP_STATUS_ENABLED` — kill-switch фичи (дефолт `true`). - `ORCH_STOP_STATUS_REPOS` — CSV области репо (дефолт пусто → все репо). Существующие переиспользуются: `ORCH_AGENT_KILL_GRACE_SECONDS` (graceful kill), Gitea-токен (`delete_remote_branch`), Telegram-токен (алерт). Новых секретов нет. ## I-3. Деплой / рестарт Прод-деплой орка — обязательно через staging-гейт (8501) перед `deploy` (self-hosting инвариант, INFRA.md). STOP-обработчик сам **никогда** не рестартит/не роняет прод-контейнер и не трогает `main` (NFR-3): при STOP во время self-deploy критичный detached-шаг не прерывается — отмена откладывается до его честного завершения (ADR-001 D7). Раскат — поэтапно через `stop_status_repos` при необходимости; дефолт «все репо». ## I-4. CI/CD Без изменений `.gitea/workflows/`. Добавляются только pytest-тесты (`tests/`, см. `04-test-plan.yaml`): STOP-каскад, запрет авто-requeue, терминал-скип, закрытие дыры релонча, kill-switch, аддитивность миграций.