What We Learned
Bootstrapping a complete council content set (6 roles, 3 domain rules, 2 shared safety rules, 6 tasks, 1 chain, 2 fragments) requires only two inputs: the Zod schema source of truth and the council agent registry from the TAD. Everything else — YAML structure, field ordering, validation constraints, URI format — is derivable from the existing@stratt/schema package.
The key acceleration factor: test fixtures in packages/graph/tests/fixtures.ts serve as canonical examples of every unit type. They’re more reliable than documentation because they’re CI-enforced. Using makeRole(), makeTask(), makeChain() as templates eliminated guesswork about required vs optional fields, string patterns, and nesting structure.
Why This Matters
Content authoring is the adoption bottleneck for STRATT. If creating a council’s initial content set requires reading a 60-page spec, no one will do it. This session proved that with the right schema tooling + skill files, the full content set can be generated correctly on the first attempt — 20/20 units passed validation, the chain passed all 9 CI checks including FM-04 (protected agent), FM-05 (gate integrity), and blast radius analysis.Pattern for Future Councils
- Define agents in a council YAML with
protectedAgentsandgateAuthorityAgentskeys - Generate role units from agent definitions (designation →
meta.martian_name) - Define domain rules that roles import (code review → reviewer, ADR template → documenter)
- Define shared safety rules at global scope with
protected: true - Build task units for each chain step with explicit contracts (inputs/outputs/failure_modes)
- Wire the chain — every step needs a task URI, protected agents must appear, gates at review points
- Run
stratt validate+stratt cito confirm zero-defect authoring