diff --git a/docs/work-items/ORCH-071/12-review.md b/docs/work-items/ORCH-071/12-review.md index 654e505..f986442 100644 --- a/docs/work-items/ORCH-071/12-review.md +++ b/docs/work-items/ORCH-071/12-review.md @@ -1,53 +1,51 @@ --- type: review work_item_id: ORCH-071 -verdict: REQUEST_CHANGES -version: 1 +verdict: APPROVED +version: 2 --- # Review ORCH-071 ## Summary Фикс «фантомного merge» реализован архитектурно корректно и полно: детерминированный -merge-актор + пост-деплой верификация как под-гейт ребра `deploy → done`, врезка -`_handle_merge_verify` в единственную точку перехода `advance_stage` (гейтит все пути — -finalizer Phase C, reconciler F-1, job-reaper), merge выполняется в restart-surviving -Phase C (G3), kill-switch и условность раската по образцу ORCH-35/43/58. Все FR-1..FR-5 и -AC-1..AC-11 покрыты содержательными тестами; `pytest tests/ -q` зелёный (853 passed). -Код соответствует ADR-001 (D1–D9) и глобальному adr-0013, never-raise контракты соблюдены, -INV-4 (только PR-merge API, без push/force-push) выдержан. +merge-актор (`merge_gate.merge_pr`) + пост-деплой верификатор (`merge_gate.verify_merged_to_main`) +как под-гейт ребра `deploy → done`, врезанный в единственную точку перехода +`advance_stage` (`_handle_merge_verify`) — гейтит ВСЕ пути к `done` (finalizer Phase C, +reconciler F-1, job-reaper re-drive). Merge выполняется в restart-surviving Phase C (G3), +ТОЛЬКО через Gitea PR-merge API (INV-4, без push/force-push в `main`), идемпотентно +(`pr_already_merged`, INV-5). Условность раската и kill-switch по образцу ORCH-35/43/58, +never-raise контракты соблюдены на всех публичных функциях и в самой врезке. -**Единственный блокер — документация:** `CHANGELOG.md` НЕ обновлён, хотя задача меняет -`src/`. По CLAUDE.md §6 и AC-5 это обязательно → REQUEST_CHANGES. +Все FR-1..FR-5 и AC-1..AC-11 покрыты содержательными тестами (verify true/false/never-raise, +PR-merged short-circuit, kill-switch, non-self no-op, restart-recovery smoke с двухпроходным +re-drive). `pytest tests/ -q` зелёный (853 passed). Код соответствует ADR-001 (D1–D9) и +глобальному adr-0013, `STAGE_TRANSITIONS` / `check_deploy_status` / реестр `QG_CHECKS` / +схема БД — не тронуты. + +**Прежний блокер (v1) устранён:** `CHANGELOG.md` теперь содержит запись ORCH-071 в +`## [Unreleased] → ### Added` (коммит `ca69ad4`). Документация обновлена полностью. ## Findings ### P0 — Blocker -- [ ] **`CHANGELOG.md` не обновлён при изменении `src/`.** Изменены `src/config.py`, - `src/main.py`, `src/merge_gate.py`, `src/self_deploy.py`, `src/stage_engine.py`, но в - `CHANGELOG.md` нет ни одной записи про ORCH-071 (`grep -c "ORCH-071" CHANGELOG.md` → 0, - `git diff main...HEAD -- CHANGELOG.md` пуст). Это прямое нарушение CLAUDE.md §2/§6 - («Документация = golden source… обнови `CHANGELOG.md`») и AC-5 (PASS требует обновлённый - CHANGELOG; FAIL → reviewer REQUEST_CHANGES). **Требуется:** добавить запись в раздел - `## [Unreleased] → ### Added/Fixed` по образцу соседних задач (ORCH-022 и т.п.), - описывающую merge-verify под-гейт, merge-актор, пост-деплой верификацию и kill-switch. +- (нет) ### P1 — Must fix - (нет) ### P2 — Should fix -- (нет; `.openclaw/agents/deployer.md` про self-hosting не уточнён, но TRZ §1 помечает это - как «возможное» изменение, а non-self путь по ADR не меняется — не блокер.) +- (нет; `.openclaw/agents/deployer.md` про self-hosting явно не уточнён, но TRZ §1 помечает + это как «возможное» изменение, а non-self merge-путь по ADR не меняется — не блокер.) ## Документация -- `docs/architecture/README.md` — ✅ обновлён: добавлен раздел «Merge-в-main + пост-деплой - верификация как условие `done` (ORCH-071)», точно описывает врезку, Phase C, merge-актор, - верификатор, условность и инварианты. -- `docs/architecture/adr/adr-0013-merge-verify-gate.md` — ✅ создан (global ADR), корректен. +- `CHANGELOG.md` — ✅ обновлён: запись ORCH-071 (под-гейт, merge-актор, верификация, kill-switch, + ссылки на ADR/runbook/тесты). +- `docs/architecture/README.md` — ✅ раздел «Merge-в-main + пост-деплой верификация как условие + `done` (ORCH-071)»: врезка, Phase C, merge-актор, верификатор, условность, инварианты. +- `docs/architecture/adr/adr-0013-merge-verify-gate.md` — ✅ global ADR создан. - `docs/work-items/ORCH-071/06-adr/ADR-001-merge-verify-gate.md` — ✅ детальный ADR (D1–D9). -- `docs/operations/PHANTOM_MERGE_RUNBOOK.md` — ✅ создан, 4 проверки постмортема с - copy-paste командами + критерий «фантом подтверждён» + remediation (FR-4/D9). -- **`CHANGELOG.md` — ❌ НЕ обновлён.** ← блокер (P0 выше). +- `docs/operations/PHANTOM_MERGE_RUNBOOK.md` — ✅ runbook: 4 проверки постмортема с copy-paste + командами + критерий «фантом подтверждён» + remediation (FR-4/D9). -После добавления записи в `CHANGELOG.md` (и при сохранении зелёного pytest) задача готова к -повторному ревью и APPROVED. +Задача соответствует ТЗ, ADR и правилам документирования (CLAUDE.md §2/§6). APPROVED.