107 lines
7.6 KiB
Markdown
107 lines
7.6 KiB
Markdown
# Критерии приёмки — ORCH-021
|
||
|
||
Work Item: ORCH-021
|
||
Формат: каждый критерий имеет чёткое условие PASS/FAIL и проверяется тестом
|
||
из `04-test-plan.yaml`.
|
||
|
||
## Наблюдение и сигналы
|
||
|
||
### AC-1 — наблюдение армится после deploy→done
|
||
- **PASS:** для применимого репозитория после терминального перехода `deploy → done`
|
||
пост-деплой наблюдение инициируется (создаётся sentinel/отложенный job/запись в watcher).
|
||
- **FAIL:** переход `deploy → done` не приводит к старту наблюдения.
|
||
|
||
### AC-2 — наблюдение НЕ армится для неприменимых репо
|
||
- **PASS:** для репозитория вне области (не self-hosting и не в `post_deploy_repos`)
|
||
`post_deploy_applies(repo)` → False; наблюдение не стартует; конвейер не меняется.
|
||
- **FAIL:** наблюдение стартует для неприменимого репо.
|
||
|
||
### AC-3 — классификация HEALTHY
|
||
- **PASS:** серия опросов без провалов (или провалов меньше `post_deploy_fail_threshold`
|
||
и доля 5xx ниже `post_deploy_5xx_threshold`) → вердикт `HEALTHY`.
|
||
- **FAIL:** при здоровых сигналах возвращается `DEGRADED`.
|
||
|
||
### AC-4 — классификация DEGRADED по порогу провалов health
|
||
- **PASS:** `≥ post_deploy_fail_threshold` ПОСЛЕДОВАТЕЛЬНЫХ провалов health → `DEGRADED`.
|
||
- **FAIL:** порог достигнут, но вердикт не `DEGRADED`.
|
||
|
||
### AC-5 — классификация DEGRADED по доле 5xx
|
||
- **PASS:** доля 5xx на окне выше `post_deploy_5xx_threshold` → `DEGRADED`,
|
||
даже если `/health` отвечает 200.
|
||
- **FAIL:** превышение порога 5xx не даёт `DEGRADED`.
|
||
|
||
### AC-6 — устойчивость к разовому глюку (нет ложного срабатывания)
|
||
- **PASS:** одиночный провал (1 < `post_deploy_fail_threshold`) с последующим
|
||
восстановлением → итог `HEALTHY`, реакции нет.
|
||
- **FAIL:** одиночный разовый провал приводит к `DEGRADED`/откату.
|
||
|
||
## Реакция
|
||
|
||
### AC-7 — авто-rollback для не-self репо при политике auto
|
||
- **PASS:** при `post_deploy_auto_rollback=True` и НЕ-self репо вердикт `DEGRADED`
|
||
приводит к вызову отката (хук `--rollback` с прод-параметрами); `action_taken`
|
||
фиксируется как `ROLLBACK_OK`/`ROLLBACK_FAILED` по exit-code.
|
||
- **FAIL:** откат не вызывается, либо вызывается с staging-дефолтами, либо роняет прод напрямую.
|
||
|
||
### AC-8 — self-hosting НЕ откатывается автоматически (safety)
|
||
- **PASS:** для `orchestrator` вердикт `DEGRADED` НЕ приводит к автоматическому
|
||
откату/рестарту прод-контейнера в тике наблюдения; вместо этого формируется
|
||
громкий алерт + запрос ручного approve (`action_taken: ALERT_ONLY`).
|
||
- **FAIL:** тик наблюдения автоматически откатывает/рестартит прод-орк.
|
||
|
||
### AC-9 — откат-провал эскалируется
|
||
- **PASS:** если откат вызван и вернул код 1/2 (нет prev-образа / откат тоже упал) →
|
||
`action_taken: ROLLBACK_FAILED` + громкий Telegram-алерт о необходимости ручного вмешательства.
|
||
- **FAIL:** провал отката проглатывается тихо.
|
||
|
||
## Конфигурация и совместимость
|
||
|
||
### AC-10 — kill-switch выключает фичу
|
||
- **PASS:** `post_deploy_monitor_enabled=False` → наблюдение не армится ни для кого;
|
||
поведение конвейера 1:1 как до ORCH-021.
|
||
- **FAIL:** при выключенном флаге наблюдение всё равно работает.
|
||
|
||
### AC-11 — пороги/окно конфигурируемы через env
|
||
- **PASS:** `post_deploy_window_s`, `post_deploy_interval_s`, `post_deploy_fail_threshold`,
|
||
`post_deploy_5xx_threshold` читаются из `Settings` (env `ORCH_*`) и влияют на поведение.
|
||
- **FAIL:** значения захардкожены.
|
||
|
||
### AC-12 — реестры и схема БД не изменены
|
||
- **PASS:** `STAGE_TRANSITIONS`, `QG_CHECKS`, контракт `check_deploy_status` и схема
|
||
таблиц БД не изменены (если архитектор не вводит явно новую стадию — тогда это
|
||
отражено в ADR и тестах). Существующие тесты deploy/staging/merge-gate зелёные.
|
||
- **FAIL:** молча сломан какой-либо существующий контракт/тест.
|
||
|
||
## Наблюдаемость, артефакт, идемпотентность
|
||
|
||
### AC-13 — артефакт 16-post-deploy-log.md с машиночитаемым frontmatter
|
||
- **PASS:** по итогу наблюдения пишется `16-post-deploy-log.md` с валидным YAML-frontmatter
|
||
(`post_deploy_status`, `action_taken`); запись best-effort (её отсутствие ничего не роняет).
|
||
- **FAIL:** артефакт не пишется или frontmatter невалиден/непарсится.
|
||
|
||
### AC-14 — наблюдаемость в /queue
|
||
- **PASS:** `GET /queue` содержит блок `post_deploy` со снимком состояния (enabled,
|
||
window, активные/последний исход).
|
||
- **FAIL:** состояние наблюдения нигде не видно.
|
||
|
||
### AC-15 — идемпотентность / restart-safe
|
||
- **PASS:** повторный арм для той же задачи (двойной webhook / рестарт оркестратора)
|
||
не создаёт второе параллельное наблюдение и не теряет уже идущее.
|
||
- **FAIL:** дублируется наблюдение или теряется при рестарте.
|
||
|
||
### AC-16 — never-raise
|
||
- **PASS:** любая ошибка опроса/сети/файлов/классификации логируется и НЕ роняет
|
||
worker / lifespan / конвейер других проектов.
|
||
- **FAIL:** исключение из наблюдения всплывает и ломает обслуживание других проектов.
|
||
|
||
### AC-17 — уведомления
|
||
- **PASS:** ключевые события (наблюдение начато, DEGRADED, откат/алерт, чистое
|
||
завершение окна) уведомляются в Telegram и/или Plane-комментарием.
|
||
- **FAIL:** деградация/откат происходят молча.
|
||
|
||
### AC-18 — документация обновлена (golden-source)
|
||
- **PASS:** в том же PR обновлены `CLAUDE.md` (артефакт `16-post-deploy-log.md`),
|
||
`docs/architecture/README.md` (описание пост-деплой наблюдения), `CHANGELOG.md`,
|
||
и заведён ADR work-item.
|
||
- **FAIL:** функционал есть, документация не обновлена (reviewer → REQUEST_CHANGES).
|