5.1 KiB
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_forfail-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/ -q → 907 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.