8.6 KiB
work_item, stage, author_agent, status, created_at, model_used
| work_item | stage | author_agent | status | created_at | model_used |
|---|---|---|---|---|---|
| ORCH-123 | architecture | architect | proposed | 2026-06-16 | claude-opus-4-8 |
10 — Технические риски: ORCH-123 — host-side исполнение staging-раннера
Work Item: ORCH-123 · Repo: orchestrator · Стадия: architecture
Формат: риск → вероятность/влияние → митигация (привязка к решению ADR-001 / AC).
R-1 — Security: расширение поверхности атаки docker (NFR-3 / AC-9)
Влияние: критичное (root-эквивалент на общем хосте). Вероятность (при выбранной стратегии):
низкая.
Любой вариант с docker CLI/SDK в контейнере поверх смонтированного docker.sock (rw + group_add
999, ORCH-040) превращает дремлющую возможность в активный root-эквивалентный путь, доступный
worker-коду и любому subprocess'у (вкл. LLM-агентов).
Митигация: выбран host-side ssh (ADR-001 D1/D2) — docker-операции на хосте под существующим
доверенным key-gated каналом (ORCH-036/058), без docker CLI/SDK в контейнере и без расширения
использования сокета. ORCH-123 поверхность ORCH-040 не трогает. Любой будущий socket/CLI-в-контейнере
вариант — отдельный явный security-review.
R-2 — Реконсилятор/reaper откатывает infra-held задачу как код-фейл (FR-2 / AC-3 / AC-11)
Влияние: высокое (реинтродукция дефекта ORCH-123). Вероятность: средняя (зависит от
поведения reconciler ORCH-053 на застрявшем deploy-staging).
permanent-env / исчерпавшая-DEFER задача держится на deploy-staging (ADR-001 D4). Если reconciler/
reaper трактует «застрял на deploy-staging без running-job» как повод откатить на development —
дефект вернётся.
Митигация: developer обязан верифицировать, что reconciler/reaper трактует infra-held
deploy-staging-задачу как удержанную (пере-выдать deployer-джоб для re-drive после починки
окружения), а не откатывает в development. Регресс-покрытие — поведенческий тест на «held не
становится rollback». Наблюдаемость (D8) делает held видимым (alert + GET /queue + лог).
R-3 — Over-tolerance: реальный код-фейл сюиты замаскирован как «инфра» (BR-3 / AC-4)
Влияние: высокое (сломанный код проходит staging-гейт). Вероятность: низкая.
Трёхсторонняя классификация (D3) может ошибочно отнести реальный exit≠0 сюиты к
permanent-env/transient-infra (→ нет отката) при коллизии exit-кодов
(docker exec No such container = 1, и staging_check fail = 1).
Митигация (D3): дизамбигуация по скану stderr на env-маркеры, не по голому exit-коду:
распознанный suite-exit без env-маркера всегда suite-ran (никогда не реклассифицируется в
инфру — зеркало ORCH-110 BR-6). Fail-safe default при неоднозначности → transient-infra (DEFER), не
тихий проход. Маркер-сет покрыт TC-06; reviewer проверяет анти-over-tolerance (≥P1, как ORCH-110).
R-4 — Remote tree-kill: удалённое docker exec-дерево переживает таймаут (NFR-5)
Влияние: среднее (осиротевший pytest на хосте — класс ORCH-109/110). Вероятность: низкая.
proc_group tree-kill убивает локальный ssh-клиент при таймауте, но не гарантирует убийство
удалённого docker exec-дерева на хосте (процессы — дети docker-демона, не ssh-сессии).
Митигация: backstop — bounded таймаут внутри самой staging_check.py; это то же принятое
допущение, что у image_freshness.rebuild_staging_image (синхронный ssh без remote tree-kill).
Документируется как known-limitation (ADR-001 D-Последствия); не блокер.
R-5 — Held-задача клинит serial-gate репо (NFR-5 / AC-11)
Влияние: среднее (более поздние задачи репо ждут). Вероятность: средняя (при реальном
environment-сбое).
infra-HOLD держит задачу на deploy-staging → ORCH-088 serial-gate блокирует более поздние задачи
того же репо до снятия.
Митигация: принятый tradeoff (зеркало ORCH-110 infra-HOLD): environment-проблема, требующая
оператора, должна остановить репо, а не молча ложно-откатывать (что было бы хуже — порча
done-критериев + расход developer-retry). Скоуп self-hosting only (enduro не затронут). Громкий
alert «инфра, НЕ дефект кода» (D8) → быстрая операторская реакция; GET /queue показывает held.
R-6 — ssh-target не сконфигурирован / пустой deploy_ssh_host (FR-1 / D6)
Влияние: среднее. Вероятность: низкая (в проде ORCH_DEPLOY_SSH_HOST=127.0.0.1 задан compose).
Config-дефолт deploy_ssh_host=""; на нестандартном хосте host-side стратегия без ssh-target
неработоспособна.
Митигация: пустой ssh-target → классификация permanent-env (D3) → infra-HOLD + alert (никогда
ложный откат); preflight на старте (D5) ловит это до реальной задачи. applies(repo) self-hosting-only
→ прочие репо не затронуты.
R-7 — Кросс-каттинг: правка маркированных блоков (CLAUDE.md §9 / ORCH-078)
Влияние: среднее. Вероятность: низкая.
Затрагиваются блоки с маркерами ORCH-115 (staging_runner, прямой объект), ORCH-036 (self_deploy
ssh), ORCH-058 (image_freshness host-side docker), ORCH-110 (proc_group/infra-tolerance/classify),
ORCH-101 (host-параметризация), ORCH-040 (docker.sock mount), ORCH-114 (transition-lease граница).
Митигация: developer перед изменением сверяет инварианты с их 06-adr/ (CLAUDE.md §9). Блок с
≥3 маркерами агрегируется сводным сквозным ADR adr-0049 (ADR-001 Сквозная регистрация). Не
ломать: один транспорт LLM _spawn (llm-usage-policy.md §5), STAGE_TRANSITIONS/QG_CHECKS/
machine-verdict (NFR-1), transition-lease берётся внутри advance_stage (граница O1), INV-4 (мерж
только через PR-merge, никогда push в main).
R-8 — Регрессия конвейера / гейта (NFR-1 / AC-7)
Влияние: критичное. Вероятность: очень низкая.
Случайное изменение check_staging_status/_parse_staging_status/staging_status:/STAGE_TRANSITIONS/
схемы БД.
Митигация: фикс — замена стратегии исполнения продюсера, не гейта (зеркало ORCH-115 NFR-1).
Структурный анти-регресс-тест (TC-11) держит имена/семантику/ключи байт-в-байт; миграции БД нет
(restart-safe DEFER-счётчик — маркер в task_content, TRZ §5). Анти-дрейф ORCH-115 (TC-14) зелёный.