Files
orchestrator/onboarding/placeholders.json
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

63 lines
2.1 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"PROJECT_NAME": {
"description": "Человекочитаемое имя проекта (Plane-проект, README, паспорт)",
"required": true,
"default": null,
"example": "enduro-trails"
},
"PROJECT_DESCRIPTION": {
"description": "12 фразы «зачем проект» (README, PRODUCT_VISION, паспорт)",
"required": true,
"default": null,
"example": "Каталог эндуро-маршрутов с картой, треками и сезонностью"
},
"REPO": {
"description": "Имя Gitea-репозитория (== каталог под /repos)",
"required": true,
"default": null,
"example": "enduro-trails"
},
"GITEA_OWNER": {
"description": "Owner/организация репозитория в Gitea",
"required": true,
"default": "admin",
"example": "admin"
},
"WORK_ITEM_PREFIX": {
"description": "Префикс work-item проекта (идентификатор Plane-проекта, аналог ET)",
"required": true,
"default": null,
"example": "ET"
},
"PLANE_PROJECT_ID": {
"description": "UUID Plane-проекта (становится известен после Plane-шага apply)",
"required": true,
"default": null,
"example": "7a79f0a9-5278-49cd-9007-9a338f238f9c"
},
"STACK": {
"description": "Стек проекта, описательно (язык, фреймворк, БД)",
"required": true,
"default": null,
"example": "Python 3.12 + FastAPI + SQLite"
},
"TEST_CMD": {
"description": "Команда запуска тестов проекта (используется агентами developer/tester)",
"required": true,
"default": null,
"example": "pytest tests/ -q"
},
"PROD_PORT": {
"description": "Порт прод-контейнера проекта",
"required": true,
"default": null,
"example": "8600"
},
"STAGING_PORT": {
"description": "Порт staging-контейнера проекта",
"required": true,
"default": null,
"example": "8601"
}
}