Files
orchestrator/docs/work-items/ORCH-053/10-tech-risks.md

5.3 KiB
Raw Permalink Blame History

10 — Технические риски — ORCH-053

Work Item ID: ORCH-053 Severity: 🔴 high / 🟡 medium / 🟢 low

# Риск Sev Митигация (где зафиксировано)
R-1 Гонка reconciler↔живой webhook → двойная задача (оба видят «нет задачи» на In Progress). 🔴 Atomic-claim db.create_task_atomic под process-wide threading.Lock (ADR-001 §4, 08-data). AC-4 / TC-15.
R-2 Двойной запуск агента на стадии (reconciler дёргает гейт у задачи в работе). 🔴 has_active_job_for_task guard + max_concurrency=1 + atomic claim_next_job; update_task_stage обновляет updated_at (ADR-001 §5). AC-3 / TC-03.
R-3 Спам нотификаций на стабильно красном гейте каждый тик. 🔴 «Не вызывать advance_stage на красном» → ветка notify_qg_failure не достигается (ADR-001 §2). AC-9 / TC-06.
R-4 Автопродвижение неодобренного BRD (F-1 продвинул analysis без Approved в Plane). 🔴 F-1 не реконсилирует analysis; advance стадии — только F-2 по реальному статусу Plane (ADR-001 §6). AC-16 / TC-08.
R-5 Дублирование логики advance/rollback в reconciler (расхождение с webhook-путём со временем). 🟡 Продвижение строго через advance_stage(..., finished_agent=None); F-2 — через handle_* из plane.py; своего update_task_stage/enqueue_job для advance нет (ADR-001 §2-3). AC-2 / TC-02.
R-6 Падение тика из-за одной битой задачи/issue (битые данные, ошибка API). 🟡 Per-task / per-issue try/except + outer try/except в _run (паттерн _drain_once). AC-15 / TC-09. list_issues_by_state never-raise → []. TC-16.
R-7 Нагрузка/недоступность Plane API при опросе каждые N сек. 🟡 Интервал 120с + фильтр по статусам + per-project + кэш get_project_states; never-raise → мягкая деградация (ADR-001 §3, 07-infra).
R-8 asyncio.run из sync-потока (event loop конфликты, зависание). 🟡 Свежий loop на единицу работы; внутри per-issue try/except; нет вложенного running loop (reconciler — не async). ADR-001 §3.
R-9 Self-hosting: reconciler меняет инструмент всех проектов / нежелательное срабатывание на проде. 🔴 Kill-switch reconcile_enabled; раздельный reconcile_plane_enabled; деплой через staging-гейт; не рестартит прод. ADR-001 §1, 07-infra. AC-13 / TC-10.
R-10 Двойная оценка гейта на зелёной задаче (пред-оценка + повтор в advance_stage); долгий ci_poll держит тик. 🟢 Гейты идемпотентны/read-only; на целевом кейсе (CI уже зелёный) возвращаются быстро; reconciler — отдельный daemon-поток. Осознанная цена за неизменность advance_stage (ADR-001 §2).
R-11 Ложный sha→branch матч в F-3 при неоднозначности. 🟡 БД-fallback срабатывает только при ровно одной development-задаче repo; иначе — неразрезолвлено + INFO; success/failure-семантика гейта не тронута (ADR-001 §8). AC-14 / TC-18, TC-19.
R-12 Регресс реестров (STAGE_TRANSITIONS/QG_CHECKS) или схемы. 🟡 Реестры/схема не меняются; snapshot-тест (ADR-001 §9). AC / TC-23.
R-13 Дубль на стадии deploy-staging↔merge-gate (reconciler триггерит advance, конкурируя с merge-lease). 🟢 F-1 продвигает только через advance_stage, который штатно прогоняет merge-gate (defer/rollback владеет исходом); active-job guard + updated_at — без гонки на тике (ADR-001 §2).
R-14 Multi-process деплой ломает анти-дубль (Lock — внутрипроцессный). 🟢 Текущая топология single-process (как очередь ORCH-1); ограничение задокументировано, DB UNIQUE-индекс — будущее упрочнение (08-data).

Сводно

Самые острые (🔴) — анти-дубль на создании (R-1), двойной запуск (R-2), спам (R-3), автопродвижение analysis (R-4), self-hosting (R-9) — закрыты явными механизмами с покрытием в 04-test-plan.yaml. Остаточные допущения: single-process топология (R-14) и осознанная двойная оценка гейта (R-10).