Files
orchestrator/docs/work-items/ORCH-027/07-infra-requirements.md

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

07 — Инфраструктурные требования: ORCH-027 — Code coverage как гейт

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

When-applicable. Топология не меняется (всё в существующем Docker-контейнере на одном сервере mva154, SQLite, собственная очередь). Затрагивается только зависимостный и конфигурационный слой.

Топология / окружение

  • Без изменений топологии — никаких новых контейнеров/сервисов/нод. Гейт исполняется внутри существующего процесса оркестратора, измерение — в per-branch worktree (ensure_worktree), как merge-gate re-test. docs/operations/INFRA.md — без правок.
  • Self-hosting безопасность (NFR-3): гейт не вызывает деплой-хук, не рестартит прод-контейнер orchestrator (8500), не пушит в main. Прод-деплой ORCH-027 — только через staging-гейт (8501) → выделенный статус «Confirm Deploy» (ORCH-059), без рестарта прод случайным approve.

Зависимости

Зависимость Где Назначение
pytest-cov (обёртка coverage.py) requirements.txt измерение line coverage прогоном pytest --cov=src --cov-report=json. Offline (сеть при измерении не нужна). Попадает в прод-образ при пересборке.
  • Версия фиксируется совместимой с текущим pytest (см. requirements.txt/pytest.ini).
  • Новых системных пакетов в Dockerfile не требуется (чистый pip-пакет).

Конфигурация (env, .env на хосте)

Новые флаги (config.py, префикс ORCH_COVERAGE_*; дефолты безопасны — нулевая регрессия):

Env Дефолт Назначение
ORCH_COVERAGE_GATE_ENABLED false (раскат поэтапный) kill-switch
ORCH_COVERAGE_GATE_REPOS пусто → только self-hosting CSV область применения
ORCH_COVERAGE_MIN_PERCENT консервативно (напр. backstop) абсолютный порог-floor
ORCH_COVERAGE_POLICY both absolute|baseline|both
ORCH_COVERAGE_EPSILON малый (напр. 0.5) допуск на шум измерения
ORCH_COVERAGE_TOOL_FAIL_CLOSED false поведение при сбое инструмента
ORCH_COVERAGE_RUN_TIMEOUT_S по образцу merge_retest_timeout_s тайм-аут прогона

Эксплуатационные предусловия

  • Bootstrap базовой линии: при первом merge применимого репо базовая линия main засевается автоматически фактическим измеренным покрытием (D5). Ручной первичный замер не обязателен; при необходимости — POST /coverage/baseline?repo=orchestrator&value=<%> (D8).
  • Раскат: включать ORCH_COVERAGE_GATE_ENABLED=true только после прод-деплоя кода и прогона на staging (8501); стартовая область — только orchestrator.
  • Override (легитимное снижение покрытия): POST /coverage/baseline (по образцу POST /serial-gate/unfreeze) либо временный ORCH_COVERAGE_POLICY=absolute.

Секреты / сеть

  • Новых секретов нет. Сетевого доступа при измерении нет (coverage offline).
  • enduro-trails и прочие репозитории — вне области по умолчанию, нулевое влияние.