5.9 KiB
5.9 KiB
type, work_item_id, verdict, version
| type | work_item_id | verdict | version |
|---|---|---|---|
| review | ORCH-089 | APPROVED | 1 |
Review ORCH-089
Summary
Авто-режим по лейблам Plane (autoApprove + autoDeploy) реализован строго по ТЗ
и ADR: аддитивно, по образцу условных под-гейтов (ORCH-035/043/058/088). Снимаются
только два человеческих решения (гейт BRD Approved, гейт прод-деплоя
Confirm Deploy); ни одна техническая проверка не тронута. Соответствие всем осям
(ТЗ, ADR, качество кода, тесты) — полное; документация-golden-source обновлена в том
же PR. Блокирующих findings нет. Вердикт: APPROVED.
Проверка по осям
1. Соответствие ТЗ (02-trz.md)
- ✅ Leaf
src/labels.py(never-raise):auto_approve_applies/auto_deploy_applies(локальный scope-чек ПЕРВЫМ),has_label(единственный сетевой вызов, только приapplies==True→ нулевой оверхед при выключенном флаге, §7/AC-8),snapshot. - ✅
src/plane_sync.py:fetch_issue_labels(Noneпри ошибке ≠[]),get_project_labels({normalized→uuid}, TTL-кэшauto_label_states_ttl_sпо образцуget_project_states, сентинел__AMBIGUOUS__при коллизии имён),set_issue_approved(1:1 зеркалоset_issue_in_review). - ✅ Врезка autoApprove —
_handle_analysis_approved_flow(веткаfiles_ok) ПОСЛЕIn Review+коммента; advance идёт через тот жеadvance_stage(..., finished_agent=None), что человеческий Approved (без дублирования переходной логики, §3.1). - ✅ Врезка autoDeploy —
_handle_self_deploy_phase_aпосле advance наdeploy+clear_state, ДО «ask-human»; Phase B запускается тем же_handle_self_deploy_phase_b(§3.2). - ✅ Флаги (
config.py):auto_label_enabled,auto_approve_label,auto_deploy_label,auto_label_repos(пусто → self-hosting only),auto_label_states_ttl_s(§7). - ✅ Блок наблюдаемости
auto_labelsвGET /queue(§8). - ✅ БД-схема и QG-реестр не трогаются (§5/§6) — подтверждено:
stages.py,qg/checks.py,db.pyотсутствуют в diff feat-коммита.
2. Соответствие ADR (06-adr/ADR-001, global adr-0018)
- ✅ Реализация 1:1 с решениями ADR: D1 (поверхность leaf + порядок резолва
has_label), D5 (scope: пусто → self-hosting), fail-safe «never auto on doubt», ambiguity-сентинел. - ✅ Глобальный сквозной ADR
adr-0018-auto-label-gates.mdзаведён. - ✅ Подтверждена корректность пути advance:
advance_stageсagent=Noneидёт в веткуapproved-via-status(qg_passed, без повторногоcheck_analysis_approved) →analysis → architecture+mark_brd_review_ended. Re-entrancy безопасна (вложенный вызов сfinished_agent=Noneне входит в analyst-ветку).
3. Качество кода
- ✅ never-raise соблюдён во всех публичных функциях (
labels.py, новыеplane_sync-хелперы). - ✅ Нет дублирования переходной логики — переиспользованы
advance_stageи_handle_self_deploy_phase_b(включая существующую идемпотентностьINITIATED). - ✅ Прозрачность (AC-7) во всех трёх каналах: лог + Telegram (
send_telegram) + Plane-коммент (plane_add_comment), плюс live-карточка через штатный advance. - ✅ Docstrings содержательные; кликабельный номер задачи (
link_for) в уведомлениях.
4. Тесты
- ✅ 43 целевых теста (TC-01…TC-26, 7 модулей) — все зелёные.
- ✅ Регрессия: 377 релевантных тестов (stage/plane/analysis/deploy/self_deploy/webhook) — все зелёные. AC-10 (инварианты) подтверждён.
Документация
Обновлена полностью в том же PR (AC-11):
CLAUDE.md— раздел «Авто-режим по лейблам» (флаги, инвариант «снимает только человеческое решение»);docs/architecture/README.md— описание врезок autoApprove/autoDeploy + флаги;CHANGELOG.md— запись в## [Unreleased];06-adr/ADR-001-auto-label-gates.md+ globaldocs/architecture/adr/adr-0018-auto-label-gates.md;07-infra-requirements.md— предусловие создания лейбловautoApprove/autoDeployв Plane-проекте ORCH.
Статус: документация синхронна с кодом. Требование CLAUDE.md §2/§6 выполнено.
Findings
P0 — Blocker
- Нет.
P1 — Must fix
- Нет.
P2 — Should fix
- Нет.
P3 — Nice-to-have
set_issue_approvedобращается кget_project_states(pid)["approved"]прямым индексом (потенциальныйKeyError, если ключ отсутствует). На практике защищено: ключapprovedгарантирован в_DEFAULT_STATES, паттерн 1:1 повторяет существующийset_issue_in_review, а вызов обёрнут внешнимtry/exceptвadvance_stage(деградирует к ручному гейту). Косметика, не блокер.