Files
orchestrator/docs/work-items/ORCH-066/12-review.md

5.1 KiB
Raw Blame History

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, legacy STAGE_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/» выполнено.