diff --git a/docs/work-items/ORCH-059/12-review.md b/docs/work-items/ORCH-059/12-review.md new file mode 100644 index 0000000..d4b4add --- /dev/null +++ b/docs/work-items/ORCH-059/12-review.md @@ -0,0 +1,59 @@ +--- +type: review +work_item_id: ORCH-059 +verdict: APPROVED +version: 1 +--- + +# Review ORCH-059 + +## Summary +Выделенный Plane-статус «Confirm Deploy» как единственный триггер Фазы B прод-деплоя +self-hosting; `Approved` на стадии `deploy` становится детерминированным no-op. Реализация +точно соответствует ТЗ (TRZ-1..6), ADR-001 и критериям приёмки (AC-1..10). Четыре точечные +правки в трёх модулях (`plane_sync.py`, `webhooks/plane.py`, `stage_engine.py`), без изменения +контрактов (`STAGE_TRANSITIONS`, `QG_CHECKS`, `check_deploy_status`, Фазы A/C, merge-gate, схема +БД). Документация обновлена в том же PR. `pytest tests/ -q` — 763 passed. + +## Соответствие ТЗ и ADR +- **TRZ-1 / AC-1** — `"Confirm Deploy" → "confirm_deploy"` добавлен в `_PLANE_NAME_TO_KEY`; + намеренно отсутствует в `_DEFAULT_STATES` → fail-closed. Покрыто `test_tc01/tc02`. +- **TRZ-2 / AC-2** — `handle_confirm_deploy` (гард `stage=="deploy"`) → + `_try_advance_stage(..., confirm_deploy=True)` → Фаза B. Покрыто `test_tc04/tc07/tc10`. +- **TRZ-3 / AC-3** — `Approved` на `deploy`: ранний возврат ДО Quality Gate с + `note="approved-on-deploy-noop"`, без `initiate_deploy`, без ложного отката БАГ-8. + Покрыто `test_tc05/tc07_approved_without_confirm_is_noop/tc11`. +- **TRZ-4 / AC-4** — `handle_verdict(approved=True)` не тронут; approve на `analysis` + продвигает конвейер. Покрыто `test_tc06_approved_on_analysis_still_advances`. +- **AC-5** — идемпотентность повторного «Confirm Deploy» (`self-deploy-already-initiated`). + Покрыто `test_tc08`, `test_tc06_approved_calls_prod_hook_exactly_once`. +- **TRZ-5 / AC-6** — CTA Фазы A (Plane-коммент + Telegram) просит «Confirm Deploy» и явно + отмечает, что «Approved» прод-деплой не запускает. Покрыто `test_tc09`. +- **TRZ-1 / AC-7** — доступ через `.get("confirm_deploy")`, отсутствие статуса → ветка не + активируется, без `KeyError`. Покрыто `test_tc03` (API недоступен / статуса нет на доске). +- **TRZ-6 / AC-8** — условность через `self_deploy.self_deploy_applies`; не-self репо без + изменений. Покрыто `test_tc12`. +- **AC-9** — контракты и схема БД не изменены; 763 теста зелёные. + +## Findings + +### P0 — Blocker +- нет + +### P1 — Must fix +- нет + +### P2 — Should fix +- нет + +## Документация +Обновлено в том же PR (AC-10 выполнен): +- `CLAUDE.md` — раздел self-hosting: прод-деплой только через «Confirm Deploy», `Approved` = no-op. +- `docs/architecture/README.md` — секция ORCH-036 уточнена + добавлена подсекция ORCH-059 + (статус-триггер «Confirm Deploy»), запись в перечне статусов доработок. +- `CHANGELOG.md` — запись ORCH-059 в `[Unreleased] / Added`. +- ADR `docs/work-items/ORCH-059/06-adr/ADR-001-confirm-deploy-status.md` — заведён, отражает + реализацию (4 правки, fail-closed, рассмотренные альтернативы). +- `07-infra-requirements.md` — эксплуатационное предусловие (создать статус доски + сброс кэша). + +Документация консистентна с кодом; golden-source инвариант соблюдён.