MUSIC_GAP_HUNT_2026-08-07.md

music/MUSIC_GAP_HUNT_2026-08-07.md

THE MUSIC GAP HUNT — "WHAT ELSE MIGHT WE BE MISSING?"

CANON SUBORDINATION — this document is PROPOSAL-TIER: it serves canon and never outranks it.
Canon served: the composition floor and its two amendments in docs/spine/DECISIONS_PENDING_JOSH.md
MUSIC ROUND 1 GRADED + THE COMPOSITION FLOOR (L5482), ROUND 2 GRADED (L5600), and the
ROUND-2 FLOOR ADDENDUM (L5615), which orders this sweep in Josh's own words: *"I like more
upbeat and what else might we be missing? Whats going to make people 30-50 years later still
listen to it for nostalgia? And it play in orchestras."*
If this document disagrees with canon, CANON WINS and this document is the defect.
Tier: PROPOSAL-TIER GAP SWEEP. It rules on nothing, changes no canon, and writes no registry.
It is the gap-hunter step the standing law of 2026-08-01 requires after a floor is built: what did
the comment imply that nobody built? Findings are BUILT-NOW or BOARDED, never dropped.
Method: sweep, not brainstorm. Every candidate below is grounded in a file on disk or a cited
source, and every one was checked against what ALREADY EXISTS before being called a gap. For each:
the gap in one sentence, the evidence it is real with file:line, the PROOF OF ABSENCE with its
positive control, why it matters to the 30-50-year test or the orchestra test or the floor, the
smallest thing that closes it, a verdict, and — not optional — the strongest argument that it is
not a gap at all. A gap list with no counterarguments is a wish list.

0. What this sweep found, in one paragraph

The program's craft layer is in good shape and its measurement layer is unusually honest. What is

missing is not craft and not measurement — it is ATTACHMENT. Six research lanes, a doctorate

synthesis, a 2,152-line doctrine, five instruments and a compose-then-realise architecture all

answer the question *what makes a piece of music good*. Almost nothing in the stack answers *which

person, place and moment does this tune belong to, how many times will a player hear it across

sixty hours, and what is it for*. The empirical literature on why music stays loved for thirty

years points hardest at exactly that missing half. Thirty-six of the thirty-eight authored themes

have zero attachment to any cue anywhere in the playable slice, and the reason is a hardcoded

string in one emitter. That is the largest single finding here and it is finding number one.

1. The evidence base for the 30-50-year test, grounded rather than asserted

Josh's question — what makes people still listen thirty to fifty years later — has a real

literature, and it does not say what a composer would hope it says.

aged 18 to 82, the most autobiographical memories attach to music whose song-specific age falls

between 10 and 19, peaking around 14 (Jakubowski, Eerola, Tillmann, Perrin and Heine, *Music &

Science*, 2020). Adolescence carries a socially-boosted increase in the reward of music listening.

A game whose players are in that band is writing into the bump whether or not it means to.

autobiographical memories than unfamiliar music, and repeated exposure strengthens the cue-memory

association through reactivation and rehearsal. The tune retrieves the person because the tune was

THERE, repeatedly, while the person mattered.

showed the highest correlation with both autobiographical salience and familiarity, and emotional

intensity — valence to a lesser extent — MEDIATED the predictive effect of musical features on

music-evoked memory. Musical features work THROUGH affect; they do not bypass it.

the inverted-U is one of the most tested hypotheses in music preference, and in some listening

conditions liking peaks as early as two exposures. Openness-to-experience moves the peak. An

unmanaged exposure count is as likely to burn a theme out as to bond it.

in the ludomusicology literature is Saria's Song: taught to the player in Kokiri Forest, returned

slower and sadder in the adult era. The player learns it, performs it, and then meets it changed.

Uematsu's and Kondo's shared method — a short cell per character, place and event, brief enough to

recall and flexible enough to transform — is the same mechanism.

WHAT THIS MEANS FOR OUR PROGRAM, stated plainly. Melodic quality is necessary and our whole stack is

pointed at it. The 30-50-year outcome is produced by ASSOCIATION, EXPOSURE AT A MANAGED DOSE, and

AFFECT — three things that are properties of the SCHEDULE and the ATTACHMENT, not of the notes. We

have built the notes half. Gaps one, two and three below are the other half.

2. The confirmed gaps

G1 — THE ATTACHMENT LAYER IS A HARDCODED STRING, AND 36 OF 38 THEMES ARE HEARD NOWHERE

to cues assigns one theme by hardcoded constant to 210 of its 216 rows, so thirty-six of the

thirty-eight authored themes have no exposure anywhere in the playable slice.

PROTAGONIST_THEME, HOUSE_OF_VELHEIM_THEME, ARCHITECT_THEME, FAMILIAR_BOND,

COMPANION_HEALERS_CHILD, CHILDHOOD_CONSTANCY, PATTERN_UNNAMED_PREGATE, twelve REGION_*

