diff --git a/docs/work-items/ORCH-046/13-test-report.md b/docs/work-items/ORCH-046/13-test-report.md new file mode 100644 index 0000000..811fc85 --- /dev/null +++ b/docs/work-items/ORCH-046/13-test-report.md @@ -0,0 +1,92 @@ +--- +type: test-report +work_item_id: ORCH-046 +result: PASS +--- + +# Test Report — ORCH-046 + +Встраивание дословного must-fix текста findings reviewer/tester в `task_desc` +при заворотах на `development` (новый модуль `src/review_parse.py` + две +rollback-ветки `src/stage_engine.py`). + +## Окружение +- Python: 3.12.13 +- pytest: 8.3.3 (asyncio mode=AUTO) +- Ветка: feature/ORCH-046-stage-engine-pass-reviewer-tes +- Дата: 2026-06-06 + +## Результаты + +| TC ID | Описание | Покрывает | Результат | +|-------|----------|-----------|-----------| +| TC-01 | `extract_review_findings` возвращает дословный P0/P1 текст | AC-1, AC-5 | PASS | +| TC-02 | `extract_review_findings` → `""` при только P2/P3 | AC-5 | PASS | +| TC-03 | `extract_review_findings` → `""` для отсутствующего файла | AC-4 | PASS | +| TC-04 | `extract_review_findings` → `""` для битого/без секции файла | AC-4, AC-5 | PASS | +| TC-05 | `extract_review_findings` усекает длинный текст с маркером truncated | AC-1 | PASS | +| TC-06 | `extract_test_failures` извлекает фрагмент тела (Вывод pytest/FAIL/Итог) | AC-2, AC-5 | PASS | +| TC-07 | `extract_test_failures` → `""` для отсутствующего файла | AC-4 | PASS | +| TC-08 | `extract_test_failures` → `""` для битого/пустого отчёта | AC-4, AC-5 | PASS | +| TC-09 | reviewer REQUEST_CHANGES → `task_desc` содержит P0/P1 + ссылку | AC-1, AC-3 | PASS | +| TC-10 | tester FAIL → `task_desc` содержит reason + фрагмент + ссылку | AC-2, AC-3 | PASS | +| TC-11 | graceful fallback при отсутствующем/битом файле (обе ветки) | AC-4, AC-3 | PASS | +| TC-12 | rollback/retry поведение неизменно (alert на 4-й заход, поля AdvanceResult) | AC-6 | PASS | +| TC-13 | Реестр `QG_CHECKS` не изменён (snapshot), гейты нетронуты | AC-7 | PASS | +| TC-14 | Полный регресс существующего набора зелёный | AC-5, AC-6, AC-7 | PASS | + +Сопоставление TC ↔ тесты: +- TC-01..08 → `tests/test_review_parse.py` (`TestExtractReviewFindings`, `TestExtractTestFailures`), 14 кейсов, все PASS. +- TC-09..12 → `tests/test_stage_engine.py::TestRollbackTaskDescEmbedding`, все PASS. +- TC-13 → `tests/test_qg_registry_snapshot.py` (registry/callables/transitions snapshot), все PASS. +- TC-14 → полный прогон `pytest tests/` → **461 passed**. + +## Smoke test API (read-only, прод-инстанс не затронут) + +| Endpoint | HTTP | Ответ | +|----------|------|-------| +| GET /health | 200 | `{"status":"ok","service":"orchestrator"}` | +| GET /status | 200 | active_tasks включает task 37 (ORCH-046, stage=testing) | +| GET /queue | 200 | counts: queued=0, running=1, failed=0; breaker=closed; preflight_ok=true | + +> `curl` в окружении отсутствует — smoke выполнен через `urllib`. Только GET-запросы, +> деструктивных операций над прод-контейнером не выполнялось (self-hosting safety). + +## Вывод pytest + +``` +============================= test session starts ============================== +platform linux -- Python 3.12.13, pytest-8.3.3, pluggy-1.6.0 +rootdir: .../feature_ORCH-046-stage-engine-pass-reviewer-tes +configfile: pytest.ini +plugins: anyio-4.13.0, asyncio-0.23.8 +asyncio: mode=Mode.AUTO +... +======================== 461 passed, 1 warning in 7.59s ======================== +``` + +Прицельный прогон ORCH-046 (`test_review_parse.py` + `test_stage_engine.py` + +`test_qg_registry_snapshot.py`): **53 passed**. + +Единственный warning — преэкзистентный `PydanticDeprecatedSince20` в `src/config.py` +(не связан с ORCH-046). + +## Покрытие критериев приёмки + +| AC | Критерий | Подтверждение | Статус | +|----|----------|---------------|--------| +| AC-1 | Дословные P0/P1 в `task_desc` | TC-01, TC-09 | PASS | +| AC-2 | Причина тестера (reason + фрагмент) в `task_desc` | TC-06, TC-10 | PASS | +| AC-3 | Ссылка на полный файл сохранена | TC-09, TC-10, TC-11 | PASS | +| AC-4 | Парсер graceful (never-raise) | TC-03, TC-04, TC-07, TC-08, TC-11 | PASS | +| AC-5 | Тесты зелёные + новые юнит-тесты | TC-14 (461 passed) | PASS | +| AC-6 | Retry/rollback не изменены | TC-12 | PASS | +| AC-7 | Out-of-scope не затронут | TC-13 | PASS | +| AC-8 | Документация + ADR | проверено reviewer (12-review.md, APPROVED) | PASS | + +## Итог + +**PASS** — все 14 TC из тест-плана зелёные, полный регресс 461 passed, +smoke API 200 по всем эндпоинтам, прод-инстанс здоров. Все критерии приёмки +выполнены. Задача готова к стадии `deploy-staging` (8501) — обязательной +страховке self-hosting перед прод-деплоем.