A worked example — the site you are reading
The docs site serving you this page was built through the exact pipeline you just learned, as
slug 2026-06-05-spec-docs-site. Every artifact below is real; the commit SHAs are in
developers-environment history. This page narrates it honestly — including the part where a
critic blocked the plan and won.
1. The ask, classified
A developer said: "we could serve all the specs as an online site, with a Start Here tutorial."
No spec described a docs site → Shape 1. The router proposed /sdd-plan; the human approved.
2. The staged proposal (/sdd-plan, commit 671d871)
The natural home was a new publishing section of platform.spec-governance — the spec that
already declared GitLab a generated projection of the index; a docs site is the same idea
pointed at humans. The skill staged the full proposed section, the apply manifest, and the
Before/After commentary on branch sdd/2026-06-05-spec-docs-site. The canonical spec was not
touched — as you read this, the publishing section of platform.spec-governance is the
applied result.
3. Gaps become tickets (/sdd-spec-gap)
The gap sweep read the staged section as spec-of-record and found everything greenfield: no
generator, no mkdocs config, no CI, no tutorial. It wrote gap items
platform-spec-governance-01..04 into specs/dev-plan/ — the canonical tickets — and adopted
them in-progress.
4. Tasks, then implementation with critics
/sdd-task-plan split the work into six one-commit tasks (T1 generator … T6 deploy manifests),
each with a runnable criterion. Then, per task, /sdd-implement ran test-first with the three
critics. Highlights:
- T1 (generator, commit
6505295): the risk critic forced atomic temp-dir+swap output (a failed build can never publish a partial site) and caught that the build output directory wasn't gitignored in a repo where a bot auto-commits. - T2 (cross-links, commit
2137484): the risk critic returned block — it had checked the live corpus and proved the planned hard-fail on broken references would break the pipeline on day one, because seven-plus existing specs already carried broken id references. The resolution amended the staged proposal (that's what staging is for): unresolved references warn by default, a--strict-refsflag escalates, and the discovered rot became a ledger entry plus follow-up gapplatform-spec-governance-05. - T3 (mkdocs + Pages CI, commit
95d618c): post-build HTML verification caught the anchor rewriter mutating documented anchor examples inside code fences — a bug no unit fixture had provoked. Fence-awareness landed with a regression test. - T4 is the page you are reading.
5. Review, ship, apply
/sdd-review certified the slug against the staged spec; /sdd-ship pushed branches, opened
MRs, gated on CI, merged; the shipper ran sdd_apply_staged.py, which verified the all-merged
barrier and pushed §publishing into the canonical platform.spec-governance. The staging
directory was then dropped — its story survives in the MR, the applied spec, and this page.
What the example teaches
- The spec edit preceded every line of code, and was itself revised under critique — the golden state is negotiated, not decreed.
- The critics blocked twice and were right twice; both catches were invisible from inside the plan.
- Bypasses and deferrals (warn-tier, ship-time checklists, corpus rot) were recorded as work, never silently absorbed.
What you can do now
- Run the loop on something small: a one-line clarification to a spec you own, through
/sdd-plan→/sdd-spec-gap→/sdd-implement→/sdd-ship. - When your plan gets blocked, re-read step 4 above — then revise the staged proposal or rebut with evidence, exactly as happened here.