BRUTAL. Solution Story Engine

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.