5.3 KiB
5.3 KiB
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).