rows and eight FAM_* family rows. build/audio/music_cue_table.csv carries 216 cue rows with a

theme_ref column. Counted at HEAD: theme_ref takes exactly two values — JOURNEY_WORLD on 210

rows and HOME_AND_LOSS on 6. In harness/emit_music_cues.py the assignment is the literal string

theme_ref="JOURNEY_WORLD" at L499 (zone beds), L535 (tension layers), L565 (combat layers), L603

(chapter-scope beds) and L627 (stingers); only the motif_statement branch at L672 passes a real

theme_id, and it resolved to one theme.

returns exactly one file — the theme registry's own. No character, boss, familiar, faction, region,

scene or creature row carries a theme reference of any kind. POSITIVE CONTROL, same scan shape:

T0_SFX_Registry carries linked_entity_id and linked_entity_type and 680 rows use them, so

entity attachment is a pattern this corpus knows how to express and simply has not applied to

music. Second control: python harness/emit_music_cues.py --check returns

DRIFT -- disk 216 rows, derived 222 rows, so the table is stale as well as degenerate — but the

hardcoded constants mean a re-emit does not fix the attachment, it only adds six rows.

to "why do people still love it" is that a tune bonded to a person, a place and a moment, and was

heard enough times for the bond to set. A protagonist theme nobody hears cannot bond to anybody. It

also silently defeats work already paid for: the 2026-08-05 commit a03e5ddb took the registry

from 14×30 to 38×45 and its own message says "the theme_ref edge finally has teeth" — the teeth

were minted on the registry side and the consuming table never moved.

REGION_* row for zone beds; boss_ref → the boss's own theme, falling back to

PATTERN_UNNAMED_PREGATE where the reveal gate holds; beat role → PROTAGONIST_THEME,

COMPANION_HEALERS_CHILD or HOME_AND_LOSS. Plus one tooth: no theme row may be

generation_status complete while its cue-attachment count is zero. Roughly a day, no render hours.

canon, and it was deliberately emitted before the region-theme roster existed — so this is

scheduled work showing up as an unrefreshed artifact rather than a hole in the design. The

hardcoded constant also carries a real justification in its own comment (L95-99): JOURNEY_WORLD's

row states the interchangeable-layering law the whole table is scored under, and the constant was

how that law got onto every row. The counter to the counter is that INTERCHANGEABLE_THEMES at

L112 already exists as the seam for widening it, and it has one member.

G2 — NO THEME HAS A PLANT NODE, AN EXPOSURE COUNT OR A SPACING RULE

plainly, or how far apart its returns sit — so the one variable the nostalgia literature says

drives the outcome is unmanaged in both directions.

music_cue_id_ref 0/38, diegetic_surface 0/38, tempo_bpm 0/38, bar_length 0/38,

per_stem_role 0/38. recurrence_anchors is 17/38 and several of the filled cells are prose

rather than resolvable ids — PROTAGONIST_THEME's reads "canonical recurrences across all chapters

with age-stage variant per T1_Story_Spine cascade", which no counter can count. payoff_node is

18/38 and is the one scheduling field that works.

itself: "PIPELINE: plant_node, the transformation budget, and motif_compare.py, which exists

today and is not wired." POSITIVE CONTROL that this corpus knows how to schedule a recurrence:

T0_Motif_Registry — the NARRATIVE motif table — carries recurrence_nodes, recurrence_count,

spacing_rule, variation_rule and resolution_node, and its single row MOT_0001 fills all five

("four appearances across four consecutive-or-near nodes at the arc head; no spacing violation

because the object is worn and present rather than re-introduced"). The narrative lane has an

exposure grammar. The music lane, which needs it more, does not.

theme players mute. Our own architecture pushes hard toward over-exposure: PASS2_LAYER_ARCHITECTURE

§7 (L430-441) makes the head cell, mode, harmony grid and pokok SHARED across all twenty-plus cues

in a region by design, which is twenty vehicles for one tune inside one chapter. Nothing counts them.

theme, the plant node, the ordered list of exposure nodes, the count, the minimum and median gap in

chapters, and the payoff node — emitted, never hand-typed, with three teeth (every cardinal theme

has a plant node before its first non-plain statement; no theme exceeds a declared per-region

exposure ceiling; every theme with a payoff_node has at least three exposures before it).

to render.

one of the 38 rows carries transformation_plan, head_cell_spec, independence_test,

closure_policy and cohort, and HOUSE_OF_VELHEIM_THEME's independence test already reads "PASS

all three: 36 anchors CH_02..CH_68". So the ARCHITECTURE of recurrence is designed; what is missing

is only its arithmetic form. And an exposure ceiling in a game is partly a player-behaviour

question no schedule can answer, since two players hear a zone bed a wildly different number of

times. That objection is real and it argues for the ceiling being per-NODE rather than per-play.

G3 — EMOTIONAL SPECIFICITY IS NINE WORDS FOR SEVENTY-NINE CHAPTERS, AND NOTHING MEASURES WHETHER A CUE ACHIEVES ITS AFFECT

drawn from a nine-word vocabulary, so no cue in the game has an emotional target of its own — and

no instrument anywhere asks whether a render produced the feeling it was for.

emotional_valence_arc 79/79, with exactly NINE distinct register values across all 79 nodes: awe,

dread, fury, grief, resolve, tenderness, unease, wonder, wry. emit_music_cues.py copies both

fields down to every cue in the chapter; measured on the emitted table, the distinct-register count

per chapter is 1 for all fourteen slice nodes, and the distinct valence-arc count per chapter is

likewise 1. A zone bed in a market, a boss phase-two layer and a stinger for a rarity award in the

same chapter carry the identical emotional specification.

law, layer census, hook presence, noise structure, melodic intelligence) plus timbre_critic.py

