Files
orchestrator/docs/work-items/ORCH-082/13-test-report.md
claude-bot 039322001a
All checks were successful
CI / test (push) Successful in 27s
CI / test (pull_request) Successful in 25s
tester(ET): auto-commit from tester run_id=411
2026-06-09 00:57:08 +03:00

5.5 KiB
Raw Permalink Blame History

type, work_item_id, result
type work_item_id result
test-report ORCH-082 PASS

Test Report — ORCH-082

Гарантированный идемпотентный код-PR перед merge-verify (фикс ложного HOLD «no open PR»).

Окружение

  • Python: 3.12.13
  • pytest: 8.3.3
  • Ветка: feature/ORCH-082-orch-81-pr-merge-verify-hold
  • Дата: 2026-06-09
  • Review verdict: APPROVED (12-review.md, P0/P1 отсутствуют)

Проверка окружения

  • GET /health{"status":"ok","service":"orchestrator"} — прод-контейнер 8500 жив.
  • Тесты прогнаны в worktree ветки (прод не затронут, деструктивных операций нет).

Smoke test API (prod 8500)

Endpoint Результат
GET /health {"status":"ok"} — OK
GET /status OK — ORCH-082 (id=61) виден на стадии testing
GET /queue OK — running:1, queued:0, breaker closed, reconcile/reaper/post_deploy активны

Результаты (привязка к 04-test-plan.yaml)

TC ID Тип Описание Тест Результат
TC-01 unit ensure_open_pr: PR нет → POST создаёт → ('created', N); фильтр base==main test_tc01_creates_pr_when_absent PASS
TC-02 unit PR head==branch И base==main уже есть → ('existed', N), POST не вызывается test_tc02_existed_no_duplicate PASS
TC-03 unit Мульти-PR: только docs-PR (base!=main) → создаётся PR на main (AC-6) test_tc03_docs_pr_not_counted_creates_on_main PASS
TC-04 unit never-raise: GET/POST кидает ошибку → ('failed', reason), не всплывает (AC-7) test_tc04_never_raise_on_get_error / _on_post_error / _failed_when_post_non_2xx PASS (3)
TC-05 unit Гонка: POST 'PR exists' (409/422) → повторный GET → ('existed', N), без дубля test_tc05_race_post_conflict_confirms_existing[409,422] PASS (2)
TC-06 integration PR отсутствовал → ensure создаёт → merge_pr → verify True → done без HOLD (AC-3) test_tc06_autocreate_then_merge_then_done PASS
TC-07 integration Регресс ORCH-073: verify=False → HOLD + set_issue_blocked, НЕ done, без отката (AC-4) test_tc07_verify_false_still_holds PASS
TC-08 integration ensure → 'failed' (Gitea down) → честный HOLD+alert, текст ≠ 'not merged' (AC-7) test_tc08_ensure_failed_holds_distinct PASS
TC-09 integration Kill-switch off → ensure не вызывается, 'no open PR' → прежний HOLD 1:1 (AC-8) test_tc09_killswitch_off_no_autocreate PASS
TC-10 integration Условность: non-self репо (applies=False) → no-op, авто-создание не выполняется (AC-9) test_tc10_non_self_repo_noop PASS
TC-11 integration Идемпотентный повторный проход: PR existed, already-merged → verify True → done (FR-5) test_tc11_idempotent_redrive PASS
TC-12 unit Логи различают created/existed/failed; HOLD create-failed ≠ HOLD not-merged (AC-5) test_tc12_logs_distinguish_outcomes PASS
TC-13 integration Happy-path ORCH-071/073 не изменён: verify True → done, merged_to_main: true test_merge_verify.py (verify_true_when_sha_is_ancestor + 7 регресс-тестов) PASS

Все 13 TC из тест-плана покрыты и зелёные.

Сопоставление с критериями приёмки (03-acceptance-criteria.md)

  • AC-1 Root cause в ADR-001 (R-A структурный + R-C для ORCH-074) — подтверждено review.
  • AC-2 Идемпотентный код-PR, без дублей — TC-02, TC-05, TC-11 — PASS.
  • AC-3 Авто-создание PR ПЕРЕД merge_pr — TC-06 — PASS.
  • AC-4 Защита ORCH-073 цела (verify=False → HOLD, не done) — TC-07 + test_merge_verify — PASS.
  • AC-5 Логи различают исход PR — TC-12 — PASS.
  • AC-6 Фильтр base==main (docs-PR не код-PR) — TC-03 — PASS.
  • AC-7 Never-raise + честный HOLD при недоступности Gitea — TC-04, TC-08 — PASS.
  • AC-8 Kill-switch off → поведение 1:1 — TC-09 — PASS.
  • AC-9 Условность self-hosting — TC-10 — PASS.
  • AC-10 Инварианты не нарушены, документация обновлена — подтверждено review (README/CHANGELOG/.env.example/ADR).
  • AC-11 pytest зелёный — 1046 passed — PASS.

Вывод pytest

Полный прогон:

1046 passed, 1 warning in 25.57s

(единственный warning — PydanticDeprecatedSince20 в src/config.py:5, не относится к ORCH-082, предсуществующий.)

Целевые наборы:

tests/test_orch082_ensure_pr.py ............ (8 passed)
tests/test_orch082_merge_verify_autocreate.py ....... (7 passed)
tests/test_merge_verify.py ........ (8 passed)
======================== 23 passed, 1 warning in 0.42s =========================

Итог

PASS — все 1046 тестов зелёные, целевые наборы ORCH-082 + регресс merge-verify зелёные, smoke API (health/status/queue) OK, все 13 TC и AC-1..AC-11 покрыты. Задача готова к переходу на стадию deploy-staging.