Files
orchestrator/docs/work-items/ORCH-123/10-tech-risks.md
claude-bot 2a47744c9d
All checks were successful
CI / test (push) Successful in 1m8s
architect(ET): auto-commit from architect run_id=748
2026-06-16 08:07:55 +03:00

8.6 KiB
Raw Blame History

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) зелёный.