5.2 KiB
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-113 | testing | tester | pass | 2026-06-15 | claude-opus-4-8 | test-report | ORCH-113 |
Test Report — ORCH-113
BUG: job-reaper не должен повторно запускать финализацию deploy-staging, пока жив исходный finalizer.
Окружение
- Worktree:
/repos/_wt/orchestrator/feature_ORCH-113-bug-job-reaper-must-not-re-run(веткаfeature/ORCH-113-bug-job-reaper-must-not-re-run) - Python: 3.12.13
- pytest: 8.3.3 (plugins: cov-5.0.0, anyio-4.13.0, asyncio-0.23.8)
- Дата: 2026-06-15
- Review verdict (12-review.md):
APPROVED
Smoke API (read-only)
| Endpoint | Результат |
|---|---|
GET /health |
{"status":"ok","service":"orchestrator"} — PASS |
GET /status |
Отвечает; ORCH-113 (task 101) виден на стадии testing — PASS |
GET /queue |
Блоки serial_gate (ORCH-088) и auto_labels (ORCH-089) присутствуют — PASS |
Результаты — покрытие тест-плана (04-test-plan.yaml)
Все TC реализованы в tests/test_orch113_reaper_finalizer_liveness.py (13 тест-функций на 8 TC).
| TC ID | Описание | AC / FR | Тест-функция | Результат |
|---|---|---|---|---|
| TC-01 | Живой finalizer на deploy-staging (exit=0, age≥grace) → reaper НЕ вызывает _gate_driven_advance/advance_stage, логирует defer |
AC-1/FR-1 | test_tc01_live_finalizer_deploy_staging_not_reaped |
PASS |
| TC-02 | Строгое владение: актор без владения НЕ исполняет merge-gate/re-test/advance (ноль побочных эффектов) | AC-2/FR-2 | test_tc02_non_owner_runs_no_edge_gates |
PASS |
| TC-03 | Мёртвый finalizer → reaper по-прежнему добивает job (Tier-2 retry + Tier-3 backstop игнорирует маркер); reaper не no-op | AC-3/FR-4 | test_tc03_dead_finalizer_still_reaped_tier2, test_tc03_tier3_backstop_ignores_marker |
PASS |
| TC-04 | Идемпотентность под гонкой: тяжёлый прогон edge-гейтов исполняется ровно один раз для (job, stage), нет второго re-test/ложного rollback |
AC-2/AC-4/FR-2/FR-5 | test_tc04_idempotent_no_second_advance_under_race |
PASS |
| TC-05 | ОБЯЗАТЕЛЬНЫЙ регресс ORCH-111: долгая (>grace) финализация при staging_status=SUCCESS → нет отката deploy-staging → development, нет ложного developer-retry; единственное консистентное состояние (красный до фикса, зелёный после) |
AC-4/FR-5 | test_tc05_orch111_no_false_rollback_no_retry_increment |
PASS |
| TC-06 | Регресс-гард совместимости: kill-switch off ИЛИ не-deploy-staging → поведение reaper байт-в-байт прежнее |
NFR-4/AC-5 | test_tc06_killswitch_off_byte_for_byte_prior, test_tc06_non_deploy_staging_stage_not_consulted, test_tc06_within_grace_unchanged |
PASS |
| TC-07 | Сквозной инвариант бюджета: reaper_max_running_s (5400) > Σ(deploy-staging gate-work) + grace (ORCH-065/109/110) |
NFR-6/AC-5 | test_tc07_budget_invariant_preserved |
PASS |
| TC-08 | never-raise: сбой пути живости/владения деградирует безопасно — reaper-тик не падает, прочие job обрабатываются | NFR-1/NFR-3/AC-5 | test_tc08_liveness_error_never_breaks_tick, test_tc08_reap_once_isolates_and_never_raises, test_tc08_finalizer_liveness_leaf_never_raises |
PASS |
Сопоставление с 03-acceptance-criteria.md: AC-1…AC-6 покрыты (AC-1→TC-01, AC-2→TC-02/TC-04, AC-3→TC-03, AC-4→TC-04/TC-05, AC-5→TC-06/TC-07/TC-08, AC-6→полный зелёный прогон + TC-05 как регресс-доказательство). Каждый TC из тест-плана выполнен и сопоставлен.
Вывод pytest
Целевой файл:
tests/test_orch113_reaper_finalizer_liveness.py ... 13 passed, 1 warning in 3.60s
Полный регресс:
$ python -m pytest tests/ -q
........................................................................ [ 39%]
... (snip) ...
......................................................... [100%]
2001 passed, 1 warning in 316.72s (0:05:16)
(единственный warning — PydanticDeprecatedSince20 в src/config.py:8, не относится к задаче, присутствует исторически)
Итог
PASS — целевой файл 13/13 PASS, полный регресс tests/ 2001 passed / 0 failed, smoke API (/health, /status, /queue с блоками serial_gate + auto_labels) зелёный, каждый TC тест-плана выполнен и сопоставлен с критериями приёмки. Задача переходит на deploy-staging.