Files
orchestrator/docs/work-items/ORCH-101/10-tech-risks.md
claude-bot 26bdd783d6
All checks were successful
CI / test (push) Successful in 59s
architect(ET): auto-commit from architect run_id=603
2026-06-10 20:23:50 +03:00

6.4 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-101 architecture architect proposed 2026-06-10 claude-opus-4-8

10 — Технические риски: ORCH-101 — ORCH-10-common: расхардкод + секреты + smoke

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

Информационный (гейтом не парсится). Детализация рисков Р-1…Р-5 BRD §8 в привязке к решениям ADR-001 (D1…D10).

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

ID Риск Вер. Влия. Митигейшн
TR-1 Регресс горячих путей при параметризации env-словарей акторов (launcher ×2 / self-deploy / post-deploy): опечатка в ключе/дефолте ломает git-коммиты или credentials-резолв claude CLI (HOME) у ВСЕХ проектов общего инстанса (Р-1 BRD) Низ. Выс. Дефолты байт-в-байт = боевым (/home/slin, claude-bot@mva154.local — BR-5); TC-04/TC-05 фиксируют итоговые словари при дефолтах И при переопределении; полный регресс TC-12; staging-гейт 8501 перед прод-выкатом (NFR-1)
TR-2 Ослабление инварианта ORCH-058 при конфигуризации staging-порта (ORCH_STAGING_PORT=8500 нацеливает rebuild/recreate на прод; Р-2 BRD) Низ. Выс. Fail-closed guard ДО любого ssh/build: staging_port == deploy_prod_target_port → отказ + алерт, без тихого fallback (ADR-001 D4); explicit-pass TARGET_PORT= хуку сохранён; TC-11 проверяет guard
TR-3 Флап анти-регресс сканера (ложные срабатывания на комментарии/докстринги или вечно-непустой allowlist из-за дефолтов config.py; Р-3 BRD) Сред. Низ. tokenize-исключение комментариев/докстрингов (не regex); структурное исключение src/config.py+watchdog/config.py как канонических мест дефолтов (BR-1); негативная самопроверка TC-02; список литералов централизован (ADR-001 D10)
TR-4 Неполный аудит: пропущенный хардкод всплывает на первом реальном тираже (Р-4 BRD) Сред. Сред. Реестр §3.1 нормативен и перепроверен на стадии architecture повторным grep'ом (код-блокеры = ровно A1A4, см. ADR-001 «Контекст»); сканер CI держит классы литералов навсегда; smoke-процедура (D9) — последняя линия обнаружения на целевой инфре
TR-5 Правка safety-critical билдеров команд деплоя (D7: build_deploy_command / image_freshness env-prefix; D5: command: прод-сервиса compose) — ошибка ломает self-deploy/rollback Низ. Выс. Изменения строго аддитивные: одно env-присваивание REPO= (exit-контракт хука 0/1/2 не тронут, ORCH-036 прочитан); command: прод = байт-в-байт текущему CMD при дефолтах (TC-06); существующие self-deploy/freshness тесты + staging-прогон
TR-6 Путаница источников env: compose-интерполяция читает .env/shell, а не env_file (.env.staging НЕ влияет на ${VAR}) → оператор тиража задаёт переменную «не туда» Сред. Низ. Правило явно зафиксировано (ADR-001 D1) и входит в REPLICATION.md; дефолты делают ошибку безопасной (резолв в боевые значения, не в мусор); TC-06 проверяет дефолт-резолв
TR-7 Рассинхрон группы ORCH-040 (uid/gid/HOME/маунты/useradd) при частичном переопределении (например, сменили ORCH_AGENT_HOME_DIR, забыли пересобрать образ с APP_HOME) Низ. Сред. Группа управляется одними env-именами насквозь (compose build.args ← те же ORCH_RUN_UID/GID/ORCH_AGENT_HOME_DIR, ADR-001 D5/D6); «МИНА 1» group_add сохранена; согласованная группа описана в REPLICATION.md как «менять вместе»; TC-06/TC-07
TR-8 Слабые/затёртые секреты: детерминированная генерация или молчаливая перезапись .env уничтожает работающий комплект Низ. Выс. secrets.token_hex(32) (криптослучайно, 32 байта); отказ при существующем файле, перезапись только явным --force (NFR-3, ADR-001 D8); TC-09 проверяет различие повторных запусков и отказ

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

Доминирующий класс — регресс общего прод-инстанса через горячие пути (TR-1/TR-2/TR-5): вероятность низкая (kill-switch-природа дефолтов: на текущем хосте без новых env поведение 1:1), влияние высокое (self-hosting, общая БД с enduro-trails) → ключевая страховка — полный регресс + обязательный staging-гейт 8501 + ручной Confirm Deploy (прод-контейнер в рамках задачи не рестартуется, NFR-1). Эскалация arch:major-change не требуется: ни новой стадии, ни нового компонента, ни смены БД — конвейер и QG байт-в-байт (NFR-6); возврат в анализ не нужен (ТЗ выполнимо без нарушения принципов). Остаточный риск для прод-конвейера — низкий.