--- verdict: APPROVED work_item: ORCH-091 stage: review author_agent: reviewer status: approved created_at: 2026-06-09 model_used: claude-opus-4-8 type: review work_item_id: ORCH-091 version: 1 --- # Review ORCH-091 ## Summary PR закрывает три верифицированных дефекта рендера live-карточки трекера (`src/notifications.py`, ORCH-067/087): (Д1) застрявший заголовок «To Analyse» из-за неполноты `_STAGE_STATUS_LABEL`; (Д2) ложные `✅`-строки стадий после отката конвейера; (Д3) занижение метрик строки стадии (последний прогон вместо суммы попыток). Изменение **аддитивное, indication-only, never-raise**: затронут ровно один src-модуль (`src/notifications.py`), `STAGE_TRANSITIONS` / `QG_CHECKS` / `check_*` / транспорт нотификаций / схема БД — не тронуты. Проверка по четырём осям пройдена: - **Соответствие ТЗ** — все FR-1…FR-5 реализованы; AC-1…AC-7 выполнены буквально. - **Соответствие ADR** — реализация 1:1 с `06-adr/ADR-001` (D1/D2/D3); read-only-связь `notifications.py → stages.STAGE_TRANSITIONS` оформлена как указано; `is_active_stage` не тронут. - **Качество кода** — `_pipeline_pos` / `_neutral_stage_label` never-raise; докстринги и трассировочные ORCH-091-комментарии присутствуют; полный регресс зелёный (1370). - **Документация** — обновлена в том же PR (см. ниже). ### Проверенные инварианты - **Трассировка ORCH-067/087** (правка маркированного кода): инварианты single-card, never-raise, разделение offline-ядра/live-overlay сохранены — подтверждено ADR (прочитаны перед правкой) и зелёным регрессом `test_tracker_status_line.py`. - **Терминал `cancelled` (ORCH-090, adr-0026)**: добавлен offline-лейбл `cancelled → "Cancelled"`, совпадает с overlay `_LIVE_BRANCH_LABELS['cancelled']` → нет конфликта precedence. - **Полнота карты от источника истины** — тест `test_orch091_tc01_*` параметризован по `STAGE_TRANSITIONS.keys()` (не статичный список) → NFR-3 выполнен. - **Сходимость метрик** — `_stage_line` использует те же per-run-формулы, что блок тоталов; тест `test_tc07_*` проверяет сходимость с `SUM(agent_runs)` и Σ(строк стадий) ≡ тоталы на done. - **Нормализация `deploy-staging → deploy`** ограничена гейтом подавления (не затрагивает активный рендер строки «Внедрение») — подтверждено `test_tc05_deploy_staging_keeps_deployer_row`. - **Отсутствие циркулярного импорта** — `import src.notifications; import src.stages` → OK. - **ORCH-079 (обзорные доки)** — `README.md` «Известные ограничения» НЕ содержит пункта о дефектах карточки трекера → закрывать/обновлять нечего; gate не нарушен. ## Findings ### P0 — Blocker - Нет. ### P1 — Must fix - Нет. ### P2 — Should fix - Нет. ### P3 — Nice-to-have (не блокирует) - [ ] `from .stages import STAGE_TRANSITIONS` размещён в середине модуля (`src/notifications.py` после `_STAGE_ACTIVE_AGENT`, с `# noqa: E402`). Размещение намеренно и документировано комментарием, циркулярного импорта нет; вынос в шапку модуля — косметическая необязательная уборка на будущее. ## Документация Обновлена в том же PR (golden source синхронен с кодом): - **`CHANGELOG.md`** — запись ORCH-091 (`fix`) с описанием трёх дефектов, тестов и отката. ✅ - **`docs/architecture/internals.md`** §7 — описаны откат-подавление `✅`, суммирование метрик и полнота `_STAGE_STATUS_LABEL`. ✅ - **`docs/architecture/README.md`** (Notifications / Live-tracker) — добавлен блок «ORCH-091 (индикация-only)» с тремя правками и ссылкой на ADR. ✅ (внесено архитектором, присутствует в PR) - **ADR** — `docs/work-items/ORCH-091/06-adr/ADR-001-tracker-status-rollback-metrics.md` (status: accepted), решения D1/D2/D3, альтернативы, последствия. ✅ - **`README.md` (root)** — обновление не требуется: ни один пункт «Известные ограничения» не закрывается данным PR (ORCH-079 gate соблюдён). ✅ Изменения `src/` сопровождены соответствующим обновлением документации → ось «документация» пройдена; основание для `REQUEST_CHANGES` по этой оси отсутствует. ## Вердикт `APPROVED` — нет findings уровня P0/P1; код, тесты и документация согласованы; инварианты ORCH-067/087/090 и NFR-2/NFR-3 сохранены; полный регресс `pytest tests/ -q` зелёный (1370 passed).