5.8 KiB
work_item, stage, author_agent, status, created_at, model_used
| work_item | stage | author_agent | status | created_at | model_used |
|---|---|---|---|---|---|
| ORCH-098 | architecture | architect | proposed | 2026-06-10 | claude-opus-4-8 |
10 — Технические риски: ORCH-098 — машинный журнал уроков lessons
Work Item: ORCH-098 · Repo: orchestrator · Стадия: architecture
Информационный (гейтом не парсится). Риски реализации и их митигейшн.
Реестр рисков
| ID | Риск | Вер. | Влия. | Митигейшн |
|---|---|---|---|---|
| TR-1 | Врезка детектора в горячий путь конвейера (stage_engine/merge_gate/launcher) бросает исключение → регрессия пайплайна на self-hosting прод-инстансе (встанет конвейер всех проектов, в т.ч. enduro). |
Низ. | Выс. | NFR-1 never-raise: lessons.record полностью self-contained try/except → None; каждая врезка дополнительно обёрнута защитным try/except (паттерн post-deploy-freeze, stage_engine.py:~1993), ловит даже ошибку импорта. NFR-2 kill-switch ORCH_LESSONS_ENABLED=false → no-op. Юнит-тест с замоканной падающей БД (AC-6). |
| TR-2 | Неограниченный рост таблицы lessons (автозапись на каждом откате/HOLD/деградации) на впритык-хосте (диск 92%). |
Сред. | Низ. | Лёгкие строки (короткий текст); дедуп D4 (один indexed-SELECT в окне) + transient_retry только на budget-exhaustion гасят флуд в источнике. Ретенция/архивация — отдельная будущая задача (вне объёма v1); тренд наблюдаем через snapshot() в GET /queue. |
| TR-3 | Недооформленная схема атрибуции → переделка схемы на живой общей прод-БД, когда появится ретроспировщик (E2). | Низ. | Сред. | BR-2/NFR-6: три нуллабельные колонки атрибуции (attribution/target_repo/target_domain) в схеме сразу; update/POST /lessons/{id} позволяет доклассифицировать unknown позже без миграции. Слаги без enum-констрейнта → новые значения не требуют DDL. |
| TR-4 | Дубли автозаписи на ретраях/повторных откатах искажают будущий pattern-анализ. | Сред. | Низ. | Дедуп D4 для source="auto": indexed SELECT по idx_lessons_wi_type в окне ORCH_LESSONS_DEDUP_WINDOW_S перед INSERT. manual дедуп не проходит. Если в реальном прогоне дедуп окажется слишком строгим/слабым — окно конфигурируемо без передеплоя логики. |
| TR-5 | Случайное касание инвариантов конвейера (STAGE_TRANSITIONS/QG_CHECKS/check_*/machine-verdict/схемы существующих таблиц) при врезках. |
Низ. | Выс. | Врезки — строго аддитивные одиночные вызовы; AC-8 требует «диффом не затронуты». Reviewer проверяет дифф перечисленных артефактов. Журнал не участвует в решении гейта (FR-6). |
| TR-6 | Эндпоинт POST /lessons//lessons/{id} как непреднамеренный мутатор/вектор (запись в прод-БД без аутентификации). |
Низ. | Сред. | Пишет только в аддитивную таблицу lessons (не трогает tasks/jobs/гейты); never-raise; enabled:false при выключенном флаге. Тот же уровень доступа, что у существующего POST /coverage/baseline. Дальнейшее ужесточение доступа — общая инфра-тема, вне объёма ORCH-098. |
Сводный вывод
Доминирующий класс рисков — изоляция наблюдателя от горячего пути конвейера на self-hosting
прод-инстансе (TR-1, TR-5): высокое влияние при низкой вероятности, полностью покрыто
проверенной связкой never-raise + kill-switch + чистая аддитивность, идентичной уже работающим
leaf'ам (serial_gate/coverage_gate/metrics/bug_fast_track). Вторичный класс — рост/шум
данных (TR-2/TR-4): низкое влияние, смягчён лёгкими строками, дедупом и budget-exhaustion-записью;
ретенция вынесена в будущее.
Эскалация не требуется. Несмотря на формально «новый компонент + новая таблица», изменение
следует устоявшемуся additive-observer-leaf шаблону, не трогает машину стадий, гейты и схемы
существующих таблиц, полностью обратимо флагом → метка arch:major-change не выставляется,
возврат в анализ (back-to:analysis) не нужен. Остаточный риск для прод-конвейера — низкий.