Trap 12 told only the first act. The full story is the lesson: ThemeKeys.ALL excludes the font roles by its own docstring, and the builder styles some base types directly (RichTextLabel — which renders every line of DM prose on the creation screen). The meta-guard written specifically to prevent a third miss contained a `continue` that exempted exactly the gap it existed to catch. A guard-of-a-guard with an exemption in it is not a guard. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
/docs — cross-cutting docs
Anything affecting both client and api, plus planning and roadmap. Side-specific docs live in /api/docs and /client/docs.
Put here:
roadmap.md— phases, POC scope, what's nexttraps.md— bugs we have already shipped, and the guards that catch them. Read before writing tests: every one of them passed a green suite.adr/— Architecture Decision Recordscanon-log.md— the cross-boundary contract (§11)- Shared contracts — canon log schema, tag syntax, retry policy (§11, §12)
- Anything spanning the HTTP boundary
The charter itself — CLAUDE.md — stays at the repo root. It is the source of truth; these docs elaborate, they do not override it.