# onboarding/ — turnkey-kit нового проекта (ORCH-009) Каркас (**kit**) нового репозитория, подключаемого к оркестратору, и словарь его параметризации. Всё под `onboarding/` предназначено **новому** репо; ничто отсюда **не исполняется рантаймом оркестратора** (граница физическая — ADR-001 D1 ORCH-009). Материализацию выполняет операторский CLI `scripts/onboard_project.py` (режимы `plan`/`apply`/`verify`); полный процесс — runbook `docs/operations/ONBOARDING.md`. ## Состав ``` onboarding/ README.md ← этот файл placeholders.json ← словарь плейсхолдеров (single source of truth, D2) repo-skeleton/ ← дерево зеркалит целевой репо (FR-1) .openclaw/agents/{analyst,architect,developer,reviewer,tester,deployer}.md CLAUDE.md AGENTS.md CONTRIBUTING.md README.md CHANGELOG.md .env.example docs/ARCHITECTURE.md docs/PIPELINE.md docs/PRODUCT_VISION.md docs/operations/INFRA.md docs/architecture/adr/README.md docs/work-items/.gitkeep docs/history/.gitkeep ``` ## Плейсхолдеры (D2) Синтаксис: `{{NAME}}` (верхний регистр, `[A-Z][A-Z0-9_]*`). Подстановка — тупой проход `str.replace` по словарю `placeholders.json`; после рендера обязательный скан на неразрешённые `{{…}}` (ошибка в `apply`/`verify`). Никаких шаблонизаторов и условной логики в kit — kit обязан быть тупым. Словарь — `placeholders.json`: `NAME → {description, required, default, example}`. Тесты держат **биекцию**: каждый плейсхолдер, встречающийся в kit, объявлен в словаре, и каждый объявленный — используется (`tests/test_onboarding_kit.py::test_placeholder_dictionary_bijection`). Расширение словаря = правка `placeholders.json` + kit + тестов **в одном PR**. ## Правило «канон не форкается» (BR-2 / D3) | Класс | Файлы | Механизм | |---|---|---| | **Live-copy канона** (НЕ хранится в kit) | `docs/_templates/**` (16 скелетов), `docs/_standards/**` (3 стандарта) | копируются CLI **verbatim из рабочего чекаута репо оркестратора в момент материализации** | | **Параметризуемые шаблоны** (хранятся здесь) | 6 промптов, `CLAUDE.md`, `AGENTS.md`, `CONTRIBUTING.md`, `README.md`, `CHANGELOG.md`, `docs/ARCHITECTURE.md`, `docs/PIPELINE.md`, `docs/PRODUCT_VISION.md`, `docs/operations/INFRA.md`, `docs/architecture/adr/README.md`, `.env.example` | рендер `{{…}}` | | **Скелет-каркас** | `docs/work-items/.gitkeep`, `docs/history/.gitkeep` | копия как есть | Канон копируется байт-в-байт, без переписывания: примеры конкретных work item внутри стандартов остаются иллюстрацией, не «утечкой». Утечка — это литерал оркестратора там, где должен быть параметр (чужой префикс work-item, порты оркестратора, его правила эксплуатации) — ловится тестом анти-утечек. Обновление канона в уже-онбордженных репо едет их обычными PR с reviewer-gate; новые онбординги автоматически получают свежий канон (live-copy). ## Языковая политика промптов (D9) Канон: **5 промптов ru + `deployer.md` en** (deployer — самый safety-critical промпт; en-раскладка минимизирует регресс-поверхность байт-точных verdict-ключей и shell-команд). Per-project отступление — только решением в собственном ADR нового проекта (см. шаблон `CONTRIBUTING.md`). ## Тесты kit ```bash pytest tests/test_onboarding_kit.py tests/test_onboarding_script.py tests/test_onboarding_invariants.py -q ``` Структурные тесты канона 52d/92 гоняются по `onboarding/repo-skeleton/.openclaw/agents/*.md` **отдельно** от живых промптов оркестратора (`tests/test_agent_prompts_canon.py`) — это разные деревья с разными требованиями (kit параметризован, живые промпты — нет).