/ca-init — first-run scaffold
Stand up the root-level .codearbiter/ project-state store that opts a repo into arbiter
management. This is the v2 replacement for vendoring/init-vendor: no symlinks, no shims, no dual
root. It writes the activation flag and the empty state files, then hands off to the populator.
.codearbiter/CONTEXT.md frontmatter arbiter: enabled is the single activation flag — it gates
the SessionStart persona injection. The scaffolded
CONTEXT.md is a stub (no initialization sentinel), so after scaffolding the project still needs
populating before normal operation.
Procedure
Run the scaffolder against the repo's git toplevel (resolved by the script):
python "<plugin-root>/hooks/init-codearbiter.py"It is idempotent and refuses if
.codearbiter/CONTEXT.mdalready exists — it never overwrites state. Pass--stage Nto set the initial maturity value (default1). Use--checkto report state without creating anything.It creates
.codearbiter/with:CONTEXT.md(arbiter: enabled,stage: N, stub body),open-tasks.md,open-questions.md,overrides.log(audit header), andlast-checkpoint(0).Then route to the populator — the stub is not yet usable:
- Source code already exists in the repo → route to
/ca-create-context(brownfield: scouts read the codebase and synthesize the full context, writing the initialization sentinel). - Greenfield (no meaningful source) → route to
/ca-decompose(layered interview).
The populator is mandatory, not optional: it authors
tech-stack.md,coding-standards.md, andsecurity-controls.md(and writes the initialization sentinel). The pipeline gates BLOCK on reading those files —writing-plansandtddneedtech-stack.md, the security gates needsecurity-controls.md— so/ca-featurerun on a freshly-scaffolded stub will STOP at pre-flight until the populator has run.session-startsurfaces this asNOT INITIALIZEDevery session.- Source code already exists in the repo → route to
Report what was created and which populator you are routing to.
When NOT to use
.codearbiter/already scaffolded → the scaffolder refuses; run/ca-create-contextor/ca-decomposeto populate, or/ca-statusto see state.- You only want to re-check detection state → run the scaffolder with
--check.
Hard gate
MUST NOT hand-author .codearbiter/CONTEXT.md frontmatter — the scaffolder is the sanctioned path so
the activation flag and state-file shapes match what the hook parses. MUST NOT mark a
stub initialized; only the populator writes the initialization sentinel.