diff --git a/docs/work-items/ORCH-071/13-test-report.md b/docs/work-items/ORCH-071/13-test-report.md new file mode 100644 index 0000000..9aa55f3 --- /dev/null +++ b/docs/work-items/ORCH-071/13-test-report.md @@ -0,0 +1,70 @@ +--- +type: test-report +work_item_id: ORCH-071 +result: PASS +--- + +# Test Report — ORCH-071 + +Верификация merge-в-main как условие `done` (фантомный merge). + +## Окружение +- Python: 3.12.13 +- pytest: 8.3.3 +- Ветка: `feature/ORCH-071-crit-bug-merge-main` (HEAD `d72b1f5`) +- Review verdict: APPROVED (`12-review.md`) +- Дата: 2026-06-08 + +## Smoke test API (prod 8500, read-only) +| Endpoint | Результат | +|----------|-----------| +| `GET /health` | PASS — `{"status":"ok","service":"orchestrator"}` | +| `GET /status` | PASS — отдаёт активные задачи (ORCH-071 на стадии testing) | +| `GET /queue` | PASS — counts/resilience/reconcile/reaper/post_deploy в норме, breaker=closed, preflight_ok | + +## Результаты по тест-плану (`04-test-plan.yaml`) + +| TC ID | Описание | Тест | Результат | +|-------|----------|------|-----------| +| TC-01 | verify True: deployed SHA — предок origin/main | test_tc01_verify_true_when_sha_is_ancestor | PASS | +| TC-02 | verify True: PR.merged==true даже без git | test_tc02_verify_true_when_pr_merged_even_without_git | PASS | +| TC-03 | verify False: фантом (не предок И merged==false) | test_tc03_verify_false_when_phantom | PASS | +| TC-04 | never-raise (AC-7): ошибка git/HTTP → False | test_tc04_verify_never_raises_on_git_error / _http_error | PASS | +| TC-05 | finalizer: SUCCESS но PR open → НЕ done + alert | test_tc05_success_but_not_merged_holds_and_alerts | PASS | +| TC-06 | finalizer: SUCCESS + merge подтверждён → done | test_tc06_success_and_merged_reaches_done | PASS | +| TC-07 | merge-актор зовёт Gitea POST /pulls/{i}/merge | test_tc07_merge_actor_calls_gitea_merge | PASS | +| TC-08 | идемпотентность: already_merged → no-op | test_tc08_idempotent_already_merged / _no_open_pr_is_not_an_error | PASS | +| TC-09 | merge-актор never-raise: ошибка Gitea → (False, reason) | test_tc09_never_raise_on_http_error / _non_2xx_is_false | PASS | +| TC-10 | smoke (AC-3): рестарт в Phase B → re-drive докатывает merge → done | test_tc10_merge_recovers_after_restart | PASS | +| TC-11 | non-self репо: новая логика = no-op | test_tc11_non_self_repo_does_not_apply / _csv_scopes_to_listed_repos | PASS | +| TC-12 | kill-switch off → прежнее поведение | test_tc12_kill_switch_disables_under_gate | PASS | +| TC-13 | self-hosting safety: нет shell-out / force-push в main | test_tc13_no_shell_out_no_force_push | PASS | +| TC-14 | Phase B только при confirm_deploy=True; Approved → no-op | test_tc14_plain_approved_on_deploy_is_noop_no_merge / _confirm_deploy_initiates_phase_b | PASS | +| TC-15 | регресс: check_deploy_status / _parse_deploy_status неизменны | test_tc15_* (7 кейсов) | PASS | +| TC-16 | регресс: STAGE_TRANSITIONS / QG_CHECKS, deploy→done на месте | test_tc16_* (4 кейса) | PASS | + +Покрыты все критерии приёмки AC-1..AC-11 (`03-acceptance-criteria.md`). + +## Целевой прогон модулей ORCH-071 +``` +tests/test_merge_verify.py ................ 8 passed +tests/test_merge_actor.py ................. 6 passed +tests/test_deploy_finalizer_merge_gate.py . 4 passed +tests/test_deploy_restart_merge_recovery.py 1 passed +tests/test_qg_checks.py ................... 13 passed +tests/test_stages.py ...................... 4 passed +======================== 36 passed, 1 warning in 0.61s ========================= +``` + +## Полный регресс +``` +pytest tests/ -v --tb=short +======================= 853 passed, 1 warning in 22.77s ======================== +``` +(1 warning — PydanticDeprecatedSince20 в `src/config.py`, не связан с задачей.) + +## Итог +**PASS** — все 853 теста зелёные, целевые 36 тестов ORCH-071 (TC-01..TC-16) PASS, +smoke API (health/status/queue) OK. Регрессы существующих контрактов +(`STAGE_TRANSITIONS`, `QG_CHECKS`, `check_deploy_status`) не выявлены. +Задача готова к переходу на `deploy-staging`.