Killed the last three metaphor fields in the frontmatter schema
Renamed the three surviving metaphor fields — wing→section, affectTone→mood, exhibit→homeSlot — across 143 MDX files and the whole schema layer. A codemod did the migration in one pass.
The first schema purity pass killed the legacy jargon — domain, growthStage, private-draft, highlight. It left the metaphors standing because they still half-worked. wing was a garden/building thing. affectTone was borrowed from psychology. exhibit came from the museum language I used when the homepage was a gallery of cards. All three of them made new contributors (and me, six months from now) stop and translate.
I renamed them to what they actually mean. wing → section — the field names the top-level section of the site, nothing more. affectTone → mood — same concept, word everyone already uses. exhibit → homeSlot — it names a slot on the homepage, so say that. scripts/codemod-rename-fields.ts walked all 143 MDX files and rewrote the frontmatter in one pass; docs-schema.ts, draft-lifecycle.ts, page-markdown.ts, the draft schema, and the frontmatter e2e spec followed. Biome, tsc, next build green. The schema still says what it said before — it just stopped making you learn a vocabulary to read it.
Turned the MDX-never-reads-data rule into a pre-commit failure
Added a pre-commit hook that fails the commit if any MDX file imports from @/data/*, imports @/lib/data-registry, or string-references a content/data/*.jsonl path. Closes F10 from the concept audit.
Tightened the frontmatter contract across 142 pages
Deleted `domain`, required `wing` + `genre`, renamed `growthStage` to `stability` and gated it to the genres where it means something. 142 files migrated by codemod in one pass.