4.5 KiB
4.5 KiB
10 — Технические риски: ORCH-073
| # | Риск | Вероятность | Влияние | Митигация |
|---|---|---|---|---|
| R-1 | Ложный HOLD на сбое Gitea/git — verify консервативно False при недоступности → задача не доходит до done, нужен повтор. |
средняя | среднее | Осознанный fail-closed для done (приоритет: не дать ложно-зелёный). Снимается re-drive (reaper/reconciler/re-approve). Документировано в ADR «Последствия». |
| R-2 | pr_already_merged всё ещё ловит docs-PR при иной структуре head/base в Gitea (cross-repo owner:branch). |
низкая | высокое (возврат бага) | Явный фильтр в цикле head.ref==branch И base.ref=="main" (не полагаться на query-param). Тест AC-2/AC-3 мокает merged docs-PR и проверяет, что verify=False. |
| R-3 | Регресс-гард fail-open пропустит реальный регресс во время git-сбоя грепа. | низкая | среднее | Первичный гейт done — SHA-в-main (fail-closed). Marker-grep вторичен; «регресс» — только при детерминированном count==0. Trade-off зафиксирован в ADR. |
| R-4 | Набор маркеров устаревает/неполный — будущая задача не добавила свой маркер → гард её не защищает. | средняя | среднее | Append-only константа в коде + правило в CLAUDE.md/README «значимая задача дописывает маркер». Reviewer проверяет. Не регресс существующего поведения (только недозащита нового). |
| R-5 | merge=union тихо дублирует строки при применении к не-append-only файлам. |
низкая | среднее | Union строго ограничен CHANGELOG.md; docs/** под union НЕ ставится (решение Р-5 ADR). |
| R-6 | Самозагрузка .gitattributes — первая задача не получает эффект union на своём ребейзе. |
высокая (одноразово) | низкое | Принято: атрибут попадёт в main после merge ORCH-073, действует для последующих задач. Для самой ORCH-073 CHANGELOG-конфликт разрешается вручную при необходимости. |
| R-7 | Ложный «main regressed» при легитимном рефакторе, переименовавшем маркер-функцию. | низкая | среднее | Маркеры выбираются как стабильные публичные имена; при намеренном переименовании задача обновляет MAIN_REGRESSION_MARKERS в том же PR (правило документации). |
| R-8 | Регресс на non-self репо (enduro) из-за нового кода. | низкая | высокое | Вся врезка под merge_verify_applies (kill-switch + self-hosting scope); регресс-гард — отдельный regression_guard_enabled; non-self → no-op (INV-5). Тест AC-6 (enduro no-op). |
| R-9 | Self-hosting: рестарт/падение прода при ошибке в merge_gate. | низкая | высокое (групповой риск) | never-raise контракт (INV-1); merge только PR-API без force-push; staging-гейт обязателен; прод не рестартится в рамках merge. Тест AC-11. |
Сводный вывод
Изменения локализованы в src/merge_gate.py + врезка в _handle_merge_verify
(src/stage_engine.py) + новый ключ конфигурации + корневой .gitattributes. Схема БД, Plane,
внешние HTTP-эндпоинты, реестр QG, STAGE_TRANSITIONS — не затронуты. Главный остаточный риск —
ложный HOLD на инфра-сбое (R-1), сознательно принят ради устранения ложно-зелёного merge-verify.