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

5.1 KiB
Raw Permalink Blame History

type, work_item_id, verdict, version
type work_item_id verdict version
review ORCH-067 APPROVED 2

Review ORCH-067

Summary

Повторное ревью после фикса документации (коммит 7a88f39). Реализация полностью соответствует ТЗ (02-trz.md), ADR-001 и всем acceptance criteria (03-acceptance-criteria.md).

Код (src/notifications.py — ядро):

  • Req 1 (bump): дефолт tracker_mode сменён edit → bump (src/config.py); логика update_task_tracker, транспорт send/edit/delete_telegram, disable_notification и инвариант «одна карточка на задачу» не тронуты (AC-1..AC-4, AC-15 ✓).
  • Req 2 (статус-строка): чистый never-raise plane_status_label(task_row) (offline-ядро: stage→статус + ⏸️ In Review из brd-clock + ⏸️ Awaiting Deploy, всё без сети) + best-effort _live_plane_branch_override для ветвей, неотличимых offline (Needs Input / Blocked / Rejected / Cancelled / Deploying / Monitoring). Kill-switch (tracker_live_status), per-issue TTL-кэш (_LIVE_STATE_CACHE), короткий таймаут (fetch_issue_state(..., timeout=), дефолт 10 сохранён → нет регресса reconciler). Anti-false-positive guard для enduro (_LIVE_BRANCH_BASE: deploying/monitoring override только при отдельном UUID). Прецеденс In Review > overlay соблюдён. _card_status_label обёрнут в try/except → рендер никогда не падает (AC-5..AC-9 ✓).
  • Req 3+4 (кликабельный номер): единый _plane_issue_url устраняет дублирование резолва проекта/loopback-guard (ORCH-017); plane_issue_link (текст=номер) и _build_plane_issue_link (текст=« Задача в Plane») оба зовут его. link_for fail-safe достаёт repo/plane_issue_id из БД. Применено в заголовке карточки и во ВСЕХ точках §3.3 с номером задачи (AC-10..AC-14 ✓).

Точки §3.3 проверены пофайлово: notify_approve_requested, notify_error, stage_engine.py (все alert'ы с номером), agents/launcher.py, security_gate.py, reconciler.py — номер кликабелен. merge_gate.py/job_reaper.py/main.py оставлены без ссылки осознанно и корректно: их тексты ссылаются на repo/job/run_id, а НЕ на work_item_id (проверено: merge_gate:432 — lease/repo, job_reaper:396 — job/agent/repo, main:47 — orphaned run_ids).

Инварианты/нерегресс: схема БД, STAGE_TRANSITIONS, QG, транспорт — не тронуты (AC-15 ✓). get_db() возвращает новое соединение на вызов, поэтому conn.close() в link_for корректен. pytest tests/ -q907 passed (AC-16, AC-17 ✓).

Документация (блокеры v1 закрыты): CHANGELOG.md, CLAUDE.md, .env.example обновлены в коммите 7a88f39; ADR-001 присутствует и полон; README.md/internals.md синхронизированы (AC-18 ✓).

Findings

P0 — Blocker

  • (нет)

P1 — Must fix

  • (нет)

P2 — Should fix

  • (нет)

P3 — Nice to have (не блокирует)

  • Часть alert-сообщений в stage_engine.py (_handle_self_deploy_phase_b, _handle_merge_verify) встраивает «сырой» {msg}/{e}/{reason} рядом с новой <a>-ссылкой; под parse_mode=HTML редкий < в этих подстановках теоретически мог бы помешать рендеру. Это пре-существующее поведение (parse_mode=HTML стоял и раньше), не регресс данной задачи; notify_error свой error экранирует. Можно при случае обернуть прочие подстановки в html.escape.

Документация

  • docs/architecture/README.md — обновлён (компонент Notifications / live-tracker). ✓
  • docs/architecture/internals.md — обновлён (§7: bump/edit, Plane-статус, кликабельный номер). ✓
  • 06-adr/ADR-001-tracker-plane-status-and-link.md — присутствует, полный, закрывает все [ARCH]. ✓
  • CHANGELOG.md — обновлён (запись ORCH-067). ✓
  • CLAUDE.md — обновлён (раздел «Нотификации / Telegram live-tracker»). ✓
  • .env.example — синхронизирован (ORCH_TRACKER_MODE=bump + новые флаги live-overlay). ✓

Документация = golden source: код и доку обновлены в одном PR. Блокеры предыдущего ревью (v1) закрыты. Замечаний уровня P0/P1/P2 нет → APPROVED.