60 lines
3.8 KiB
Markdown
60 lines
3.8 KiB
Markdown
---
|
||
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 инвариант соблюдён.
|