Files
orchestrator/docs/work-items/ORCH-087/10-tech-risks.md
claude-bot 194d6c820e
All checks were successful
CI / test (push) Successful in 24s
architect(ET): auto-commit from architect run_id=426
2026-06-09 08:31:45 +03:00

4.2 KiB
Raw Blame History

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

# Риск Вероятность / Влияние Митигация
R1 Сироты старше 48ч неудаляемы (Telegram: message can't be deleted) — остаются в чате навсегда Сред / Низ (косметика) Помечаем deleted=1 (_DELETE_GONE_MARKERS), зачистка не зацикливается; новый код не порождает таких сирот (sweep на каждом апдейте ≪ 48ч). Документировано (AC-6). Старые накопленные — вне автоматики.
R2 Rate-limit / 429 при массовой зачистке накопленных сирот Низ / Низ delete_telegramFalse (transient) → запись остаётся deleted=0, повтор позже. Один best-effort delete на запись за проход; зачистка растягивается, не падает.
R3 Гонка не исключается (нет замка) — кратко возможны 2 карточки между параллельными апдейтами Сред / Низ Реестр делает гонку самозалечивающейся: sweep следующего тика подчистит лишнее (всё ≠ keep). Замок намеренно не вводим — лок в never-raise слое опаснее редкой лишней карточки (риск дедлока при max_concurrency=1).
R4 Регрессия миграции на общей прод-БД (enduro-trails) Низ / Выс Строго аддитивно: CREATE TABLE IF NOT EXISTS + _ensure_column (no-op если есть); логический FK без REFERENCES. Idempotent init_db. Покрыто TC-09.
R5 never-raise нарушен новым sweep/реестром → падение валит конвейер Низ / Выс Все helper'ы и sweep_orphans обёрнуты как соседи; update_task_tracker целиком в try/except (AC-5, TC-05). Запись эффорта в _spawn не валит launcher.
R6 Эффорт-стамп врёт (пересчёт на рендере расходится с CLI при смене конфига) Сред / Низ Источник — РОВНО строка effort, ушедшая в --effort (стамп в _spawn), не resolve_agent_effort на рендере (AC-8).
R7 Порядок в _spawn: INSERT agent_runs (стр.~449) идёт ДО резолва effort (стр.~475) Сред / Низ Реализовать UPDATE agent_runs SET effort=? WHERE id=run_id после резолва, либо перенести INSERT ниже резолва. Зафиксировано в ADR-001 §G4.2.
R8 Дыра покрытия deploy-цикла (G3): ветка статуса не отрисована Низ / Низ Тесты TC-07/TC-08 проверяют offline-лейблы (deploy/done) и overlay-маппинг (deploying/monitoring); дыра закрывается в _STAGE_STATUS_LABEL/_LIVE_BRANCH_LABELS без изменения ORCH-066.
R9 Рост tracker_messages (~N строк/задача) Низ / Низ Незначительно для SQLite; опц. фоновая обрезка deleted=1 старше X дней — вне скоупа ORCH-087.

Принятые архитектурные ограничения

  • Замок на update_task_tracker не вводится (R3) — сходимость через реестр предпочтительнее потокового лока в never-raise слое.
  • Дефолтный режим остаётся bump (фича ORCH-042/067 сохранена); edit доступен через env.
  • Изменения замкнуты в компоненте Notifications + аддитивная схема — STAGE_TRANSITIONS, QG_CHECKS, статусная модель ORCH-066, plane_sync-ключи не трогаются. Глобальный ADR не нужен.