6.2 KiB
type, work_item_id, verdict, version
| type | work_item_id | verdict | version |
|---|---|---|---|
| review | ORCH-021 | APPROVED | 2 |
Review ORCH-021 — Post-deploy мониторинг прода + реакция на деградацию
Summary
Реализация продлевает ответственность конвейера ЗА терминальный переход
deploy → done, закрывая класс инцидентов «зелёный деплой, красный прод» (ET-8).
Механизм — детерминированный reserved-agent job post-deploy-monitor (вариант B
из ADR-001, точная калька deploy-finalizer): арм в stage_engine.advance_stage
(блок next_stage == "done"), один тик = один job (перехват в
launcher.launch_job ДО _spawn → stage_engine.run_post_deploy_monitor),
чистая логика в новом leaf-модуле src/post_deploy.py (never-raise).
Проверены все четыре оси. Реализация соответствует ТЗ (02-trz.md), ADR-001 и
глобальному adr-0010, удовлетворяет всем критериям приёмки AC-1…AC-18.
Документация (golden-source) обновлена в том же PR. Регрессов нет.
Соответствие ТЗ
- §2.1
src/post_deploy.py(leaf, never-raise):post_deploy_applies,probe_signals,classify,decide_action, sentinel-state, артефакт,build_rollback_command— все на месте. ✅ - §2.2 Оркестрация: арм в terminal-блоке + reserved-agent тик с
само-перепостановкой через
available_at_delay_s; restart-safe (sentinelarmed/series/done+ jobs-очередь). ✅ - §2.3 Реакция: non-self+auto → хук
--rollback(синхронно, целевой ≠ orch); self-hosting → ВСЕГДАALERT_ONLY. ✅ - §2.4 Конфигурация: все
post_deploy_*вsrc/config.py, дефолты безопасны (kill-switch on, auto-rollback off), параметры отката переиспользуютdeploy_prod_*. ✅ - §2.5 Артефакт
16-post-deploy-log.mdс машиночитаемым frontmatter, best-effort. ✅ - §2.6 Блок
post_deployвGET /queue. ✅ - §2.7/§2.8/§3 Инварианты:
STAGE_TRANSITIONS,QG_CHECKS,check_deploy_status, terminal-sync, merge-gate, exit-code-контракт хука, схема БД — не тронуты (подтверждено зелёным полным прогоном). ✅
Соответствие ADR
Реализация 1:1 повторяет ADR-001: механизм (reserved-agent, не стадия/не daemon),
точки интеграции, пороги BR-3, политика реакции BR-5 (self never auto-rollback —
структурный инвариант в decide_action + отсутствие вызова run_rollback на
ALERT_ONLY). Нарушений глобальных ADR не выявлено.
Качество кода
- Контракт never-raise выдержан во всех публичных функциях и в каждой ветке
run_post_deploy_monitor; launcher оборачивает тик в доп. guard (AC-16). classifyfail-safe → HEALTHY на мусорном входе (ложный DEGRADED опаснее).- Docstrings содержательные, со ссылками на AC/BR.
- Условность раската по образцу ORCH-35/36/43/58 (флаг + CSV-репо).
Тесты
30 тестов ORCH-021 (tests/test_post_deploy.py,
tests/test_post_deploy_integration.py) — содержательные, покрывают
классификацию (AC-3..6), self-hosting safety (TC-19 явно проверяет, что хук
--rollback НЕ вызывается для self — AC-8), idempotency двойного арма (AC-15),
kill-switch/условность (AC-2/10/11), exit-code маппинг (AC-9), frontmatter
артефакта (AC-13), never-raise (AC-16), /queue (AC-14). Полный прогон
pytest tests/ — 701 passed (регрессов нет, AC-12).
Findings
P0 — Blocker
- нет
P1 — Must fix
- нет
P2 — Should fix
- нет
P3 — Nice to have
run_post_deploy_monitor: в веткеALERT_ONLYдля не-self репо приpost_deploy_auto_rollback=falseтекст алерта упоминает «авто-rollback для self-hosting запрещён (BR-5)», что для не-self случая формулировка не совсем точна (косметика сообщения; на поведение не влияет).write_post_deploy_logкоммитит/пушит артефакт в ветку задачи, которая к моменту наблюдения уже слита/может быть удалена — артефакт может не попасть вmain. Контракт best-effort соблюдён (never-raise, ничего не роняет); как улучшение наблюдаемости — рассмотреть запись лог-артефакта отдельным путём.
Документация
Обновлено в том же PR (golden-source, AC-18 — PASS):
CLAUDE.md—16-post-deploy-log.mdдобавлен в перечень артефактов;docs/architecture/README.md— раздел «Post-deploy наблюдение прода» + блокpost_deployв таблице API/queue;docs/architecture/adr/adr-0010-post-deploy-monitor.md— новый сквозной ADR;docs/work-items/ORCH-021/06-adr/ADR-001-post-deploy-monitor.md— детальный ADR;CHANGELOG.md— запись вAdded(+ fix DockerfileCOPY data/);README.md/.env.example— всеORCH_POST_DEPLOY_*env задокументированы.
Изменение src/ сопровождено обновлением документации — правило CLAUDE.md №2/№6
выполнено.
Вердикт
Только P3 (nice-to-have) findings, блокеров и must-fix нет → APPROVED.