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

4.3 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-093 architecture architect proposed 2026-06-09 claude-opus-4-8

10 — Технические риски: ORCH-093 — ретрай транзиентных merge-ошибок Gitea + гард already-in-main

Work Item: ORCH-093 · Repo: orchestrator · Стадия: architecture

Информационный (гейтом не парсится). Перечисляет риски реализации и их митигейшн.

Реестр рисков

ID Риск Вер. Влия. Митигейшн
TR-1 Ошибочная классификация реального конфликта как транзиента (mergeable==None/неполный ответ) → лишние ретраи перед HOLD Сред. Низ. D2: бюджет ретраев жёстко ограничен ((N-1)×backoff_max ≤ 10 с); после исчерпания — тот же HOLD ORCH-071/073. Цена ≤10 с задержки, не ложный done.
TR-2 Слишком агрессивный/долгий ретрай подвешивает monitor-поток, исполняющий merge-verify Низ. Сред. D1/NFR-4: экспон. backoff с потолком merge_retry_backoff_max_s; суммарный сон детерминирован; merge_pr_timeout_s ограничивает каждый POST.
TR-3 Гонка гарда already-in-main vs параллельный мерж (ветка влита между _find_open_code_pr и _branch_fully_in_main) Низ. Низ. SHA-в-main (verify_merged_to_main, ADR-0014) остаётся авторитетным; гард лишь избегает пустого PR. Ложный done невозможен — решает SHA, не гард.
TR-4 git-икота гарда (fetch/merge-base падает) → ложный already-in-main → пропуск реального мержа Низ. Выс. D3: fail-OPEN — None деградирует на create-PR, НЕ на already-in-main; ложный пропуск мержа структурно невозможен (для already-in-main нужен rc==0, не ошибка).
TR-5 Регрессия one-shot поведения при merge_retry_enabled=False Низ. Сред. BR-7: N_eff = 1 без ветвления тела цикла; тест AC-5 подтверждает ровно один POST.
TR-6 Расширение возврата ensure_open_pr (already-in-main) ломает необработанную ветку вызова Низ. Сред. Все вызовы перечислены (_handle_merge_verify, launcher._ensure_pr); BC: новый исход обрабатывается явно, прочие пути 1:1. Покрытие — тест AC-4.
TR-7 Лишний GET /pulls/{index} на ambiguous 409/422 сам транзиентно падает → неверный класс Низ. Низ. never-raise: сбой GET → дефолт transient в рамках бюджета (D2); никогда не исключение в advance_stage.

Сводный вывод

Доминирующий класс — корректность классификации транзиент/терминал (TR-1, TR-4): обе ветки спроектированы fail-safe в сторону, противоположную багу (ретрай-с-бюджетом и fail-OPEN-в-create), с авторитетным backstop'ом SHA-в-main + защитой ORCH-071/073, которые не трогаются. Остаточный риск для прод-конвейера (self-hosting) низкий: изменение точечное, аддитивное, полностью отключаемо двумя существующими/новыми kill-switch'ами без деплоя кода; STAGE_TRANSITIONS/QG_CHECKS/схема БД не затронуты. Эскалация arch:major-change не требуется; возврат в анализ не требуетсяТЗ реализуемо без нарушения принципов архитектуры.