4.3 KiB
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 не требуется; возврат в анализ не требуется —
ТЗ реализуемо без нарушения принципов архитектуры.