and nostalgia_score.py, no axis measures valence, arousal, or perceived emotion; the battery's

own docstring says what it measures and affect is not in the list. POSITIVE CONTROL that the

concept is expressible here: mood_tags exists on the theme registry (14/38) and on the SFX

registry, and music_mood_tags reads 79/79 on Chapter_Index — the vocabulary exists and the

measurement does not.

in the literature, and it MEDIATES the effect of musical features on memory. Josh's round-2 grade

is an affect complaint stated in craft language: melodies "way too simple", no "intelligence", and

now "more upbeat". A program that cannot represent the intended feeling more finely than one word

per chapter cannot aim at it, and one that cannot measure the achieved feeling cannot tell whether

it arrived.

cue table as a valence-arousal pair plus one register word, defaulting to the chapter's value so

nothing regresses, authored per purpose class. MEASURE: a sixth instrument wrapping a published

music-emotion-recognition model. The 2024 meta-analysis of MER models reports valence predicted at

r = 0.67 and arousal at r = 0.81 across the best model per study — which is honestly enough for

AROUSAL to be a real gate and honestly NOT enough for valence to be more than a diagnostic, and the

instrument must say so in its own output the way every other instrument here does.

needs a model licence read first).

and is doing its job there; a cue-level affect field with no composer reading it is exactly the

kind of column this repo has been burned by (music_mood_tags reading 79/79 filled and 0/79 real

is recorded in docs/DESIGN_GAP_REGISTER.md L788-791). And valence at r = 0.67 is weak enough that

a gate built on it would reject good music for reasons nobody could explain — which is an argument

for building the intent half now and the measurement half only when a purpose-class arc needs it.

G4 — THE ROUND-2 FLOOR ADDENDUM HAS NO HOME IN ANY MUSIC ARTIFACT

register, and the two ultimate tests — appear in no rubric axis, no predicate, no plan field and no

instrument.

arcs with real peaks and valleys that never lose the listener; the upbeat register as a taste

preference across purpose classes; and the 30-50-year nostalgia test plus the orchestra-playable

test named as the two ultimate tests.

docs/proposals/MUSIC_COMPOSITION_DOCTRINE.md, harness/music_gen/ and build/audio/: "peaks and

valleys" 0 files, "build and hold" 0, "build-and-hold" 0, "orchestra-playable" 0, "orchestra test"

0. POSITIVE CONTROL, identical scan shape: "upbeat" returns 4 files

(HOOK_AND_TENSION_ARCHITECTURE.md, MUSIC_CRAFT_DOCTORATE.md, school_grammars/KONDO_SCHOOL.md,

build/audio/exemplars/expansion/n64_era.json) — all of them describing other music, none of them

a register the program targets or checks. The pattern can match; the concepts are absent.

will be graded against. It also names a live risk the program has already identified from the other

side: PROTOTYPE_VERDICT.md §5 warns that optimising for section count and structural yield "could

produce cues that lurch between full and empty because that is what the ruler rewards". Lurching

between full and empty IS losing the listener in the valley. Josh's sentence and the prototype's

self-critique are the same finding, and neither has an axis.

measured section below the cue's median density, does a followable melodic voice remain present —

computable from the stem manifest the render already keeps, since every stem carries its role. (b)

A BUILD-AND-HOLD axis: the longest run of cycles at or above 80 percent of peak intensity, against

the corpus distribution, so "hold" is a number rather than an adjective. (c) An UPBEAT REGISTER

declaration per purpose class — tempo band, mode class and rhythmic-density band — carried on the

cue-class template §7 of the pass-2 architecture already proposes.

were mid-flight; calling last night's ruling a gap is calling the normal latency of a working

pipeline a defect. And "never lose the listener" may be exactly the class of judgement that belongs

to Josh's ear rather than to an axis — the program's own honest register says no instrument here

measures whether music is beautiful. The counter is that (a) and (b) are cheap, computable, and

