6.2 KiB
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-*. Возврат в анализ не нужен —
ТЗ удовлетворяется без нарушения принципов архитектуры.