--- type: test-report work_item_id: ORCH-060 result: PASS --- # Test Report — ORCH-060 Reconciler F-1 пропускает escalated (retry ≥ MAX_DEVELOPER_RETRIES) и явно Blocked / Needs-Input задачи; happy-path и no-spam сохранены. ## Окружение - Python: 3.12.13 - pytest: 8.3.3 (plugins: anyio-4.13.0, asyncio-0.23.8) - Ветка: `feature/ORCH-060-reconciler-escalated-max-retri` @ `55e5e96` (фикс: `4db8276 fix(reconciler): skip escalated / Blocked / Needs-Input tasks in F-1`) - Дата: 2026-06-07 - Review verdict: APPROVED (`12-review.md`) ## Smoke test API (прод 8500, read-only) > `curl` отсутствует в окружении тестера — проверка выполнена через `python urllib`. > Прод-контейнер НЕ перезапускался / не ронялся (self-hosting, CLAUDE.md §⚠️). | Endpoint | HTTP | Ответ | |----------|------|-------| | `GET /health` | 200 | `{"status":"ok","service":"orchestrator"}` | | `GET /status` | 200 | активные задачи отданы (в т.ч. ORCH-060 stage=testing) | | `GET /queue` | 200 | counts/resilience/reconcile-блок отданы | ## Результаты (test-plan 04-test-plan.yaml → AC) | TC ID | AC | Описание | Тест | Результат | |-------|-----|----------|------|-----------| | TC-01 | AC-1 | escalated == MAX_DEVELOPER_RETRIES при зелёном CI → skip | `test_tc060_01_escalated_at_limit_skipped` | PASS | | TC-02 | AC-2 | dev-ранов > MAX → skip | `test_tc060_02_over_limit_skipped` | PASS | | TC-03 | AC-3 | регресс happy-path: retry < MAX → advance dev→review | `test_tc060_03_under_limit_still_advances` | PASS | | TC-04 | AC-4 | граница: ровно MAX skip, MAX−1 advance (ровно одна) | `test_tc060_04_boundary_exactly_one_advances` | PASS | | TC-05 | AC-5 | Plane-статус Blocked → skip | `test_tc060_05_blocked_skipped` | PASS | | TC-06 | AC-6 | Plane-статус Needs Input → skip | `test_tc060_06_needs_input_skipped` | PASS | | TC-07 | AC-7 | no spam на escalated (нет _note_unblock/telegram/qg-fail) | `test_tc060_07_escalated_no_spam` | PASS | | TC-08 | AC-8 | escalated → мок check_ci_green НЕ вызван (skip раньше гейта) | `test_tc060_08_no_gate_call_on_escalated` | PASS | | TC-09 | AC-9 | регресс F-2: Blocked/Needs Input не доигрывается | `test_tc060_09_f2_does_not_replay_blocked` | PASS | | TC-10 | AC-10 | never-raise: ошибка guard2 изолирована, сосед обработан | `test_tc060_10_guard2_never_raise` | PASS | | TC-11 | AC-11 | граница из stage_engine.MAX_DEVELOPER_RETRIES (нет хардкода 3) | `test_tc060_11_limit_from_constant` | PASS | | — | — | под-флаг `reconcile_skip_blocked_enabled` гасит только guard2 | `test_tc060_subflag_disables_only_guard2` | PASS | | TC-12 | AC-13 | регресс: полный прогон test_reconciler.py (ORCH-053 кейсы) | `tests/test_reconciler.py` (27 passed) | PASS | | — | AC-12 | документация (README/ADR/CHANGELOG) — проверено reviewer'ом | — | PASS | ## Вывод pytest Полный регресс: ``` $ python -m pytest tests/ -q ........................................................................ [ 11%] ... (644 dots) ... .................................................................... [100%] 644 passed, 1 warning in 15.65s ``` Целевой модуль: ``` $ python -m pytest tests/test_reconciler.py -v ... 27 passed, 1 warning in 1.23s ``` (1 warning — PydanticDeprecatedSince20 в `src/config.py:4`, не связано с ORCH-060, существующий технический долг.) ## Итог **PASS** — все 13 критериев приёмки покрыты и зелёные, полный регресс 644/644, целевой модуль 27/27, smoke API 3/3. Регрессий нет. Задача готова к стадии deploy-staging.