5.9 KiB
Критерии приёмки — ORCH-046
Work Item ID: ORCH-046 Stage: analysis Author: analyst Date: 2026-06-06
Каждый критерий имеет чёткое условие PASS/FAIL. Reviewer/Tester проверяют по этому списку.
AC-1 — Дословные P0/P1 findings ревьюера в task_desc
Условие: при reviewer REQUEST_CHANGES (откат review/testing →
development) строка task_desc, переданная в enqueue_job("developer", …),
содержит ДОСЛОВНЫЙ текст findings уровня P0/P1 из 12-review.md (не только
ссылку).
- PASS: в
task_descприсутствуют дословные строки P0/P1 пунктов из секции## Findingsфайла12-review.md. - FAIL:
task_descсодержит только ссылку на файл, без текста findings (при наличии валидного файла с P0/P1).
AC-2 — Причина падения тестера в task_desc
Условие: при tester FAIL (check_tests_passed, откат testing →
development) строка task_desc содержит причину падения: reason из гейта +
релевантный фрагмент тела 13-test-report.md.
- PASS:
task_descсодержитreasonИ непустой фрагмент тела отчёта (вывод pytest / FAIL-строки / Итог), когда отчёт валиден. - FAIL:
task_descсодержит только ссылку на файл без причины/фрагмента (при наличии валидного отчёта).
AC-3 — Ссылка на полный файл сохранена
Условие: в обеих ветках (reviewer, tester) task_desc по-прежнему содержит
ссылку на полный файл-артефакт (docs/work-items/<id>/12-review.md /
13-test-report.md) как дополнительный контекст.
- PASS: путь к файлу присутствует в
task_descв обоих сценариях. - FAIL: ссылка на файл удалена/отсутствует.
AC-4 — Парсер устойчив к отсутствию/битому файлу (graceful)
Условие: extract_review_findings(path) и extract_test_failures(path)
НИКОГДА не бросают исключение; при отсутствующем/нечитаемом/битом файле
возвращают "", а вызывающий код в stage_engine делает fallback на прежнюю
ссылку-строку.
- PASS: на несуществующем пути, пустом файле, файле без секций, битом
markdown/YAML — функции возвращают
""без исключения;advance_stageотрабатывает откат как раньше (ссылка-строка вtask_desc). - FAIL: любое исключение наружу из парсера или из
advance_stageиз-за парсинга.
AC-5 — Тесты зелёные + новые юнит-тесты парсера
Условие: существующие тесты не сломаны; добавлены юнит-тесты парсера, покрывающие: findings есть / findings пусто / битый YAML(frontmatter) / только P3 (нет P0/P1).
- PASS:
python -m pytest tests/ -qзелёный;tests/test_review_parse.pyсодержит как минимум кейсы: P0/P1 присутствуют → текст возвращён; нет findings/только P2-P3 →""; битый файл →""; отсутствующий путь →""; для test-report: FAIL-фрагмент извлечён / пустой отчёт →"". - FAIL: падение существующих тестов или отсутствие перечисленных кейсов.
AC-6 — Retry-счётчик и rollback НЕ изменены по поведению
Условие: логика _developer_retry_count, MAX_DEVELOPER_RETRIES = 3,
последовательность откатов и поля AdvanceResult (rolled_back_to,
enqueued_agent, enqueued_job_id, alerted) идентичны прежним.
- PASS: существующие тесты
test_stage_engine.pyна rollback/retry зелёные; при 4-м заходе по-прежнему alert вместо enqueue; меняется только текстtask_desc. - FAIL: изменилось число retry, порядок вызовов, или значения полей
AdvanceResult.
AC-7 — Out-of-scope не затронут
Условие: не изменены: check_* гейты, реестр QG_CHECKS, сигнатуры
публичных функций (advance_stage, _run_qg, check_*), webhook-пути, формат
Plane-комментариев.
- PASS:
git diffне содержит изменений вsrc/qg/checks.py(логика гейтов), сигнатурах публичных функций,src/webhooks/*,usage.build_status_comment;test_qg_registry_snapshotзелёный. - FAIL: любое из перечисленного изменено.
AC-8 — Документация и ADR обновлены (golden source)
Условие: правка ядра → заведён ADR (06-adr/), обновлён CHANGELOG.md, при
необходимости — docs/architecture/README.md/internals.md (раздел Stage
Engine / Откаты).
- PASS: присутствует
docs/work-items/ORCH-046/06-adr/ADR-001-*.md; вCHANGELOG.mdесть запись ORCH-046. - FAIL: ADR или запись в CHANGELOG отсутствуют.