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

21 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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_telegram``False` (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 не нужен.