Files
orchestrator/docs/work-items/ORCH-110/13-test-report.md
claude-bot 04d5671e1b
All checks were successful
CI / test (push) Successful in 4m35s
CI / test (pull_request) Successful in 4m24s
tester(ET): auto-commit from tester run_id=690
2026-06-15 10:42:34 +03:00

6.6 KiB
Raw Blame History

result, work_item, stage, author_agent, status, created_at, model_used, type, work_item_id
result work_item stage author_agent status created_at model_used type work_item_id
PASS ORCH-110 testing tester pass 2026-06-15 claude-opus-4-8 test-report ORCH-110

Test Report — ORCH-110

Багфикс инцидента ORCH-109/PR#129: локальный re-test merge-gate падал по таймауту (инфра/CPU- голодание от осиротевших pytest-процессов) при зелёных CI+tester+staging → ложно маршрутизировался как код-фейл (откат deploy-staging → development + расход developer-retry) → manual-gate. Прогон регресса подтверждает: инфра-таймаут толерируется (D1…D6), tree-kill устраняет утечку, красный re-test по-прежнему откатывает.

Окружение

  • Python: 3.12.13
  • pytest: 8.3.3 (plugins: cov-5.0.0, anyio-4.13.0, asyncio-0.23.8)
  • Worktree: /repos/_wt/orchestrator/feature_ORCH-110-bug-merge-gate-local-re-test-t
  • Branch: feature/ORCH-110-bug-merge-gate-local-re-test-t (HEAD 5391c8b; fix-коммит b80edf3)
  • Дата: 2026-06-15

Smoke API (read-only)

Эндпоинт Результат
GET /health {"status":"ok","service":"orchestrator"} — OK
GET /status OK; задача ORCH-110 (id=100) на стадии testing, agent_running=null
GET /queue OK; блок serial_gate присутствует ✓ (наряду с auto_labels ✓); полезная нагрузка не деградировала

Прим.: блок merge_gate (новая наблюдаемость ORCH-110, FR-6) в проде (8500) ещё отсутствует — это ожидаемо, фича не задеплоена (задача на стадии testing). В коде ветки блок присутствует и покрыт тестом TC-12 (test_tc12_queue_endpoint_includes_merge_gate_block). Регресса смока нет.

Результаты (покрытие ТЗ: каждый TC из 04-test-plan.yaml ↔ 03-acceptance-criteria.md)

TC ID Описание AC Модуль Результат
TC-01 retest_branch: таймаут → (False, 're-test timeout after <T>s') + tree-kill всего дерева (внуки не переживают) AC-4 (BR-3) test_orch110_retest_lifecycle.py PASS
TC-02 coverage_gate.measure_coverage: таймаут → tree-kill дерева; возврат None сохранён AC-4 (BR-3) test_orch110_retest_lifecycle.py PASS
TC-03 classify_retest_failure: timeout различим от red/lock-busy/other (имя/семантика check_* целы) AC-2 test_orch110_merge_gate_classify.py PASS
TC-04 Маршрутизация: инфра-таймаут → defer/повтор/инфра-alert (НЕ _handle_merge_gate_rollback, без developer-retry) AC-1 test_orch110_merge_gate_routing.py PASS
TC-05 Анти-над-толерантность: красный/конфликт re-test → откат на development + developer-retry + release lease (BR-6) AC-3 test_orch110_merge_gate_routing.py PASS
TC-06 Anti-loop: повторы лимитированы по попыткам/времени; исчерпание → один инфра-alert AC-9 test_orch110_merge_gate_routing.py PASS
TC-07 Kill-switch off → байт-в-байт прежнее (таймаут → rollback); not-self repo (enduro) → no-op AC-7 test_orch110_killswitch.py PASS
TC-08 Бюджет: malformed/непозитив → дефолт 900 + WARNING; reaper_max_running_s (5400) > Σ+grace; reaper_max_running_s не тронут AC-5 test_orch110_budget_invariants.py PASS
TC-09 never-raise: ошибка транзиент-пути → безопасный дефолт + WARNING; исключение не уходит в advance_stage AC-8 test_orch110_merge_gate_routing.py PASS
TC-10 РЕГРЕСС инцидента: no-op rebase → skip+advance; catch-up timeout → infra-retry (НЕ rollback); красный → rollback (red-before/green-after) AC-10 test_orch110_false_rollback_regression.py PASS
TC-11 Контракт необходимости re-test: no-op rebase → skip (lease HELD); HEAD сдвинулся / неопределённость SHA → re-test (fail-safe) AC-6 test_orch110_retest_contract.py PASS
TC-12 Наблюдаемость: счётчики + блок merge_gate в GET /queue; инфра-alert кликабелен и отличим от код-фейла; без дубля ORCH-111 AC-9 (FR-6) test_orch110_observability.py PASS

Все 12 TC выполнены и сопоставлены с критериями приёмки AC-1…AC-10. FAIL/непокрытых TC нет.

Вывод pytest

ORCH-110-специфичные модули (verbose)

collected 55 items
tests/test_orch110_retest_lifecycle.py ........  (TC-01, TC-02)
tests/test_orch110_merge_gate_classify.py ........  (TC-03)
tests/test_orch110_merge_gate_routing.py ........  (TC-04, TC-05, TC-06, TC-09)
tests/test_orch110_killswitch.py ....  (TC-07)
tests/test_orch110_budget_invariants.py .........  (TC-08)
tests/test_orch110_false_rollback_regression.py ...  (TC-10)
tests/test_orch110_retest_contract.py ......  (TC-11)
tests/test_orch110_observability.py .....  (TC-12)
======================== 55 passed, 1 warning in 15.17s ========================

Полный регресс

$ cd /repos/_wt/orchestrator/feature_ORCH-110-bug-merge-gate-local-re-test-t && python3 -m pytest tests/ -q --tb=short
........................................................................ [100%]
1988 passed, 1 warning in 346.71s (0:05:46)

(Единственное warning — PydanticDeprecatedSince20 в src/config.py:8, предсуществующее, не связано с ORCH-110.)

Итог

PASS

  • Полный регресс pytest tests/1988 passed (0 failed).
  • Все 12 TC из 04-test-plan.yaml выполнены, сопоставлены с 03-acceptance-criteria.md (AC-1…AC-10) — PASS.
  • Smoke API read-only (/health, /status, /queue) — OK; блоки serial_gate и auto_labels присутствуют.
  • Review-вердикт — APPROVED.

Вердикт: result: PASS → задача переходит на deploy-staging.