84 lines
5.6 KiB
Markdown
84 lines
5.6 KiB
Markdown
---
|
||
type: review
|
||
work_item_id: ORCH-046
|
||
verdict: APPROVED
|
||
version: 1
|
||
---
|
||
|
||
# Review ORCH-046
|
||
|
||
## Summary
|
||
|
||
Правка ядра «вариант A»: при заворотах на `development` `task_desc` теперь несёт
|
||
**дословный must-fix текст** (P0/P1 ревьюера, причина FAIL тестера) вместо одной
|
||
ссылки на файл. Извлечение вынесено в новый defensive-модуль `src/review_parse.py`
|
||
с контрактом «never raise»; две rollback-ветки `_handle_qg_failure_rollbacks`
|
||
встраивают текст и сохраняют ссылку как «Полный контекст», при пустом/битом
|
||
артефакте — graceful-фоллбэк на прежнюю строку.
|
||
|
||
Реализация полностью соответствует ТЗ (`02-trz.md`), ADR-001 и всем критериям
|
||
приёмки. Документация обновлена в этом же PR. Тесты зелёные (`461 passed`).
|
||
|
||
Проверено по осям:
|
||
|
||
**1. Соответствие ТЗ.** Сигнатуры `extract_review_findings`/`extract_test_failures`
|
||
точно как в ТЗ §2; never-raise, логирование на `logger.debug`, модульные лимиты
|
||
`MAX_FINDINGS_CHARS`/`MAX_FAILURES_CHARS`, отбрасывание frontmatter, устойчивость
|
||
P0/P1-заголовков к регистру/тире, пропуск плейсхолдеров `(если есть)`/`<…>`,
|
||
приоритет источников тестера (`## Вывод pytest` → FAIL-строки `## Результаты` →
|
||
`## Итог`). Префикс `task_desc`, `reason` в tester-ветке, ссылка-фоллбэк — как
|
||
предписано §3. API/БД/QG не тронуты (§4–6).
|
||
|
||
**2. Соответствие ADR-001.** Отдельный модуль (blast radius), путь через
|
||
`get_worktree_path`, изоляция ядра (меняется только строка `task_desc`),
|
||
последовательность отката и поля `AdvanceResult` сохранены. Per-work-item ADR
|
||
обоснован. Реализация ⇄ решение совпадают.
|
||
|
||
**3. Качество кода.** Docstrings на всех публичных функциях; defensive `_read`
|
||
ловит `OSError`, внешний `try/except Exception` в обоих экстракторах гарантирует
|
||
never-raise (подтверждено кейсом на directory-path). Регэксп `_P01_HEADER_RE`
|
||
корректно отсекает ложные совпадения (`P05` и т.п.). Код читабелен, без дублей.
|
||
|
||
**4. Качество тестов.** `tests/test_review_parse.py` покрывает TC-01..08 (findings
|
||
есть / только P2-P3 / нет файла / битый YAML / усечение / регистр-тире / directory).
|
||
`tests/test_stage_engine.py::TestRollbackTaskDescEmbedding` проверяет встраивание
|
||
в обе ветки, graceful-фоллбэк, неизменность retry/rollback на 4-м заходе (alert
|
||
вместо enqueue). Содержательные, не тривиальные.
|
||
|
||
## Findings
|
||
|
||
### P0 — Blocker
|
||
- [ ] (нет)
|
||
|
||
### P1 — Must fix
|
||
- [ ] (нет)
|
||
|
||
### P2 — Should fix
|
||
- [ ] (нет)
|
||
|
||
## Соответствие критериям приёмки
|
||
|
||
- AC-1 (дословные P0/P1 в `task_desc`) — PASS: `Findings (P0/P1):\n{findings}`.
|
||
- AC-2 (причина тестера: `reason` + фрагмент тела) — PASS: `Причина: {reason}` + `Детали:`.
|
||
- AC-3 (ссылка на полный файл сохранена) — PASS: «Полный контекст»/fallback-ссылка в обеих ветках.
|
||
- AC-4 (graceful never-raise) — PASS: `""`→ссылка-фоллбэк, исключений нет (тесты TC-03/04/07/08, directory-path).
|
||
- AC-5 (тесты зелёные + новые юнит-тесты) — PASS: `461 passed`; все перечисленные кейсы присутствуют.
|
||
- AC-6 (retry/rollback не изменены) — PASS: TC-12 + существующие rollback-тесты зелёные.
|
||
- AC-7 (out-of-scope не затронут) — PASS: diff не касается `src/qg/checks.py`, `src/webhooks/*`, `usage.py`, `stages.py`, `main.py`; сигнатуры публичных функций не менялись.
|
||
- AC-8 (документация + ADR) — PASS: ADR-001 заведён, `CHANGELOG.md` и `docs/architecture/README.md` обновлены.
|
||
|
||
## Документация
|
||
|
||
Обновлена корректно и в том же PR (golden source соблюдён):
|
||
- `docs/work-items/ORCH-046/06-adr/ADR-001-embed-findings-in-task-desc.md` — заведён (правка ядра).
|
||
- `CHANGELOG.md` — запись ORCH-046 в `[Unreleased] / Added`.
|
||
- `docs/architecture/README.md` — добавлен компонент **Review/Test Parsers** и раздел **Обогащение `task_desc` при заворотах (ORCH-046)**.
|
||
|
||
Изменение `src/` сопровождено обновлением документации — требование п.4/п.6 правил
|
||
агентов выполнено.
|
||
|
||
## Примечание (self-hosting)
|
||
Правка ядра в общем прод-инстансе. Перед прод-деплоем обязательна стадия
|
||
`deploy-staging` (8501) согласно ADR-001 / CLAUDE.md — это страховка следующих
|
||
стадий, не блокер ревью.
|