52 lines
3.3 KiB
Markdown
52 lines
3.3 KiB
Markdown
---
|
||
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, аддитивность миграций.
|