diff --git a/docs/work-items/ORCH-076/13-test-report.md b/docs/work-items/ORCH-076/13-test-report.md new file mode 100644 index 0000000..534f4da --- /dev/null +++ b/docs/work-items/ORCH-076/13-test-report.md @@ -0,0 +1,85 @@ +--- +type: test-report +work_item_id: ORCH-076 +result: PASS +--- + +# Test Report — ORCH-076 + +ORCH-52c: протокол handoff + единый frontmatter-контракт (writer/валидатор/схема). + +## Окружение +- Python: 3.12.13 +- pytest: 8.3.3 +- Ветка: `feature/ORCH-076-orch-52c-handoff-frontmatter-w` +- Worktree: `/repos/_wt/orchestrator/feature_ORCH-076-orch-52c-handoff-frontmatter-w` +- Дата: 2026-06-09 + +## Предусловия +- Review-вердикт `12-review.md`: **APPROVED** (P0/P1/P2 — нет; два P3 nice-to-have, не блокирующие). +- Prod health (8500): `{"status":"ok","service":"orchestrator"}` — конвейер прочих проектов не тронут. + +## Smoke test API (prod 8500, read-only) +| Endpoint | Результат | +|----------|-----------| +| `GET /health` | PASS — `{"status":"ok","service":"orchestrator"}` | +| `GET /status` | PASS — задача ORCH-076 видна на стадии `testing` (id 69) | +| `GET /queue` | PASS — counts/reconcile/reaper/post_deploy/merge_verify в норме (done=897, failed=4) | + +## Результаты по тест-плану (04-test-plan.yaml) + +| TC ID | Описание | Модуль | Результат | +|-------|----------|--------|-----------| +| TC-01 | Writer сериализует mapping в каноничный YAML-frontmatter | tests/test_frontmatter.py | PASS | +| TC-02 | Round-trip writer → read_frontmatter_value | tests/test_frontmatter.py | PASS | +| TC-03 | Валидатор: полная схема → valid=True | tests/test_frontmatter.py | PASS | +| TC-04 | Валидатор: неполная схема → valid=False, без исключения | tests/test_frontmatter.py | PASS | +| TC-05 | never-raise: writer/валидатор на битом вводе | tests/test_frontmatter.py | PASS | +| TC-06 | reader read_frontmatter_value: прежний контракт (BC) | tests/test_frontmatter.py | PASS | +| TC-07 | kill-switch frontmatter_validation_strict (False/True) | tests/test_frontmatter.py | PASS | +| TC-08 | check_reviewer_verdict через единый API (APPROVED/REQUEST_CHANGES/missing) | tests/test_qg_verdicts.py | PASS | +| TC-09 | _parse_tests_verdict: ORCH-047 3 поля + приоритет негативного токена | tests/test_qg_verdicts.py | PASS | +| TC-10 | _parse_deploy_status: SUCCESS/FAILED/missing (БАГ-8 1:1) | tests/test_qg_verdicts.py | PASS | +| TC-11 | _parse_staging_status: SUCCESS/FAILED + условность ORCH-35 | tests/test_qg_verdicts.py | PASS | +| TC-12 | parse_security_status: PASS/FAIL семантика 1:1 | tests/test_security_gate.py | PASS | +| TC-13 | Старый док-вердикт без новой схемы читается всеми 5 гейтами | tests/test_qg_verdicts.py | PASS | +| TC-14 | Док с полной схемой + вердикт-ключом — тот же вердикт (схема аддитивна) | tests/test_qg_verdicts.py | PASS | +| TC-15 | fallback worktree → origin/main сохранён через единый API | tests/test_qg_verdicts.py | PASS | +| TC-16 | Состав QG_CHECKS и STAGE_TRANSITIONS не изменён | tests/test_stages_invariants.py | PASS | +| TC-17 | Полный прогон tests/ зелёный (анти-регресс) | tests/ | PASS | + +Все 17 тест-кейсов плана покрыты и зелёные. TC-таргетные модули +(`test_frontmatter.py`, `test_qg_verdicts.py`, `test_security_gate.py`, +`test_stages_invariants.py`) — **49 passed**. + +## Покрытие критериев приёмки (03-acceptance-criteria.md) +| AC | Подтверждено | Результат | +|----|--------------|-----------| +| AC-1 reader+writer+валидатор, unit-tested | TC-01…TC-07 | PASS | +| AC-2 спека handoff в docs/_standards/ согласована | (review/doc-check) | PASS | +| AC-3 единый контракт вердиктов (5 точек) | TC-08…TC-12 | PASS | +| AC-4 BC старых доков + регресс зелёный + самопрохождение | TC-13/TC-14 + полный регресс + задача на testing | PASS | +| AC-5 never-raise + warning-only + kill-switch | TC-05/TC-07 | PASS | +| AC-6 STAGE_TRANSITIONS/QG_CHECKS неизменны | TC-16 | PASS | +| AC-7 документация обновлена | review «Документация» | PASS | + +## Вывод pytest + +Полный регресс: +``` +1212 passed, 1 warning in 34.97s +``` + +TC-таргетные модули: +``` +49 passed, 1 warning in 0.44s +``` + +Единственное предупреждение — `PydanticDeprecatedSince20` (class-based config в +`src/config.py`), предсуществующее, не связано с ORCH-076, не влияет на результат. +Сетевых зависимостей в тестах нет (frontmatter — файловый/in-memory контракт). + +## Итог +**PASS** — полный регресс зелёный (1212 passed), все 17 TC плана PASS, smoke API OK, +prod-контейнер не тронут. Регрессий гейтов (review/tester/deploy/staging/security) нет, +семантика вердиктов 1:1. Задача готова к переходу на `deploy-staging`.