# 07 — Требования к инфраструктуре (ORCH-071) ## Топология — без изменений Новой топологии не вводится. Прод `orchestrator` (8500) и staging (8501) — как есть. Merge выполняется детерминированным кодом в уже существующем restart-surviving Phase C finalizer (новый контейнер после рестарта), без новых сервисов/портов/контейнеров. ## I-1. Gitea токен с правом merge PR (предусловие) Merge-актор `merge_gate.merge_pr` вызывает `POST /repos/{owner}/{repo}/pulls/{index}/merge` через существующий клиент и `settings.gitea_token` / `settings.gitea_url` / `settings.gitea_owner`. - Требование: тот же `gitea_token`, которым агент `deployer` сегодня мержит PR в `main`, ДОЛЖЕН иметь право write/merge на репо `orchestrator`. Так как deployer уже мержит этим токеном — **новых прав, как правило, не требуется** (тот же токен, тот же путь API). - Действие при раскате: убедиться, что бот-токен — член/коллаборатор репо `orchestrator` с правом merge (иначе merge_pr вернёт HTTP-ошибку → never-raise → HOLD+alert, не падение). ## I-2. Сетевой доступ контейнера к Gitea Контейнер прода уже ходит в Gitea API (`pr_already_merged`, webhooks). Дополнительного сетевого доступа не нужно. При недоступности Gitea verify консервативно даёт «не подтверждено» → HOLD+alert (fail-closed для `done`). ## I-3. Доступ к `origin/main` из worktree задачи Верификатор делает `git fetch origin main` + `git merge-base --is-ancestor origin/main` в worktree задачи (как `image_freshness`/merge-gate уже делают `git fetch`/`rebase`). Предусловие — рабочий git-remote `origin` в worktree (есть сегодня). Ошибка fetch → never-raise → `False` → HOLD+alert. ## I-4. Конфигурация (env, дефолты безопасны) | Флаг | Дефолт | Назначение | |------|--------|------------| | `ORCH_MERGE_VERIFY_ENABLED` | `true` | kill-switch; `false` → строго прежнее поведение (1:1 до фикса) | | `ORCH_MERGE_VERIFY_REPOS` | `""` | CSV; пусто → только self-hosting (`orchestrator`) | | `ORCH_MERGE_PR_TIMEOUT_S` (опц.) | напр. 30 | таймаут merge-вызова Gitea | | `ORCH_MERGE_VERIFY_TIMEOUT_S` (опц.) | напр. 60 | таймаут git fetch/merge-base | Дефолты не требуют изменения `.env` для штатного раската (область = self-hosting). Откатить фикс мгновенно можно `ORCH_MERGE_VERIFY_ENABLED=false`. ## I-5. Раскат через staging-гейт (self-hosting safety) Изменение касается self-deploy пути орка → раскат ОБЯЗАН пройти стадию `deploy-staging` (8501) перед прод-деплоем (CLAUDE.md §self-hosting). Прод-деплой — только переводом задачи в статус `Confirm Deploy` (ORCH-059), ручной approve сохранён (INV-3). Никаких рестартов прода в рамках разработки/ревью. ## I-6. Без миграции БД Schema-changes запрещены. Restart-safe состояние нового шага — существующие sentinel'ы `.deploy-state-//` + очередь `jobs` (колонка `jobs.pid`, ORCH-065, уже есть).