work_item: ORCH-060 description: > Reconciler F-1 пропускает escalated (retry >= MAX_DEVELOPER_RETRIES) и явно-blocked / needs-input задачи; happy-path и no-spam сохранены. Конвенции test-фикстур — как в существующем tests/test_reconciler.py (изолированная sqlite-БД, моки Plane/Telegram/gate). Хелпер _make_task вставляет задачу; developer-ретраи моделируются вставкой N строк в agent_runs (agent='developer'); зелёный CI — через _green_ci(monkeypatch). tests: - id: TC-01 type: unit description: "AC-1: escalated dev-задача (ровно MAX_DEVELOPER_RETRIES developer-ранов) при зелёном CI НЕ разблокируется — стадия остаётся development, unblocked_total==0, новых job нет" module: tests/test_reconciler.py setup: "_make_task('development', age_s=grace+60); insert MAX_DEVELOPER_RETRIES rows agent_runs(agent='developer'); _green_ci()" expected: PASS - id: TC-02 type: unit description: "AC-2: developer-ранов > MAX_DEVELOPER_RETRIES (4–5) → также skip" module: tests/test_reconciler.py expected: PASS - id: TC-03 type: unit description: "AC-3 (регресс happy-path): developer-ранов < MAX (0/1/2) при зелёном CI → задача доигрывается development->review, unblocked_total==1" module: tests/test_reconciler.py expected: PASS - id: TC-04 type: unit description: "AC-4: граница — задача с ровно MAX пропущена, задача с MAX-1 доиграна (ровно одна advance)" module: tests/test_reconciler.py expected: PASS - id: TC-05 type: unit description: "AC-5: задача в Plane-статусе Blocked (retry<лимита) пропущена — стадия не меняется, unblocked_total==0 (мок проверки статуса возвращает Blocked)" module: tests/test_reconciler.py expected: PASS - id: TC-06 type: unit description: "AC-6: задача в Plane-статусе Needs Input (retry<лимита) пропущена" module: tests/test_reconciler.py expected: PASS - id: TC-07 type: unit description: "AC-7 (no spam): на escalated-задаче не вызваны _note_unblock / send_telegram / notify_qg_failure; нет лог-строки 'разблокирована'" module: tests/test_reconciler.py expected: PASS - id: TC-08 type: unit description: "AC-8: на escalated-задаче мок check_ci_green НЕ вызван (skip раньше пред-оценки гейта)" module: tests/test_reconciler.py expected: PASS - id: TC-09 type: unit description: "AC-9 (регресс F-2): issue в Blocked/Needs Input не передаётся ни в handle_status_start, ни в handle_verdict при reconcile_plane_once; unblocked_total==0" module: tests/test_reconciler.py expected: PASS - id: TC-10 type: unit description: "AC-10 (never-raise): проверка blocked/needs-input бросает исключение на одной задаче → тик не падает, сбойная skip, валидная соседняя обработана" module: tests/test_reconciler.py expected: PASS - id: TC-11 type: unit description: "AC-11: граница берётся из stage_engine.MAX_DEVELOPER_RETRIES — тест с monkeypatch значения константы меняет точку отсечения (нет хардкода 3)" module: tests/test_reconciler.py expected: PASS - id: TC-12 type: integration description: "AC-13 (регресс): полный прогон tests/test_reconciler.py (ORCH-053 кейсы) — все прежние тесты зелёные" module: tests/test_reconciler.py expected: PASS