falsifiable, and an axis that turns out not to separate anything is a finding rather than a loss.

G5 — THE ORCHESTRA-PLAYABLE TEST HAS A DOCTRINE AND NO PIPELINE

instrument and can be scored for live players — is specified in detail at doctrine level and has no

realisation in the chain that actually produces our music.

(L1460-1470), sounding and written ranges for every transposing instrument (L1472-1495), MOLA

preparation adopted verbatim (L1540-1568), and a definition of done split into DoD-A which gates

the game build and DoD-B which gates concert release (L1627-1663). DoD-A's first clause is

"MusicXML score authored on the real orchestra template".

dorico across harness/ and build/audio/ returns two files, both rung-one tools:

author_head_cell.py and to_midi.py. The pass-2 chain — pass2_plan.py, pass2_realise.py,

pass2_flores.py — emits one MIDI per layer and a mixdown and no score of any kind. POSITIVE

CONTROL: the same term returns five files under docs/, so the vocabulary is present in the

program and absent from the pipeline. Searches for "piano reduction" and "short score" return zero

files anywhere.

colotomic, kotekan, ostinato, pokok — whose parts are compact parameter sets rather than written

lines. Nothing has ever asked whether that material reduces to a readable score, and the doctrine's

own warning (L1466-1470) is that a mockup written only to sound good will not survive reduction to

playable parts. If pass 3 composes another twenty cues in this form and the answer turns out to be

no, the orchestra test fails structurally rather than musically, and the fix is a rewrite.

harmony grid of one landed plan, emit a two-stave MusicXML (melody plus harmony), and run the

doctrine's own §5.2 written-range check on the layer manifest's instrument assignments. One cue,

one afternoon, and the answer is either "it reduces" or a named defect in the plan schema.

the doctrine explicitly warns against unreachable definitions of done. Deferring the score until a

concert is real is the doctrine's own considered position, not an oversight. The counter is

narrower than the objection: the probe is not the concert deliverable, it is the falsification test

for whether our composition FORM is orchestrable at all, and the cost of learning that late is the

whole point of compose-then-realise.

G6 — NOTHING CHECKS THAT TWO CUES IN THE SAME REGION SOUND DIFFERENT, AND THE SCALING PLAN MAXIMISES THE RISK

region, while the architecture's economic claim is built on all twenty-plus of them sharing a head

cell, a mode, a harmony grid, a pokok and an instrumentation plan.

CUE IN A REGION, authored once" — head cell and parent quotation, mode and harmony grid, pokok,

instrumentation plan and care block, derivation block — and pass2_flores.py --check verifies that

sharing rather than asserting it. The three prototype cues are described as "three TRANSFORMATIONS

of one theme rather than three pieces, because that is the claim under test" (L456-458).

pass2_plan.py, pass2_realise.py, pass2_flores.py and pass2_verdicts.py for cross-cue

comparison returns one hit, and it is len(set(ids)) counting distinct LAYER ids inside one plan.

POSITIVE CONTROL that the corpus knows how to measure this: harness/music_gen/sameness_baseline.py

exists, measures a cohort on eight axes and reports the distinct-value count per axis — and its

