Skip to content
Sacred Accident #33

Lane-lock and scene-anchor must be split. When one vocabulary list does both, you get clustering. In any system that generates content under a lane constraint, the vocabulary that ENFORCES the lane must be SEPARATE from the vocabulary that COLORS each instance. Combine them, and every instance comes out the same color.

Surfaced:Build 3409 (Genre Catalog Clustering WAR ROOM). Operator submitted screenshots showing the /genres/indie/prompts page rendering 83 indie prompts essentially all medical / health themed ("Dream-Pop Radiation Therapy Planning", "Reverb-Heavy Hormone Replacement", "Bedroom Sports Medicine Rehabilitation"). The smoking gun was in src/lib/genre-prompt-catalog/arc-markers.ts: indie's INDIE_PACKAGE.mustInclude array literally contained the string "medical term" as a vocabulary anchor. The Sonnet generator was told this was a valid lane-lock anchor and dutifully used medical vocabulary in ~84% of generated titles. Quantified across 9 arcs: country 94% single-axis (Nashville / honky-tonk / pickup-truck / dirt-road cluster); worship 89% (Ancient / Sacred / Holy / Cathedral cluster); folk 86% (Stanza Study / Mechanics / Prosody Workshop instructional vocabulary cluster); rap 67% (corner-store / cypher / drill-sergeant cluster); rnb 60% (artist namedrops + Quiet Storm / Fender Rhodes cluster); rock 36% (highway / Glory Days / Rust Belt cluster); pop 31% (bathroom mirror / dance floor cluster — mildest); latin 21% (place-name cluster with regional dispersion). Each arc had its own clustering shape; the same architectural failure was responsible.

The anti-pattern this names

A single vocabulary list does double duty as both LANE LOCK ("the prompt MUST mention at least one of these") and SCENE ANCHOR ("the prompt should be vivid"). The generator dutifully satisfies the lane-lock rule by mentioning ANY of the list's entries — and since concrete scene anchors are easier to write than abstract lane-locks, the generator piles up on the same scene anchors across the batch. The indie generator chose "medical term" not because medical themes were the intent but because the operator had used the string "medical term" as a stand-in for "hyper-specificity" in the mustInclude list — and one literal string in a 28-entry list captured 84% of generated outputs. The same shape recurs across every arc: any vocabulary that does double duty BECOMES the clustering axis. Country's mustInclude was a country-cliché vault that became a country-cliché output cluster. Folk's mustInclude was Pat Pattison instructional vocabulary that became chorus-as-writing-workshop output. Worship's mustInclude was CCM-cliché vocabulary that became CCM-cliché output. Each arc trained its own dialect into its own catalog.

The check

Every system that generates content under a lane constraint must enforce the lane-vs-scene split structurally: (1) Lane-lock vocabulary (laneMarkers) is narrow + true — production markers, canonical artists, substyle names, structural craft vocabulary. ≥1 required per generated instance. List should not contain any "creative suggestion" phrasings — those leak to scene anchors. (2) Scene-anchor vocabulary (sceneRotationPool) is wide + diverse — ≥30 entries per arc spanning multiple domains (domestic / transit / work / school / public / nature / relationship / memory / body / identity). Generator picks ONE per instance and rotates across the batch so no single domain dominates more than 8%. (3) The two lists must not overlap (CI ratchet enforced via arc-markers.test.ts). (4) The coherence checker reads the LANE list, not the combined list. A prompt that anchors only on a scene without including a genuine lane lock fails the floor. (5) The generator's system prompt renders both as distinct sections, with explicit rotation discipline on the scene list ("never let one entry dominate > 8% of the catalog"). Operationalized at B3410 (ArcCraftPackage required new laneMarkers + sceneRotationPool fields; all 9 arcs populated; checkPromptCoherence switched to prefer laneMarkers) and B3411 (8 catalogs regenerated against the new generator in a single ~21 min Sonnet batch). Empirical dominant-axis clustering deltas: country 94% → 55% (-39pp); pop 31% → 19%; rap 67% → 52%; folk 86% → 84%; rock 36% → 32%; latin 21% → 7%; worship 89% → 80%. All 9 arcs at 100% coherence post-regen. The architectural split BROKE the clustering at the data layer. Relationship to SA#16: SA#16 catches the OUTPUT-side variant — the same single-axis clustering when the forge over-uses a single motif across many songs. SA#33 catches the INPUT-side variant — single-axis clustering in the seed-prompts that the forge is asked to generate from. Same craft truth at two pipeline positions. Relationship to SA#29: sister disciplines for content-generation pipelines. SA#29 says the genre signal must be plumbed as typed state, not re-parsed from text. SA#33 says the lane vocabulary must be split from the scene vocabulary, not piled into one list. Both are about preserving the distinction between structural constraints and surface coloration. Canonical phrasing: BRAND.sacredAccident33. Operator-facing arc: docs/WAR-ROOM-GENRE-CATALOG-CLUSTERING-2026-05-28.md.

Share this discipline

Lane-lock and scene-anchor must be split. When one vocabulary list does both, you get clustering. The vocabulary that enforces the lane must be separate from the vocabulary that colors each instance. Combine them, every instance comes out the same color. — Sacred Accident #33

Why this gets its own permalink

Each Sacred Accident is a discipline this codebase operates under — a rule named on the public record, enforced in the build pipeline, and cited in every commit that advances the moat it protects. Permalinking each one turns the discipline into a teaching artifact: a buyer or partner who reads this page can cite the exact principle we operate under without grepping our docs.

Canonical phrasing: BRAND.sacredAccident33 · Doc: docs/SACRED-ACCIDENTS.md