--- type: test-report work_item_id: ORCH-073 result: PASS --- # Test Report — ORCH-073 CRIT: системный фикс эрозии `main` (фантомный merge ORCH-067/069) + восстановление кода. ## Окружение - Python: 3.12.13 - pytest: 8.3.3 - Дата: 2026-06-08 - Worktree: `feature/ORCH-073-crit-main-orch-067-069` - Prod health (8500): `{"status":"ok","service":"orchestrator"}` — контейнер не тронут ## Smoke-тесты API (prod 8500, read-only) | Endpoint | Результат | |----------|-----------| | `GET /health` | `{"status":"ok"}` — PASS | | `GET /status` | active_tasks отдаётся, ORCH-073 на стадии `testing` — PASS | | `GET /queue` | counts/reconcile/reaper/post_deploy снимок отдаётся, breaker `closed` — PASS | ## Результаты по тест-плану (04-test-plan.yaml) | TC ID | Описание | Тест-функция | Результат | |-------|----------|--------------|-----------| | TC-01 | verify_merged_to_main: sha — предок main → True (AC-6) | test_tc01_true_when_sha_is_ancestor | PASS | | TC-02 | sha НЕ в main + merged docs-PR → False (баг 067/069, AC-2) | test_tc02_false_when_sha_not_in_main_even_with_merged_docs_pr | PASS | | TC-03 | пустой sha → False (fail-closed) | test_tc03_empty_sha_is_false | PASS | | TC-04 | git error → False (never-raise, INV-1) | test_tc04_never_raises_on_git_error / _worktree_error | PASS | | TC-05 | merged docs-PR не засчитан как code-merge (FR-2) | test_tc05_merged_docs_pr_not_counted | PASS | | TC-06 | merged code-PR распознан (base=main, head=branch) | test_tc06_merged_code_pr_recognised / _onto_non_main_base_not_counted | PASS | | TC-07 | HTTP-ошибка/не-200 → False (never-raise) | test_tc07_non_200_is_false / _http_exception_is_false | PASS | | TC-08 | merge_pr выбирает code-PR, не docs/* (FR-3) | test_tc08_merges_code_pr_not_docs_pr / _skips_pr_onto_non_main_base | PASS | | TC-09 | нет open code-PR → (False,...), без push main (INV-2) | test_tc09_no_open_pr_no_shell_out | PASS | | TC-10 | merge_pr идемпотентен, без второго POST (AC-7/INV-4) | test_tc10_idempotent_already_merged | PASS | | TC-11 | .gitattributes: CHANGELOG.md merge=union (AC-4) | test_tc11_gitattributes_declares_union | PASS | | TC-12 | union-merge сохраняет обе записи Unreleased без конфликта | test_tc12_union_merge_keeps_both_entries | PASS | | TC-13 | _handle_merge_verify: SHA в main + маркеры → advance (AC-6) | test_tc13_confirmed_and_intact_advances | PASS | | TC-14 | docs-only merge → HOLD + alert, НЕ done (AC-3) | test_tc14_sha_not_in_main_holds | PASS | | TC-15 | регресс-гард: маркер ранее-merged задачи пропал → HOLD + alert (AC-5) | test_tc15_marker_missing_holds | PASS | | TC-16 | внутр. ошибка верификатора → HOLD + alert, never-raise (INV-1) | test_tc16_internal_error_holds_never_raises | PASS | | TC-17 | conditionality: non-self/kill-switch → под-гейт no-op (AC-6/INV-5) | test_tc17_merge_verify_applies_scope / _under_gate_noop_for_non_self | PASS | | TC-18 | регресс-гард уважает kill-switch / non-self → no-op (INV-5) | test_tc18_guard_kill_switch_skips_guard / _guard_noop_for_non_self_repo | PASS | | TC-19 | полный pytest tests/ -q зелёный (AC-8) | весь набор tests/ | PASS | Все 19 TC из тест-плана покрыты (24 тест-функции в 6 файлах `tests/test_orch073_*.py`). ## Проверка критериев приёмки (03-acceptance-criteria.md) | AC | Проверка | Результат | |----|----------|-----------| | AC-1 | Маркеры в origin/main: plane_issue_link=8, qg0_title_max=3, verify_merged_to_main=4 (все >0) | PASS | | AC-2 | TC-02: sha не в main + merged docs-PR → False | PASS | | AC-3 | TC-14: docs-only merge → HOLD + alert, НЕ done | PASS | | AC-4 | `git check-attr merge CHANGELOG.md` → `merge: union`; TC-11/12 | PASS | | AC-5 | TC-15: уменьшение набора маркеров → HOLD + alert «main regressed» | PASS | | AC-6 | TC-01/13/17: happy-path done без ложного alert; enduro no-op | PASS | | AC-7 | TC-10: re-drive слитой задачи → no-op, без второго merge | PASS | | AC-8 | 941 passed; доки/ADR/CHANGELOG обновлены (см. 12-review) | PASS | | AC-9 | G4-аудит в ADR-001 (root cause docs-only merge) — подтверждён reviewer | PASS | | AC-10 | staging-проверка — стадия deploy-staging (вне scope tester) | — | | AC-11 | merge только PR-API; прод-контейнер не падал в рамках тестов | PASS | ## Вывод pytest ``` tests/ -q --tb=short: ........................................................................ [100%] 941 passed, 1 warning in 25.37s tests/test_orch073_*.py -v: 24 passed, 1 warning in 0.54s ``` (1 warning — PydanticDeprecatedSince20 в src/config.py, не относится к ORCH-073, не блокирует.) ## Итог **PASS** — полный регресс зелёный (941 passed), все 24 теста ORCH-073 PASS, smoke API OK, маркеры AC-1 присутствуют в `origin/main`, прод-контейнер не затронут. Задача готова к переходу на стадию `deploy-staging` (где будет проверен AC-10 — воспроизведение «исправлено навсегда» на двух задачах с правкой CHANGELOG).