5.8 KiB
5.8 KiB
Технические риски — ORCH-087
Зона изменений: src/notifications.py, src/db.py, src/agents/launcher.py,
src/usage.py, тесты. Машина стадий и QG не затрагиваются. Контракт компонента —
never-raise, карточка silent.
| ID | Риск | Вероятность / Влияние | Митигация |
|---|---|---|---|
| R-1 | Self-hosting: задача правит инструмент в проде, обслуживающем enduro-trails из общей БД/очереди. Регресс пути нотификаций мог бы испортить наблюдаемость всех проектов. | Низк. / Сред. | never-raise сохранён по всему пути; обязательный deploy-staging (8501) гейт перед прод-деплоем; нотификации не на критическом пути конвейера (ошибка не валит стадии). |
| R-2 | Telegram 48ч-лимит: сироты старше 48ч неудаляемы → могут остаться навсегда. | Сред. / Низк. | Документировано как known-limitation (ADR §Последствия, AC-1.4); _DELETE_GONE_MARKERS классифицирует как «gone» → исключает из учёта, не зацикливает ретраи. Касается только сирот ДО деплоя фикса. |
| R-3 | Гонка (d) двух update_task_tracker (queue-worker / reconciler / reaper) → лишняя карточка на один переход. |
Сред. / Низк. | Леджер самозалечивается на следующем bump (ADR Р-2); строго лучше текущего постоянного сиротства; кросс-процессный лок сознательно не вводится (цена > выгоды для silent-карточки). |
| R-4 | Миграция на живой общей прод-БД (SQLite). Неаддитивная правка могла бы тронуть данные enduro. | Низк. / Выс. | Только CREATE TABLE IF NOT EXISTS / _ensure_column (идемпотентно, no-op при существовании); никаких DROP/ALTER DROP/переименований; логический FK без REFERENCES (не падает на pre-existing БД). TC-09 проверяет идемпотентность. |
| R-5 | BR-G6 / merge-gate: ветка должна жить поверх свежего origin/main (ORCH-86); эрозия reconciler.py затёрла бы terminal-skip/state_uuid-dedup. |
Низк. / Выс. | Подтверждено: origin/main — предок HEAD; 43 маркера ORCH-086 на месте; файлы ORCH-087 НЕ пересекают reconciler.py. CHANGELOG.md под .gitattributes merge=union. Явная проверка merge-gate — TC-19 (AC-6.1/6.2). |
| R-6 | Порог tracker_brd_review_cap_s (дефолт 2ч): легитимный человеческий BRD-review длиннее 2ч отобразится как ~2ч (недо-отчёт). |
Сред. / Низк. | Конфигурируем (env); компромисс в пользу неинтродуцирования аномального застоя в «твоё время». Маркер ~ сигнализирует отсечку. Главная метрика (агенты) остаётся точной. |
| R-7 | Стамп эффорта в _spawn: доп. UPDATE agent_runs сразу после INSERT мог бы упасть и сорвать запуск агента. |
Низк. / Сред. | UPDATE по существующему run_id в уже открытом соединении; в худшем случае effort=NULL → суффикс опускается (рендер не падает, AC-E.4). Эффорт — наблюдаемость, не функциональность запуска. |
| R-8 | Регресс существующих тестов нотификаций (новый формат строки стадии с эффортом + новая done-строка времени). | Сред. / Низк. | Обновить ожидания в tests/test_notifications*.py; новый формат строго аддитивен (суффикс эффорта/подписи времени). TC-11…TC-15. |
| R-9 | Live-overlay confirm_deploy: новый ключ overlay при отсутствии UUID статуса в проекте мог бы шуметь/падать. |
Низк. / Низк. | overlay never-raise, деградирует на offline-label при отсутствии UUID/ошибке; kill-switch tracker_live_status; без base-alias (реальный отдельный статус). |
Острые точки внимания для разработчика
- Порядок в bump: зачистка ВСЕХ открытых mid из леджера →
send→ INSERT+repoint ТОЛЬКО приnew_mid is not None(R-3/BR-6). Ровно одинsendза вызов (R-4). - never-raise: любая ошибка БД-леджера / Telegram внутри
update_task_trackerгасится (как сейчас) — конвейер не падает (TC-16, AC-X.2). - Эффорт = фактический флаг: хранить
resolve_agent_effort(...)как ушло в--effort(пусто → NULL), а не пересчёт постфактум (CLI не возвращает эффорт). - Не трогать
reconciler.py/tests/test_reconciler.py(BR-G6). - Сохранить
plane_issue_link(ORCH-067) иdisable_web_page_preview(ORCH-080) в payload (TC-17, AC-X.4).