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

5.8 KiB
Raw Permalink Blame History

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) не нужен. Остаточный риск для прод-конвейера — низкий.