6.4 KiB
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'ом (код-блокеры = ровно A1–A4, см. 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); возврат в анализ не нужен (ТЗ
выполнимо без нарушения принципов). Остаточный риск для прод-конвейера — низкий.