Files
orchestrator/onboarding/repo-skeleton/docs/operations/INFRA.md
claude-bot dc1cb87818 feat(onboarding): turnkey project onboarding — kit + CLI + runbook (ORCH-009)
Operator capability to bring a NEW project online in one pass, fully
outside the runtime and the pipeline (src/** byte-exact, no kill-switch
needed — activation is an explicit human CLI run). Reference = the
orchestrator repo itself (ORCH-52b/c/d/e canons).

* onboarding/repo-skeleton/ — parametrized kit of a new repo: 6 agent
  prompt templates per canon 52d/92 (5 ru + deployer en with the
  shared-host guardrail frame), reviewer doc-gate (REQUEST_CHANGES),
  CLAUDE.md passport, AGENTS.md, CONTRIBUTING.md, docs/ skeleton with
  mandatory operations/INFRA.md, .env.example; {{NAME}} placeholders +
  stdlib render, dictionary onboarding/placeholders.json (bijection
  held by tests). Canon is NOT forked: docs/_templates + docs/_standards
  are live-copied from the checkout at materialization time (BR-2/D3).
* scripts/onboard_project.py — plan (default, GET-only, zero mutations)
  / apply (idempotent ensure, no delete ops at all) / verify (registry
  round-trip via the actual projects._parse_projects_json, all 22 state
  names incl. fail-closed Confirm Deploy/STOP, labels, webhook, kit
  completeness, unresolved-placeholder scan). Closed read-only src
  import list (ADR D4); state groups fixed per ADR D5 (STOP→cancelled,
  terminal groups only Done/Cancelled/STOP); Gitea webhook reuses the
  single global ORCH_GITEA_WEBHOOK_SECRET (TR-6); initial push ONLY
  into a freshly created empty repo (INV-4 untouched); never restarts
  prod / never edits .env / deletes nothing (NFR-2); secrets masked
  (NFR-3); Plane CE API gaps degrade to manual-step (fail-safe).
* docs/operations/ONBOARDING.md runbook + SETUP_WEBHOOKS.md generalized
  per-repo; CLAUDE.md / docs/architecture/README.md / CHANGELOG.md
  updated in the same PR (golden source).
* Anti-drift tests: test_onboarding_kit.py / test_onboarding_script.py
  (mocked, no network) / test_onboarding_invariants.py (snapshots of
  STAGE_TRANSITIONS/QG_CHECKS, closed CLI import list, reference
  .openclaw/agents/ prompts untouched). Full regression: 1713 passed.

Refs: ORCH-009

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 16:08:43 +03:00

4.1 KiB
Raw Blame History

INFRA.md — инфраструктура и эксплуатация {{PROJECT_NAME}}

RUNBOOK. Топология, контейнеры, порты, переменные окружения, границы. Секреты тут НЕ хранятся — только дескрипторы. Реальные значения — в .env на хосте.

Топология

                 общий хост (рядом живут контейнеры ДРУГИХ проектов)
 ┌──────────────────────────────────────────────────────────────────────┐
 │  {{REPO}}          (PROD)     :{{PROD_PORT}}     env_file .env        │
 │  {{REPO}}-staging  (STAGING)  :{{STAGING_PORT}}  изолированные данные │
 └──────────────────────────────────────────────────────────────────────┘

(уточни диаграмму под фактическую топологию: сеть, тома, БД, внешние зависимости)

Контейнеры

Контейнер Роль Порт env_file Данные (хост) Старт
{{REPO}} прод {{PROD_PORT}} .env (указать тома/БД) (команда старта)
{{REPO}}-staging staging {{STAGING_PORT}} (staging env) (изолированные) (команда старта)

Карта env-переменных

Канон карты — .env.example в корне репо (дескрипторы без значений). Правило секретов: секреты ТОЛЬКО в .env на хосте, в гит не коммитятся; docker-compose.yml/Dockerfile (если есть) трекаются в гите.

Переменная Назначение
APP_PROD_PORT порт прод-контура ({{PROD_PORT}})
APP_STAGING_PORT порт staging-контура ({{STAGING_PORT}})
(дополнять при вводе переменных)

Границы доступа

  • Кто имеет доступ к хосту/контейнерам/данным проекта — перечислить явно.
  • Токены/ключи проекта: где живут (только .env на хосте), кем используются, как ротируются.
  • Агенты конвейера работают в worktree репо и НЕ имеют доступа к чужим проектам.

Smoke-endpoints

Endpoint Контур Назначение
(например /health) staging {{STAGING_PORT}} / prod {{PROD_PORT}} живость сервиса (read-only)

⚠️ Эксплуатационные предупреждения — риски общего хоста

  • Хост ОБЩИЙ: рядом работают контейнеры других проектов и ресурсы (CPU/RAM/диск) делятся. Дисковое место на хосте впритык — следи за объёмом образов/томов/логов.
  • НИКОГДА не останавливать/не рестартить чужие контейнеры и не менять чужие env/тома.
  • Рестарт прод-контура {{REPO}} — только по процедуре деплоя (см. ниже), не ad-hoc.
  • Перед прод-деплоем обязателен staging-контур ({{STAGING_PORT}}).

Деплой

(описать фактическую процедуру деплоя проекта: staging-проверка → прод-выкатка → health-check → откат. Заполняется при настройке CI/CD проекта; deployer-агент исполняет ровно эту процедуру.)