6.0 KiB
work_item, stage, author_agent, status, created_at, model_used
| work_item | stage | author_agent | status | created_at | model_used |
|---|---|---|---|---|---|
| ORCH-118 | architecture | architect | accepted | 2026-06-15 | claude-opus-4-8 |
10 — Технические риски: ORCH-118 — replace avoidable LLM control paths (inventory + map + policy)
Work Item: ORCH-118 · Repo: orchestrator · Стадия: architecture
Информационный документ (гейтом не парсится). Перечисляет риски реализации этой задачи (docs + tests only — inventory/карта/политика/тесты). Риски будущих раннеров замен — в roadmap'е и в ADR соответствующих follow-up'ов, не здесь.
Реестр рисков
| ID | Риск | Вер. | Влия. | Митигейшн |
|---|---|---|---|---|
| TR-1 | Тривиальный тест — структурные тесты «зелёные, но ничего не проверяют» (рецидив корня R4: проверяют «один Popen» без control-path-оси) |
Сред. | Выс. | D5: обязательные инварианты (g) control-path-разметка сверена с src/qg/checks.py и (h) avoidable-набор {tester, deployer}; (a)+(f) двусторонний транспорт-инвариант; ревью AC-6 буквально требует (g)/(h) |
| TR-2 | False-positive матчинга транспорта — тест ловит preflight.py/config.py (bare CLAUDE_BIN — capability/литерал, не консультация) → ложный «второй транспорт» |
Сред. | Сред. | D5a: матчинг по конъюнкции признаков (CLAUDE_BIN ∧ --system-prompt ∧ Popen/bash -c); allowlist = _spawn; явный негативный кейс на preflight/config |
| TR-3 | Дрейф карты-снимка — src/qg/checks.py эволюционирует (смена потребителя / новая роль), карта не обновлена → ложно-зелёная витрина |
Сред. | Сред. | Запланированное свойство: тесты D5g/h краснеют в точке дрейфа; норматив сопровождения «менял потребителя вердикта → обнови карту в том же PR» (ADR-001 D7 / adr-0047 D6) |
| TR-4 | Хрупкий парс машинного блока — regex по прозе карты ломается на переформулировке без смыслового дрейфа | Низ. | Сред. | D2/D5: стабильный markdown-блок с фиксированным заголовком таблицы, парс stdlib-split; формат документирован |
| TR-5 | Непроверяемые ссылки / фабрикация follow-up ID (рецидив дефекта R2) | Низ. | Выс. | NFR-6/AC-9: только резолвящиеся file:line/doc-ссылки; кандидаты — по роли; тест не пинит карту к follow-up ID; ревью AC-9 |
| TR-6 | Scope-creep в рантайм — соблазн «заодно» тронуть QG_CHECKS/check_*/раннер |
Низ. | Выс. | AC-7/D7: docs+tests only; диф не меняет STAGE_TRANSITIONS/реестр-имена QG_CHECKS/machine-verdict/схему БД; нет нового раннера tester/deployer; ревью буквально |
| TR-7 | Пере-/недо-классификация (LLM убран где нужно суждение / сохранён где не нужен) | Низ. | Сред. | Класс выводится из осей D3 (двухбитный предикат), не «на глаз»; keep-LLM обязан назвать конкретное суждение; ревью карты против src/qg/checks.py |
| TR-8 | Рассинхрон golden-source — карта/политика введены, README/overview/CHANGELOG не обновлены | Сред. | Сред. | AC-8 (ось ORCH-079/011 → finding ≥P1); README-секция добавлена на стадии architecture; development досинхронизирует overview/CHANGELOG в том же PR |
| TR-9 | Line-привязки file:line устаревают между анализом и реализацией |
Низ. | Низ. | Тест проверяет якоря по имени def (наличие в src/qg/checks.py), а не по номеру строки; номера в карте — справочные, обновляются разработчиком при материализации |
Сводный вывод
Доминирующий класс — риски качества тестов и анти-дрейфа (TR-1/TR-2/TR-4), не рантайм-риски:
задача физически не меняет поведение конвейера (STAGE_TRANSITIONS/QG_CHECKS/check_*/
machine-verdict/схема БД — байт-в-байт), не деплоит и не трогает прод (self-hosting безопасно, NFR-3),
enduro-trails не затронут. Остаточный риск для прод-конвейера — пренебрежимо мал.
Эскалация arch:major-change не требуется (нет новой стадии/компонента/смены БД — это
docs+tests-only задача по прецеденту ORCH-077/079/101/102/103/011). Возврат в анализ не требуется:
ТЗ удовлетворяется без нарушения принципов архитектуры. Ключевой управляемый риск — не дать тестам
выродиться в тривиальные (TR-1) и не словить false-positive транспорта (TR-2); оба сняты дизайном D5.