86 lines
5.9 KiB
Markdown
86 lines
5.9 KiB
Markdown
---
|
||
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).
|