Runbook
The ten steps. Three are gates; the pipeline stops there, not around them.
Runbook — one post, ten steps
The operator's checklist. Each step names its file, its output, and its exit test. Steps 4, 7, 9 are hard gates: the pipeline STOPS there on failure. You need no writing skill to run this; you need the discipline not to skip a gate. One post ≈ one focused session.
0. Setup (once). Engine folder in a Claude Code (or Cowork) session. Check config.yml
defaults still match reality.
1. Intake. New solution → run 01-intake/intake-interview.md on whoever built it (15 min),
or hand them intake-form.md. Structure into 01-intake/records/intake-[slug].md per
intake-schema.md. Exit: the validation checklist at the schema's bottom passes (hard part
present, ≥5 specifics, metrics tagged).
2. Verification. Read the record. For every metric: source + confidence right? Set the
anonymisation level with the client's actual clearance. Resolve or accept every [[VERIFY]].
Exit: you would defend every line of this record to the client named in it.
3. Angle. Follow 02-strategy/angle-selection.md: 3 candidates, score, pick 1, write down
why the losers lose. Exit: an angle contract exists (thesis, archetype, 5 specifics, hard part,
insight).
4. 🚦 GATE — Differentiation. Run 02-strategy/differentiation-check.md on the contract.
Fail → back to 3 (max twice, then mark the record needs-material and stop).
5. Outline. Run 03-writing/outline-prompt.md. Exit: every section has JOB + CARRIER +
HANDOFF; contracted specifics all placed; NEEDS that block sections resolved.
6. Draft. Run 03-writing/draft-prompt.md (anonymise the record copy FIRST at L2/L3). Then
headline-lab.md and opening-lab.md. Exit: full post + gap report + fact map exist.
7. 🚦 GATE — Adversarial review. Run 04-quality/self-critique-loop.md: three personas ×
three objections, each fixed or dismissed-with-reason. Fail state = objections you can't resolve
from the record → back to 2 or 6.
8. Line edit. python3 04-quality/checks.py posts/[slug].md --record 01-intake/records/ intake-[slug].md --ledger 06-registry/phrase-ledger.md — fix per readability-check.md, rerun
until 0 hard. Then the by-hand fact-trace pass (fact-trace.md). Exit: checker PASS + fact map
100% + anonymisation pass clean.
9. 🚦 GATE — Rubric. Score per 04-quality/rubric.md, fresh read, quoted evidence. ≥40/50,
nothing under 3, zero hard gates → ship. Else → 6 with named fixes; after 3 loops → stop and
write the diagnosis.
10. Package + register. Finalise frontmatter · translation per 05-packaging/translation.md
· visuals per visual-brief.md · derivatives per distribution.md · AEO checklist in
seo-aeo.md · update ALL THREE registry files (solutions-registry, published-index,
phrase-ledger). Exit: registry rows exist; derivatives passed checks.py; operator approval
recorded. Publish.
When stuck: a gate that keeps failing is the record's fault or the angle's fault, never the prose's. Go back two steps, not one. Never hand-edit a number to satisfy a checker.