5.6 KiB
type, work_item_id, verdict, version
| type | work_item_id | verdict | version |
|---|---|---|---|
| review | ORCH-046 | APPROVED | 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 — это страховка следующих
стадий, не блокер ревью.