5.1 KiB
5.1 KiB
type, work_item_id, verdict, version
| type | work_item_id | verdict | version |
|---|---|---|---|
| review | ORCH-066 | APPROVED | 1 |
Review ORCH-066
Summary
Осмысленная статусная модель Plane (слой B — индикация). Реализация затрагивает
строго слой B (src/plane_sync.py, точки простановки в src/stage_engine.py /
src/webhooks/plane.py / src/reconciler.py) и не трогает слой A
(src/stages.py::STAGE_TRANSITIONS — diff пуст). Все 4 оси проверки (ТЗ, ADR,
качество кода, тесты) и проверка документации — пройдены. pytest tests/ -q:
774 passed. Вердикт — APPROVED.
Соответствие ТЗ (02-trz.md)
- §2.1 — 6 новых логических ключей в
_PLANE_NAME_TO_KEY+_DEFAULT_STATES. ✔ - §2.2 — fail-closed резолюция (BR-12). ✔ (реализована усиленная project-relative версия — см. ADR ниже).
- §2.3 —
_STAGE_TO_STATE_KEY(analysis→analysis, review→code_review),STAGE_VISIBILITY_STATE, legacySTAGE_TO_STATE(UUID байт-в-байт прежние). ✔ - §2.4 — точки простановки разведены (handle_issue_updated триггер
to_analyse, start_pipeline/resume → Analysis, Phase A → Awaiting Deploy, Phase B → Deploying, terminal-sync split, post-deploy HEALTHY→Done / DEGRADED→Blocked, rollback@analysis → Analysis). ✔ - §2.5 — 5 новых never-raise хелперов
set_issue_*. ✔ - §3 — reconciler F-2 триггер
to_analyse(+ resume-ветка), Guard 2 skip-set с вычитанием base_working. ✔ - §4/§5/§6 — нет новых эндпоинтов, нет миграций БД,
QG_CHECKSне расширен. ✔
Соответствие ADR (06-adr/ADR-001)
- §2.2 project-relative alias-fallback (
_STATE_ALIAS_FALLBACK, применён ДО_DEFAULT_STATES.setdefault) — реализован точно по контракту, деградация на собственный базовый UUID проекта, PATCH остаётся валидным на частичной конфигурации. ✔ - §2.5 terminal-sync split по
post_deploy.post_deploy_applies(repo)— реализован как в ADR (self → Monitoring, не-self → Done). ✔ - §2.6 Guard 2 анти-регресс (extra_waits − base_working − {None}) — реализован дословно, enduro-алиасы схлопываются → нулевой регресс. ✔
- §2.7 без kill-switch — config.py не изменён (diff пуст). ✔
Качество кода
- Все новые
set_issue_*следуют образцуset_issue_in_review(per-project резолв_set_issue_state_direct), контракт never-raise сохранён, есть docstrings. ✔
- Post-deploy/terminal-sync простановки обёрнуты в try/except с warning-логом (never break the tick). ✔
- Переменные в scope корректны (
work_item_idопределён до всех новых вызовов вstart_pipeline/handle_status_start/stage_engine). ✔ - AC-12 соблюдён:
set_issue_blockedв DEGRADED-ветке — только индикация, тик прод-контейнер не трогает. ✔
Качество тестов
- Содержательные, не тривиальные:
test_plane_status_failclosed.py(TC-16/17/18 — partial project, API down, never-raise сеттеров, enduro alias старт),test_plane_to_analyse_resume.py,test_plane_status_model.py,test_deploy_terminal_sync.py(self/не-self split),test_post_deploy_integration.py,test_reconciler*.py(F-2 to_analyse + Guard 2). ✔
Инварианты (AC-21/AC-22)
src/stages.py— diff 0 строк (STAGE_TRANSITIONS байт-в-байт). ✔src/qg/checks.py— diff 0 строк (QG_CHECKS, check_deploy_status). ✔src/config.py— diff 0 строк. ✔- Схема БД — без миграций. ✔
Findings
P0 — Blocker
- нет
P1 — Must fix
- нет
P2 — Should fix
- нет
Документация
Обновлена в том же PR (golden source соблюдён):
CLAUDE.md— добавлена секция «Статусная модель Plane (ORCH-066)». ✔docs/architecture/README.md— секция «Осмысленная статусная модель Plane (ORCH-066)» + обновлён статусный footer. ✔CHANGELOG.md— подробная запись в [Unreleased]/Added. ✔06-adr/ADR-001-plane-status-model.md— заведён. ✔07-infra-requirements.md— присутствует (инфра-предусловие: 6 Plane-статусов создаёт оператор). ✔
Изменения src/ полностью отражены в документации → требование
«документация обновлена при изменении src/» выполнено.