100 lines
5.9 KiB
Markdown
100 lines
5.9 KiB
Markdown
# Критерии приёмки — 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 отсутствуют.
|