EXPOSURE_LEDGER.md

music/EXPOSURE_LEDGER.md

THE EXPOSURE LEDGER — who each tune is for, and how often the slice plays it

**CANON SUBORDINATION — emitted artifact, PROPOSAL-TIER: it serves canon and never
outranks it.** Canon served: registries/T0_Theme_Registry, docs/spine/CH_*.md,
registries/T0_Chapter_Index. If this disagrees with canon, CANON WINS and this is the
defect. Emitted by harness/music_gen/exposure_ledger.py; do NOT hand-edit.

38 theme rows · 17 attached · 21 carry zero exposures · 222 cue rows · 17 distinct theme_ref on the table.

0. The teeth

Both are quoted verbatim from docs/proposals/music/MUSIC_GAP_HUNT_2026-08-07.md §5 and

both fail closed:

Both teeth are CLEAN on live data. A clean pass proves nothing on its own, which is why

each carries a mutation control in --self-test: T1 fires when a zero-exposure row is

marked complete, and T2 fires for every region when the cue table's theme_ref values

are collapsed back to the single hardcoded constant the emitter carried until

2026-08-08 — the real historical defect, replayed.

1. The ledger

theme_idtierplant nodeexposuresnodesmedian gapregion ceilingpayoffdiegetic surface
JOURNEY_WORLDACH_PROLOGUE141412CH_77CH_02 :: CH02_B10 :: gong
HOME_AND_LOSSACH_PROLOGUE6414CH_13CH_02 :: CH02_B10 :: gong
ARCHITECT_THEMEACH_38000CH_68
CASSIUS_PHASE_1ACH_76000CH_76
CASSIUS_PHASE_2ACH_76000CH_76
CASSIUS_PHASE_3ACH_76000CH_76
ENDING_EVILACH_77000CH_77
ENDING_GOOD_ENOUGHACH_77000CH_77
ENDING_TRULY_GOODACH_77000CH_77
FAMILIAR_BONDA000CH_58
GRAND_SAGE_REVEALACH_77000CH_77
HOUSE_OF_VELHEIM_THEMEACH_38000CH_38
PROTAGONIST_THEMEACH_PROLOGUE000CH_77CH_02 :: CH02_B10 :: gong
VIMANA_ACTIVATIONACH_55000CH_58CH_57 :: CH57_B01 :: song
FAM_THE_OTHERWORLDB192119CH_77
CHILDHOOD_CONSTANCYBCH_01313CH_01CH_02 :: CH02_B10 :: gong
COMPANION_HEALERS_CHILDBCH_13111CH_13CH_15 :: CH15_B05 :: recitation
FAM_THE_DEEP_WATERBCH_02000CH_02 :: CH02_B10 :: gong
FAM_THE_LIVING_VOICEBCH_03000CH_04 :: CH04_B07 :: gamelan
FAM_THE_MADE_PLACEBCH_04000CH_04 :: CH04_B07 :: gamelan
FAM_THE_OTHER_SELFBCH_PROLOGUE000CH_02 :: CH02_B10 :: gong
FAM_THE_SUBSTRATEBCH_PROLOGUE000CH_02 :: CH02_B10 :: gong
FAM_THE_TURNEDBCH_38000
FAM_THE_WRITTENBCH_02000CH_02 :: CH02_B10 :: gong
PATTERN_UNNAMED_PREGATEBCH_38000CH_38
VOICE_COLOUR_SIGNATUREB000
REGION_FLORES_ISLANDCCH_02352135CH_02 :: CH02_B10 :: gong
REGION_SOUTH_AFRICACCH_1316116CH_15 :: CH15_B05 :: recitation
REGION_BALICCH_0415115CH_04 :: CH04_B07 :: gamelan
REGION_CENTRAL_AFRICA_CONGOCCH_1115115CH_11 :: CH11_B03 :: song
REGION_SRI_LANKACCH_0615115CH_06 :: CH06_B06 :: chant
REGION_WEST_AFRICACCH_1215115
REGION_ETHIOPIACCH_0914114CH_11 :: CH11_B03 :: song
REGION_SOUTH_INDIACCH_0714114CH_07 :: CH07_B14 :: chant
REGION_SWAHILI_COASTCCH_0813113CH_08 :: CH08_B06 :: ngoma
REGION_RIFT_VALLEYCCH_1012112CH_11 :: CH11_B03 :: song
REGION_SUMATRA_JAVACCH_0511111CH_06 :: CH06_B06 :: chant
REGION_ANGKOR_KHMERCCH_05414CH_06 :: CH06_B06 :: chant

2. Zero-exposure rows, split by whether that is a defect

A theme whose plant node is outside Prologue→Ch 13 is CORRECTLY silent in this table: the

cue table is exactly the slice. Only an in-slice theme with no exposure is a hole.

OUT OF SLICE — 12 rows, not a defect: ARCHITECT_THEME (CH_38), CASSIUS_PHASE_1 (CH_76), CASSIUS_PHASE_2 (CH_76), CASSIUS_PHASE_3 (CH_76), ENDING_EVIL (CH_77), ENDING_GOOD_ENOUGH (CH_77), ENDING_TRULY_GOOD (CH_77), GRAND_SAGE_REVEAL (CH_77), HOUSE_OF_VELHEIM_THEME (CH_38), VIMANA_ACTIVATION (CH_55), FAM_THE_TURNED (CH_38), PATTERN_UNNAMED_PREGATE (CH_38)

IN SLICE WITH ZERO EXPOSURES — 9 rows. This is the worklist:

3. The per-region ceiling

Exposure is an inverted U: under-exposure never bonds and over-exposure produces the theme

players mute. The ceiling below is per NODE, not per play — two players hear a zone bed a

wildly different number of times and no schedule can answer that.

region pagecue rowsthemes carried
flores_island38REGION_FLORES_ISLAND×35, JOURNEY_WORLD×2, HOME_AND_LOSS×1
fairy_realm28FAM_THE_OTHERWORLD×19, HOME_AND_LOSS×4, CHILDHOOD_CONSTANCY×3, JOURNEY_WORLD×2
south_africa19REGION_SOUTH_AFRICA×16, JOURNEY_WORLD×1, HOME_AND_LOSS×1, COMPANION_HEALERS_CHILD×1
bali16REGION_BALI×15, JOURNEY_WORLD×1
central_africa_congo16REGION_CENTRAL_AFRICA_CONGO×15, JOURNEY_WORLD×1
sri_lanka16REGION_SRI_LANKA×15, JOURNEY_WORLD×1
west_africa16REGION_WEST_AFRICA×15, JOURNEY_WORLD×1
ethiopia15REGION_ETHIOPIA×14, JOURNEY_WORLD×1
south_india15REGION_SOUTH_INDIA×14, JOURNEY_WORLD×1
swahili_coast14REGION_SWAHILI_COAST×13, JOURNEY_WORLD×1
rift_valley13REGION_RIFT_VALLEY×12, JOURNEY_WORLD×1
sumatra_java12REGION_SUMATRA_JAVA×11, JOURNEY_WORLD×1
angkor_khmer4REGION_ANGKOR_KHMER×4

4. The age axis (G14)

age_stage is filled 79/79 on T0_Chapter_Index and, until the 2026-08-08 emit, appeared

in no music row anywhere. It now rides the motif_statement rows, so a plain statement is

countable per rung.

Generated by harness/site/structure_site.py — the URL path is the repo path. review root