diff --git a/docs/work-items/ORCH-091/12-review.md b/docs/work-items/ORCH-091/12-review.md new file mode 100644 index 0000000..14dd6e2 --- /dev/null +++ b/docs/work-items/ORCH-091/12-review.md @@ -0,0 +1,85 @@ +--- +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).