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

6.2 KiB
Raw Blame History

work_item, stage, author_agent, status, created_at, model_used
work_item stage author_agent status created_at model_used
ORCH-109 architecture architect proposed 2026-06-14 claude-opus-4-8

10 — Технические риски: ORCH-109 — timeout budgets + launch-time model telemetry

Work Item: ORCH-109 · Repo: orchestrator · Стадия: architecture

Информационный (гейтом не парсится). Перечисляет риски реализации и их митигейшн.

Реестр рисков

ID Риск Вер. Влия. Митигейшн
TR-1 Поднятый бюджет developer/reviewer + grace ≥ reaper_max_running_s → job-reaper реапает здоровый долгий прогон до его watchdog'а (нарушение инварианта ORCH-065) Низ. Выс. reaper синхронно поднят 3600→5400; sanity-тест проверяет reaper_max_running_s > max(timeout)+grace для всех ролей (5400 > 3620, запас 1780s); число живёт в config.py + .env.example рядом с инвариантом-комментарием (ADR D4/AC-5)
TR-2 Постфактум-enrich (record_usage) затирает корректный launch-стамп при странном/оборванном JSON (model=None) Низ. Сред. Семантика model=COALESCE(?, model) (usage.py:217) уже сохраняет launch-значение; зафиксировано регресс-тестом (AC-2); record_usage не правится
TR-3 Гонка двух писателей exit_code (_record_kill=-9 и _monitor_agent=proc.wait()) искажает телеметрию модели Низ. Низ. Модель — отдельная колонка, стампится один раз на launch до обоих писателей exit_code; они трогают только exit_code/finished_at. Подтверждается тестом (AC-1/AC-6)
TR-4 Глобальность бюджета: поднятый developer-тайм-аут для enduro маскирует реально зависший прогон Низ. Сред. Tier-3 backstop reaper'а (reaper_max_running_s) сохранён как абсолютный потолок; watchdog по-прежнему убивает в ≤ бюджета; бюджет лишь повышен, не снят
TR-5 Sidecar agent_hung_min=20м заметно ниже бюджета developer (60м) → Telegram-алерты agent_hung для здоровых длинных прогонов Сред. Низ. Сигнал alert-only (sidecar — наблюдатель, не убивает, ORCH-100); конъюнкция с cpu<1% гасит активный прогон; тюнинг WATCHDOG_AGENT_HUNG_MIN — вне объёма (отдельный sidecar-конфиг). Бюджет 5400s < stage_stuck_s=7200s → stage_stuck не ложит
TR-6 Сбой записи launch-стампа модели (ошибка БД) роняет launch Низ. Выс. Стамп в существующем try/except ORCH-087 + WARNING (never-raise, NFR-2); model_flag строится из локальной переменной, не из БД → launch не зависит от стампа (ADR D1)
TR-7 Малформный/невалидный timeout-конфиг (битый JSON, нечисловой/отрицательный ключ) роняет прогон или старт Низ. Сред. Малформный JSON → игнор + WARNING (существующее, launcher.py:677); выделенный ключ вне диапазона → откат на глобальный дефолт + WARNING (защитная валидация по образцу ORCH-063 D7); pydantic ловит нечисловой env на старте (AC-4)
TR-8 Регресс прочих ролей: правка _resolve_timeout случайно меняет бюджет analyst/architect/tester/deployer Низ. Сред. Лестница приоритетов: dev/reviewer — только по точному имени роли; прочие падают на agent_timeout_seconds (1800) без изменений; покрыто тестом per-role (AC-3)
TR-9 Доп. риск контрактов: правка случайно задевает STAGE_TRANSITIONS/QG_CHECKS/machine-verdict/схему Низ. Выс. Задача целиком вне слоя гейтов; диф-проверка AC-9; колонка agent_runs.model уже есть — ни одного CREATE/ALTER

Сводный вывод

Доминирующий класс — конфигурационные инварианты подсистемы запуска (TR-1/TR-7/TR-8): все снимаются детерминированной лестницей _resolve_timeout, защитной валидацией (never-break) и sanity-тестом reaper-неравенства. Остаточный риск для прод-конвейера (self-hosting) — низкий: изменение аддитивно, обратимо через .env, не трогает гейты/схему/деплой-путь и не рестартит прод-контейнер (NFR-5). Единственный наблюдаемый побочный эффект — возможный рост alert-only agent_hung-нотификаций sidecar (TR-5), не влияющий на конвейер.

Эскалация: не требуется на уровне arch:major-change (нет новой стадии/компонента/смены БД), но решение кросс-каттинговое (меняет два глобальных per-agent инварианта всех репо + потолок Tier-3 reaper'а) → зарегистрировано сквозным docs/architecture/adr/adr-0040-*. Возврат в анализ не нужен — ТЗ удовлетворяется без нарушения принципов архитектуры.