--- 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`.