read path is build/audio/authored/*/*ORCHESTRAL_RUNG_ONE.{json,wav}, a superseded rung-one cohort.

The instrument is built, points at the wrong epoch, and is wired to nothing in pass 2.

2026-08-05: "Why is all this music the fuxking same, all just 30 seconds each the exact same track."

That complaint is what sameness_baseline.py was built to answer. The pass-2 architecture then

adopted maximal sharing as its economic model, which is the correct answer to coherence and the

most direct possible route back to the same complaint at twenty times the volume.

make it a per-REGION report with one tooth: across the cues of a region, at least N of its eight

axes must carry more than one distinct value. It is a read-path change plus a grouping key.

twenty cues share a tune is what a leitmotif score IS, and Josh's 2026-08-05 complaint was about

thirty-second loops that were literally the same track, which the compose-then-realise chain

already makes impossible (the three prototype cues run 194.6 s, 240.0 s and 145.5 s with 37, 32 and

11 parts). Measuring sameness could therefore punish exactly the property we are trying to build.

The counter is that the tooth belongs on the axes that are NOT the theme — tempo, texture class,

instrument set, section arc — which is precisely how the eight-axis instrument is already shaped.

G7 — NOTHING IS AIMED AT THE FIFTIETH HEARING

listener who already knows it — the buried counter-line, the second-time-through discovery.

(pass2_plan.py L129, L449) and instr_melodic_intelligence.py measures whether "the orchestra

CONVERSE[s]" on a render. So both ends exist.

any minimum of simultaneously-followable melodic parts: reading the full V-list, V17 through V21

govern the HEAD CELL and its returns, V22 and V23 govern register slots, and nothing governs

polyphonic interest. POSITIVE CONTROL: MUSIC_CRAFT_DOCTORATE.md §6 names the closest measurement

and marks it unbuilt — item FIVE, per-section instrument sets across near-identical sections

(L246-251), "the highest-value measurement this pass could not build". A whole research lane exists

(craft_research/COUNTER_MELODY_AND_DIALOGUE.md, 49 KB) with no predicate consuming it.

softened by material that has more in it than one hearing reveals, and that is the only lever we

have against satiation that does not reduce exposure. It is also the difference between a track

that survives thirty years and one that survives thirty hours.

declares at least one counterline layer that is not the hook carrier and is audible in at least

one section where the hook is absent. REPORT: run instrument (e)'s counter-melody axis per cue and

publish it beside structural yield, uncoupled from the KEEP/REJECT decision until it is calibrated.

machinery.

and is in the floor battery, so the property is observed even if it is not required — and a

REQUIRED counter-line is a good way to get a decorative one. The corpus finding underneath the

whole pass is also that loved tracks repeat their material and change their treatment; inner detail

may be a treatment property that the existing colour-change discipline already licenses.

G8 — THE PALETTE CANNOT SING, AND THE FLOOR NAMES SINGING FOUR TIMES

clapping, and the sample palette that realises every pass-2 cue contains seventy-six instruments

and not one human voice.

nature and ambience and whistling or humming or harmonizing", and "strategically place the sounds

and layers and harmonies and clashes and ambience and nature and voice and chants and humming and

clapping etc. this is all the floor."

for voice, choir, vocal, hum, whistl, chant or sing returns the empty list. POSITIVE CONTROL from

the same scan: claps IS present at L419 with a note citing Josh's floor by name — so the floor's

body-percussion clause was read, actioned and landed, and the voice clause beside it was not.

MUSIC_CRAFT_DOCTORATE.md §8 (L290-294) names the consequence: "The single highest-leverage

acquisition named is a CC0 voice set, whose absence alone blocks four nodes."

grammar that reads sacred without quoting liturgy, one rule for every sacred tradition. All of it

is unrealisable at the sampler. Voice is also the most nostalgia-dense layer in the medium's

history, and it is a floor element rather than an enhancement.

licensed SATB vocalise / solo-hum set, probe-verified through pass2_sfz_probe.py exactly as the

53 pass-2 additions were, with the licence class recorded. Everything downstream already exists.

it is a known blocker rather than a missed one, and Josh's final-buy ruling of 2026-08-07 ended the

acquisition treadmill — re-opening it needs care. The counter is that the ruling ended the

EXEMPLAR-corpus treadmill, not the instrument stack; a voice set is production equipment, and the

books-never-gate law's logic points the same way — build now with what exists, but a floor clause

that cannot be realised at all is a different class from one that could be better.

G9 — THE ADAPTIVE ARCHITECTURE IS FULLY DESIGNED AND HAS ZERO DATA

transitions, stingers, grid contracts, a per-cue deliverable and a transition acceptance rubric —

and not one of its fields exists in any registry, harness or build artifact.

the vocabulary named exactly, the Tier-H/Tier-B split, a twelve-value state set with silence as a

first-class member (L1714-1718), mandatory hysteresis with a declared maximum de-escalation

latency, the grid contract per sub-region, head-motif stingers, the Quartz layer budget pinned at

four for the bulk lane and six for the hero lane, and a transition rubric that tests every ordered

state pair at three offsets within the bar.

_source/ for adaptive_role, state_id, transition_class, MusicDirector, explore_calm and

combat_heavy returns hits in exactly three places, all of them documents: the doctrine itself,

docs/DESIGN_GAP_REGISTER.md, and the 2026-07-29 gap-audit lane file. No code, no registry, no

emitted table. THIS IS ALREADY BOARDED as GAP-184 (docs/DESIGN_GAP_REGISTER.md L2271, status

OPEN, blocking rank 8): "Music has no cue, stem or state-transition data home — music_cue_id_ref is

an FK to no table."

makes the load-bearing claim: the melody must never live in a layer an intensity parameter can

mute, and thematic escalation must be interchangeable rather than additive. If pass 3 composes

twenty more cues without a state model, the melody-survival property is untested at exactly the

moment the volume arrives.

table gains state_id and motif_carrier_stem, and one transition table is minted with

source-state, dest-state, sync boundary and transition class. The rest of §6 can wait for the

engine.

Reported here as an ALREADY-BOARDED item, not a discovery.

fixed segments of three to five minutes that hand off, which is close to what pass 2 already

produces — and §6.6 says the engine work is a MusicDirector component we own and do not have. Data

minted years before its consumer is the anti-orphan law's own failure mode. The counter is that

motif_carrier_stem is not engine work: it is one field naming which of the stems already on disk

holds the tune, and without it the mute test of §1.11 cannot be run on anything we have made.

G10 — SILENCE IS A DECLARED STATE THAT NOBODY DECIDES

where the game goes quiet or who owns that decision.

not an absence", with the Breath of the Wild precedent and the note that the L1.5 ambient lane must

be able to select silence and mean it. MASTERPIECE_PROGRAM.md §11.8 (L419-427) names "the

SILENCE-FOR-AMBIENCE budget (the moments the score deliberately yields)" inside "the game-audio

half, which no rung has touched".

bed; zero rows across all 216 carry any silence marker in cue_name or trigger_context, and

TRACK_TYPES (emit_music_cues.py L92) has five members — zone_bed, tension_layer, combat_layer,

stinger, motif_statement — with no silence or score-yield member. POSITIVE CONTROL: composed rest

WITHIN a cue is measured and gated (the 2.68 to 17.43 band is the axis every round-1 rejection

failed), so the corpus can express rest at the cue scale and simply does not express it at the

world scale.

and silence is what makes a theme's arrival land. It is also the cheapest possible content

decision — the absence of a cue costs nothing to produce and something real to decide.

chapter, the share of sites carrying a bed, with a declared band. The decision then exists as data

and can be argued with.

it from being lost when that rung is scoped.

director makes from state, not an authoring decision made per site — so the right home is the state

machine of G9, and minting a column now would place it in the wrong table. That objection is strong

enough that the recommendation is a REPORT rather than a column.

G11 — DIEGETIC MUSIC AND PLAYER AGENCY OVER MUSIC HAVE A COLUMN AND NO CONTENT

the player can use — has one empty registry column and no design surface, in a game whose entire

premise is a world tour of musical cultures.

MASTERPIECE_PROGRAM.md §11.8 names "the diegetic/non-diegetic seam (a musician IN the scene

versus the score)" as untouched. craft_research/ORGANOLOGY_SLICE_CULTURES.md is a 135 KB roster of

what each culture actually plays, with ensemble practice — the substrate for in-world performance

is the single largest research artifact in the program.

NPC" 0, "play an instrument" 0. T0_Minigame_Registry has two rows (caci, senet) and neither is

musical. POSITIVE CONTROL: "diegetic" itself returns six files, all of them craft-research lanes

discussing OTHER games' use of it — the vocabulary is present in our reading and absent from our

design.

mechanism — the player LEARNS a tune, PERFORMS it, and later meets it transformed — combines

attachment, repeated exposure, and player agency in one object, and the research on agency in

interactive media ties it to identity and sense of control. It is also the one place where a world

tour of thirteen musical cultures becomes something the player DOES rather than something playing

behind them.

standing-protocol bar (a performance minigame per region; a listen-and-collect surface with no

performance skill; diegetic ensembles as pure staging with no player verb), each grounded in the

organology roster, with a recommendation and the strongest objection, boarded for Josh.

lane's authority and below Josh's threshold for a bare question.

and quest verbs are the ones that gate the Josh gate; adding a music verb now is the classic

feature that eats a slice. And an empty column is not evidence of a missing design — it may be

evidence of a column minted ahead of its decision, which is the anti-orphan failure mode.

G12 — THE CUE IS NEVER CHECKED AGAINST THE SCENE IT PLAYS UNDER

scores, so a three-minute through-composed arc and a ninety-second scripted beat are composed

identically.

game contexts into scene archetypes, derive per archetype which formula the exemplars actually use,

and let a scene declare its archetype so the formula follows — and calls it "THE TABLE THE GAME

QUERIES". §11.10 (L437-444) specifies the parametric form per purpose class.

harness/, build/audio/ and the music proposals returns exactly one file: MASTERPIECE_PROGRAM.md

itself. The map is proposed and never built. Separately, T0_Scene_Spec_Registry has 27 rows with a

music_cue_id_ref column and scene_beat_structure, and the cue table's join is to sites and

beats rather than to scene rows, so the two never meet.

its section arc, its tension curve, its drop budget, its ending type — is authored per cue from

scratch, which is both the expensive path and the inconsistent one. It is also the bridge §11.7

says already has a consumer on day one.

(L462-465) already names as the next multiplier: a default section arc, tension curve and drop

budget per purpose class, taken from HOOK_AND_TENSION_ARCHITECTURE.md §11.3. A cue then costs a

template plus its deviations, and the template is where §11.7's archetype mapping lands.

this entry only records that it is unbuilt and that §11.7 is its other half.

rungs deliberately, and templating before three cues have been graded by a human would freeze the

wrong defaults into twenty. That is a good argument and it is why this sits at priority 3.

G13 — THE VOLUME TARGET IS UNMET IN THE SLICE AND THE ECONOMIC CLAIM IS UNTESTED PAST THREE

emitted slice averages 15.4 cue rows per node with one node reaching twenty, and the architecture's

amortisation claim has been tested at n = 3.

through CH_06 and CH_11 through CH_13 at 16, CH_07 and CH_09 at 15, CH_08 at 14, CH_01 and CH_10 at

13, CH_PROLOGUE at 12. One node of fourteen meets the target. PASS2_LAYER_ARCHITECTURE.md §7

states the economics with real numbers (136 shared lines against 120-160 per cue) and

PROTOTYPE_VERDICT.md §5 says plainly that the claim "is untested at anything past three, and

three is a small n for a claim about twenty".

docs/proposals/music/ or build/audio/; the closest is MASTERPIECE_PROGRAM.md §7 SEQUENCING,

which sequences against the weekly model limit rather than against render time. POSITIVE CONTROL:

the prototype DOES carry per-cue numbers (194.6 s, 240.0 s, 145.5 s at 37, 32 and 11 parts), so the

inputs to a cost model exist and the model does not.

region is the honest next test, and it is also the first point at which G2's exposure ceiling and

G6's distinctiveness tooth become load-bearing rather than theoretical.

already lists as next-rung item 5, and emit the cost model from it rather than estimating it.

room items the verdict already ordered ahead of it.

from canon beats and zones, not a composition target; the twenty-plus figure is per region and

cultural node and the slice's nodes are not all full regions. Reading a canon-derived inventory as

a shortfall against a composition target may simply be comparing two different objects — which is

itself worth one line of reconciliation somewhere.

G14 — THE THEME AGES IN PROSE AND IN NOTHING ELSE

row, cue row or plan field is keyed to age.

carrier, re-voiced per age stage" and a transformation_plan describing the single-theme arc from

the Prologue statement to the Ch-77 statement, budgeted at eight of the six-to-ten allowed

operations. T0_Chapter_Index carries age_stage filled 79/79 and protagonist_age /

protagonist_age_end alongside it.

all registries and the cue table returns the theme row's own prose, one craft-research mention, one

composer-brief mention, and the Chapter_Index / Character_Index / Hard_Lines columns — and zero

music rows keyed to it. The cue table has no age column and no age-variant rows. POSITIVE CONTROL:

the identical scan finds the character pipeline's seven-age ladder fully expressed in data, so the

age axis is a first-class concept in this repo everywhere except the score.

the player has aged with it. Ours is a 79-node arc with a seven-rung age ladder already authored on

the art side, which is a stronger version of the device than the reference case — and it currently

exists as one sentence in one cell.

resolved from the chapter's own age_stage, so the protagonist's plain statements are countable

per rung and the transformation budget can be checked against them. It falls out of G1's resolver.

and a per-age column with no composer consuming it is another music_mood_tags. The arc also runs

past the slice, so nothing before Ch 13 exercises it.

3. Candidates examined and judged NOT A NEW GAP

Named here with the reason, because a sweep that reports only positives has no anti-inflation control.

candidatewhy it is not a new gap
MIX, SPACE AND MASTERINGALREADY BOARDED as GAP-183 (docs/DESIGN_GAP_REGISTER.md L2260, status OPEN, no blocking rank): no loudness or mix doctrine and no audio performance budget exist anywhere, verified with a corpus-wide zero for LUFS, true peak, dialogue anchor and ducking policy. PASS2_LAYER_ARCHITECTURE.md §8 names the same hole from the render side ("NO REVERB, NO SPACE, NO MIX"). The only new information this sweep adds is that GAP-183 carries NO blocking rank, which is worth correcting when it is next triaged.
EXPRESSION CONTROL (dynamics within a note)Already named and SEQUENCED: PROTOTYPE_VERDICT.md §5 next-rung item 3, with the fix identified (CC curves per part, which sfizz supports and the plan schema does not yet express). Owned, not missing.
A ROOM (convolution reverb)Same source, next-rung item 4, with the licensing question on impulse responses already named. Owned.
LAYER COUNTS, STRATA, THE 3-5-CYCLE LAW, HOOK RECURRENCE, NOISE-VERSUS-STRUCTUREBuilt, five instruments, wired into one battery, each with mutation controls. The honest negatives are published beside them.
THE CARE LINERealised as architecture rather than as prose: of_the_place on every layer, V24 and V25 refusing of-the-place threat material, and the pitch-class disjointness verified on the COMPILED notes rather than on labels. This is the strongest-executed part of the program.
THE WORDLESS-VOCAL DOCTRINEDoctrine §3 is complete and good. What is missing is the SAMPLES, which is G8 — a supply gap, not a design gap.
GENRE SPAN ANCIENT TO TECHNOcraft_research/GENRE_SPAN_ANCIENT_TO_TECHNO.md, 66 KB, landed 2026-08-07 in direct answer to Josh's round-2 sentence.
ANTI-PLAGIARISMNOSTALGIA_RUBRIC.md §5 carries the tooth, with its fourteen declared gaps named.
PASS-2 DETERMINISMAlready declared as a gap by the artifact itself: PROTOTYPE_VERDICT.md §7 states the claim is inherited from orchestrate.py and not re-measured, and names that as a gap.
THE CUE TABLE'S STALENESSReal (--check returns DRIFT, 216 on disk against 222 derived) but it is a refresh, not a gap — and folded into G1, whose fix requires the re-emit anyway.

4. The ranked table

#gapverdictpriority
G1Theme-to-entity attachment is a hardcoded string; 36 of 38 themes are heard nowhereBUILD-NOW1
G4The round-2 addendum's three floor elements have no axis, field or predicateBUILD-NOW1
G8The palette has 76 instruments and no voice, against a floor that names singing four timesBUILD-NOW (acquire)1
G2No plant node, exposure count or spacing rule on any themeBUILD-NOW1
G3Emotional intent is one word per chapter; achieved affect is unmeasuredBUILD-NOW (intent)2
G6Nothing checks that two cues in a region differ, while sharing is the scaling modelBUILD-NOW2
G5The orchestra test has a doctrine and no pipeline; no score, no reduction probeBUILD-NOW (probe)2
G9Adaptive architecture fully designed, zero data — ALREADY BOARDED as GAP-184BOARD (narrow scope)2
G11Diegetic music and player agency have an empty column and no design surfaceBOARD (brief)2
G7Nothing is aimed at the fiftieth hearing; counter-line has no predicateBOARD3
G12Cue is never checked against its scene; the archetype-to-formula map is unbuiltBOARD3
G10Silence is a declared state nobody decidesBOARD3
G1320+ per region unmet in the slice; the amortisation claim is untested past threeBOARD3
G14The theme ages in one prose cell and in no dataBOARD3

5. The single strongest recommendation for pass 3

BUILD THE EXPOSURE LEDGER, AND MAKE ATTACHMENT A GATE BEFORE COMPOSING ANOTHER CUE.

Every cue pass 3 renders is an answer to the question "what should this sound like". Not one artifact

in the program answers "who is this for, and how often will they hear it" — and the empirical

literature on why music is still loved after thirty years puts association, exposure and affect ahead

of every melodic property we currently measure. We have thirty-eight authored themes with head cells,

transformation plans, independence tests and payoff nodes, and thirty-six of them are heard by nobody

because one emitter writes the same string on every row.

The ledger is one emitted artifact: per theme, its entity, its plant node, its ordered exposure

nodes, its count, its median spacing, its payoff node, and its per-region ceiling. It costs no render

hours, it is arithmetic on a table we already emit, and it makes the 30-50-year test a schedule

rather than a hope — which is the only form in which anybody can be wrong about it and find out.

Two teeth make it real rather than decorative: no theme row reaches complete while its exposure count

is zero, and no cue class may be composed for a region whose region theme is unattached. Both fail

closed. Both are checkable today.

Everything else in this document is downstream of that. G2 is the ledger's arithmetic, G3 gives each

exposure a purpose, G14 gives the protagonist's exposures an axis, and G7 and G10 are what keep a

managed exposure count from becoming a satiated one. Pass 3 will produce better-sounding music than

pass 2 whether or not this lands. It will not produce music anybody remembers in 2056 unless a person

and a place are attached to it first.

6. Coverage, stated honestly

What this sweep DID read: MUSIC_CRAFT_DOCTORATE.md in full; MUSIC_COMPOSITION_DOCTRINE.md §5,

§6, Appendix S and its full heading map; PASS2_LAYER_ARCHITECTURE.md §§1-9;

PROTOTYPE_VERDICT.md §§2-7; MASTERPIECE_PROGRAM.md §5 and §§11.7-11.10; NOSTALGIA_RUBRIC.md §7

and its heading map; the heading maps of LEITMOTIF_ARCHITECTURE.md and COMPOSER_BRIEF_PACK.md;

the live T0_Theme_Registry (all 38 rows, all 45 columns, fill rates computed); the emitted

music_cue_table.csv (all 216 rows, distributions computed); emit_music_cues.py structure and

constants; sfz_palette.py PALETTE; the docstrings and headline claims of all five instruments plus

timbre_critic.py and sameness_baseline.py; pass2_plan.py's full predicate list; the 2026-07-29

audio gap-audit lane file and the GAP-180 through GAP-187 register entries with their machine status.

What this sweep DID NOT read, and therefore cannot speak for:

headline claims through the doctorate's synthesis and grepped them for specific terms. A gap

living inside a lane's body text and absent from the doctorate would not have been caught here.

cites. The statistical findings are taken as reported; I did not re-derive any of them.

checklist, wordless-vocal register, thirteen per-culture register briefs and the composer-in-loop

workflow were read as headings plus targeted sections. §4's per-culture register cards are a

substantial body of work I sampled rather than swept.

school_grammars/, and theme_architecture_rows.json — not read.

from the register entries that cite it.

does not name a product, because the licence read has not been done.

7. Sources for the empirical claims of section 1

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