Files
orchestrator/docs/work-items/ORCH-112/10-tech-risks.md

5.7 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-112 architecture architect proposed 2026-06-15 claude-opus-4-8

10 — Технические риски: ORCH-112 — гигиена shared deploy-базы

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

Информационный (гейтом не парсится). Риски реализации resilient-pull и их митигейшн.

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

ID Риск Вер. Влия. Митигейшн
TR-1 git clean -x ошибочно добавлен → удалит gitignored .env (прод-секреты) / data/*.db (БД прода) / build/ — катастрофа на прод-deploy-базе Низ. Выс. INV-HYGIENE-1 (ADR D2): только git clean -fd, никогда -x. Статический анти-регресс-тест ассертит отсутствие -x в hygiene-блоке хука (TC-05/TC-09); явная рамка в ADR + INFRA
TR-2 Неверный/отсутствующий -e exclude → git clean -fd удалит .deploy-prev-image-* → сломан rollback (do_rollback) Сред. Выс. INV-HYGIENE-2: обязательные -e '.deploy-prev-image-*' + -e 'deploy-hook.log'; TC-03 доказывает неудаление и работоспособность rollback; шаг 1 хука пишет prev-image до hygiene
TR-3 Сбой шага hygiene (fetch/reset/clean) маскирует/ухудшает исход деплоя Низ. Сред. never-break (ADR D1): каждая git-операция || log "...continuing"; деплой продолжается к голому git pull; sentinel-отчёт фиксирует факт; fail-safe, исход не хуже текущего
TR-4 reset --hard origin/main безвозвратно дискардит локальные правки deploy-базы, которые кто-то «нужными» считал Низ. Сред. Это ровно инвариант: deploy-база = origin/main (источник истины — remote); deploy лишь fast-forward'ит. Наблюдаемость (D5) показывает сброшенное; скоуп — self-hosting; документировано (INFRA/README)
TR-5 Гонка: hygiene на хосте чистит mount, пока контейнер читает deploy-базу Низ. Низ. Деплой сериализован (serial-gate ORCH-088, один деплой за раз); hygiene в detached-хуке непосредственно перед pull; нормальный конвейер deploy-базу не читает в этот момент (worktree-изоляция). TOCTOU между status и reset пренебрежимо (один процесс)
TR-6 Скоуп-leak: hygiene затронет прочие репо / синхронный деплой агентом Низ. Сред. applies(repo) (локально, первым): пусто → self-hosting only; инжекция env только на self-deploy-пути (сам self-hosting-скоупленный, self_deploy_applies); TC-06
TR-7 Стейл origin/main (fetch не выполнился) → reset --hard сходится к устаревшему коммиту Низ. Низ. git fetch origin main перед reset; при сбое fetch — || log + продолжение; последующий git pull origin main (строка 226, не тронута) до-тянет недостающее; deploy промоутит build-once SOURCE_IMAGE (артефакт не зависит от дерева main clone)
TR-8 Расширение объёма (касание cancel_task/STAGE_TRANSITIONS/QG) при реализации Низ. Сред. ADR D4 явно запрещает расширение cancel_task; NFR-5 байт-в-байт; TC-09 структурно ассертит неизменность контрактов; трассировка ORCH-036/058/090

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

Доминирующий класс — деструктивная гигиена рядом с прод-rollback-состоянием (TR-1/TR-2): низкая вероятность, высокое влияние, полностью снимается контрактом сохранности (INV-HYGIENE-1/2) + явными тестами (TC-03/TC-05/TC-09). Изменение аддитивно, под kill-switch (checkout_hygiene_enabled, дефолт True; off → байт-в-байт до ORCH-112), never-raise, self-hosting-скоупленное, не трогает STAGE_TRANSITIONS/QG_CHECKS/check_*/machine-verdict/схему БД/exit-code-контракт хука.

Эскалация: вводится новый leaf-компонент (src/checkout_hygiene.py) на глобальном пути прод-деплоя

  • правка прод-deploy-хука + сквозной ADR adr-0044 → рекомендуется лейбл arch:major-change для reviewer-внимания (изменение safety-critical, в прод-deploy-пути). Возврат в анализ не требуется: ТЗ удовлетворяется без нарушения принципов архитектуры (всё в Docker на одном сервере, без новых зависимостей/очередей/k8s, без рестарта прода вне staging-гейта). Остаточный риск для прод-конвейера — низкий при соблюдении INV-HYGIENE-1/2/3.