feat(onboarding): turnkey project onboarding — kit + CLI + runbook (ORCH-009) #120
Reference in New Issue
Block a user
Delete Branch "feature/ORCH-009-turnkey-plane"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ORCH-009 — Turnkey-онбординг проектов
Операторская способность развернуть новый проект одним проходом: Plane-проект (22 статуса с точными именами + лейблы) → Gitea-репо (+per-repo webhook) → каркас репо (kit) + initial push → запись реестра → верификация. Реализовано вне рантайма и вне конвейера.
Состав
onboarding/repo-skeleton/— параметризуемый каркас нового репо: 6 промптов канона 52d/92 (5 ru + deployer en, рамка shared-host-гардрейлов), reviewer-gate на доку, паспортCLAUDE.md,AGENTS.md,CONTRIBUTING.md, скелетdocs/с обязательнымoperations/INFRA.md,.env.example. Плейсхолдеры{{NAME}}+ stdlib-рендер; словарьonboarding/placeholders.json(биекция словарь↔kit — тестом). Канон не форкается:_templates/_standardslive-copy в момент материализации (BR-2/D3).scripts/onboard_project.py—plan(дефолт, GET-only, ноль мутаций) /apply(идемпотентный ensure, без delete) /verify. Закрытый список read-only импортовsrc(ADR D4); группы статусов по ADR D5 (STOP→cancelled; терминальные — только Done/Cancelled/STOP); webhook переиспользует глобальныйORCH_GITEA_WEBHOOK_SECRET(TR-6); initial push только в свежесозданный пустой репо (INV-4 не затронут); прод не рестартится,.envне правится, ничего не удаляется (NFR-2); Plane CE API-пробел →manual-step(fail-safe).docs/operations/ONBOARDING.md+ обобщённыйSETUP_WEBHOOKS.md; CLAUDE.md /docs/architecture/README.md/ CHANGELOG — в том же PR.test_onboarding_kit.py/test_onboarding_script.py(моки, без сети) /test_onboarding_invariants.py(снапшотыSTAGE_TRANSITIONS/QG_CHECKS, закрытый список импортов, эталонные.openclaw/agents/не тронуты) — 83 теста, TC-01…TC-21.Инварианты
src/**— 0 строк диффа (NFR-1/AC-12); эталонные промпты орка не тронуты.⚠️ Флаг размера (правило developer-промпта)
PR > 1500 строк. Осознанно НЕ дроблю: объём — преимущественно инертный markdown (kit-шаблоны ~1.9k + номерные доки стадий analysis/architecture ~1.2k + runbook); исполняемого кода ~1.1k (операторский CLI вне горячих путей) + ~1.1k тестов. Скоуп «kit+CLI+runbook одной способностью» зафиксирован BRD/ТЗ/ADR (D1–D11) на стадиях анализа/архитектуры; дробление дало бы нетестируемые фрагменты (kit без CLI, CLI без kit). Рантайм-риск нулевой по построению. На будущее урок принят: способности такого объёма декомпозировать на уровне задач.
AC-13 (операторский smoke)
Выполняется вручную по runbook на staging-контуре (8501) после мержа; протокол — раздел «Журнал smoke-прогонов»
ONBOARDING.md(ADR D8).Refs: ORCH-009
🤖 Generated with Claude Code
feat: ORCH-009-turnkey-planeto 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>f4b055e76atodd09e3da89