change_id: CHG-2026-014913
risk_class: R2
autonomy_tier: A2
controls: ['TRC-01', 'CHG-04']
data_classification: internal
originator: olaf@freundcloud.com
agent_identity: svc-agent-platform
model_route: gateway/tier-frontier
supersedes: None
Approach
The playbook is not a standalone document. Seven files quote it, one script publishes it, one map contracts against it, and one recording says its plane count out loud. Every edit was checked against those before a word was written, which is why this change adds no plane and touches no policy.
Files
Agentic-SDLC-Playbook.mddocs/playbook-map.mdsite/**— the page builder, the mermaid include, the layout, the stylesheet and the version strings the pages carryREADME.md
Sequence
- Verify every citation at its primary source. → verify: Regulation (EU) 2026/1744 confirmed at EUR-Lex; the doubt was wrong and the document was right.
- Grep the couplings:
five planes,Playbook §,v1.0. → verify: seven quoting files and one cast identified before any edit. - Front matter — who reads what, plain terms, the contractor analogy, version bump.
→ verify: renders;
build_pages.pylede matches. - §2, §3 — regulatory currency, UK, METR and DORA, sourced statistics. → verify: no bare statistic remains.
- §5 — identity into 5.2, MCP registry risk into 5.3, AI-BOM into 5.5, LiteLLM into 5.1. → verify: still five planes, everywhere.
- §6 — spec-driven development named; diagrams. → verify: ASCII in fences, as §6.1 already does; the site has no mermaid plugin.
- §8.4, §8.5 — standards references, OWASP ASI mapping, named incidents. → verify: all ten ASI ids addressed.
- §9, §10.2 — maintainability metric, perception gap, literacy and workforce.
- Appendix D rebuilt; Appendix E glossary added.
docs/playbook-map.md— new rows only where this repository actually executes something; everything else into Deliberate departures. → verify: no row without an artifact.- Re-run everything. → verify: gates green, substitution still 12/12.
Risks
| Risk | Likelihood | Mitigation |
|---|---|---|
| A new §8.4 row claims a control with no gate | high — it is the failure mode this repo exists to refuse | Art. 4 and maintainability go to Deliberate departures, not to the map’s control rows |
| Adding a sixth plane falsifies the screencast | high if attempted | Not attempted; identity folds into §5.2, and §5’s own independence test says it should |
Touching policy/ escalates this to R3 |
certain if touched | policy/ is out of scope; no new machine-checkable control exists here |
Appendix C drifts from substitution_test.py |
medium | Appendix C unchanged; the script defines the twelve |
| A cited statistic cannot be verified at origin | medium | Every citation resolved before use; secondary-source figures dropped rather than dressed up |
| The site publishes a stale version string | high | build_pages.py lede updated in the same change |
Rejected
- A §5.6 identity plane. §5 requires each plane be independently sourceable, replaceable and auditable; identity is cross-cutting. It would also require editing a recording.
- Editing
site/assets/casts/control-layer.cast. It is a recording of a real session. The screencast page argues at length that a reconstruction is the artefact that reads as evidence while being a performance. Editing the cast to match a document would be exactly that. - New Substitution Test checks. Twelve is what
substitution_test.pyimplements. - Mirroring Article 4 into
policy/controls.yaml. Literacy is not machine-checkable here, and a declared control with no evidence is worse than an undeclared one. - Adding duplication to the map’s “metrics this repository actually emits”. It does not emit it. It goes in the playbook’s Tier 2 as a recommendation and nowhere else.
Tests
make build test lint gatesmake substitution— expect 12/12 unchangedpython site/build_pages.pyand a render checkgrep -rn "five planes"— count unchanged
Rollback
Revert. The change is documentation and site generation; no gate, policy, workflow or service behaviour depends on it.