music/exemplars/instruments/HOOK_PRESENCE_VALIDATION.md
Tier: MEASURED INSTRUMENT. Produced by harness/music_gen/instr_hook_presence.py, which writes this file and its machine record together and writes nothing else.
The law it measures: A track must state an identifiable motif and bring it back transformed rather than pasted: hooks and complexities, never stacked noise.
Its authority: the composition floor Josh set on 2026-08-07 — "its got to have the hooks and complexities. There cant just be stacked noise" — recorded at the tail ofdocs/spine/DECISIONS_PENDING_JOSH.md, commitda627060.
Machine record: build/audio/exemplars/instruments/HOOK_PRESENCE_VALIDATION.json.
Legal posture: analysis for understanding only; audio is read from disk, measured, and never copied, redistributed, or used as model input.
The instrument states a motif from the card's own hook block, then hunts it through the whole track under three invariances the existing measurements do not have: it matches over all twelve pitch-class rotations, so a return a fourth higher still reads as a return; over a seven-point time-ratio grid, so an augmented or diminished return still reads as a return; and, symbolically, under an edit budget, so an ornamented return still reads as a return. All three are proved on planted controls that recover the interval, the ratio and the octave they were given. On this corpus it finds nothing.
Not one of the 14 metrics clears the multiplicity bar. The strongest, mean_return_similarity, reaches within-album AUC 0.325 (deviation 0.175) against an instrument-only bar of 0.245 and a joint bar of 0.241. n_returns lands at 0.510 and returns_per_min at 0.500, which is chance to three decimal places. This is the second null this program has produced on this family of ideas: PATTERN_FINDINGS_V2 section 6 already recorded recurrence_lag_norm failing at AUC 0.505, rank 102 of 103. Recurrence with transformation, measured properly and on its own terms, does not separate a loved track from the album it shipped on.
It also does not separate the loved tracks from the eighteen Josh threw out, and it fails in the direction that matters: the rejected round scores HIGHER. On n_returns the candidates' median is 3.0 against the loved tracks' 1; on hook_strength the AUC of loved-over-rejected is 0.306, where 0.5 is indistinguishable and anything below it means the rejected tracks look better. Round 1 states hooks and brings them back. Whatever Josh heard, it is not an absence of restatement.
Two things survive this and are worth carrying. The first is the craft distinction the instrument can make and no other measurement here can: a track whose returns are all literal is a loop, and a track whose returns are varied has a leitmotif — proved on planted controls, and the distinction Josh's three-to-five-cycle law turns on. The second is a defect in this file that section 6 measures rather than hides: the return threshold was calibrated on synthetic controls and does not transfer to real recordings, so the absolute return counts below are too low and nine loved tracks read as zero. The separation null survives that sweep at every threshold tested; the absolute counts do not.
| measured here | PATTERN_FINDINGS_V2 | |
|---|---|---|
| formula cards | 1180 | 1181 |
| corpus HITS | 30 | 28 |
| album siblings available as controls | 927 | 851 |
| albums carrying a hit | 18 | 16 |
The pool is re-read from disk rather than quoted, and it has moved since V2 was written. That difference is reported rather than reconciled: a claim re-derived at HEAD is the only kind this program accepts.
| id | title | class | hook | to hook (s) | returns | per min | transformed | pitch or time | longest gap (s) |
|---|---|---|---|---|---|---|---|---|---|
| EX_006 | Chrono Trigger Main Theme | TITLE_CHARACTER | yes | 2.7 | 4 | 1.57 | 100% | 25% | 68.1 |
| EX_007 | Frog's Theme | TITLE_CHARACTER | yes | 61.6 | 2 | 1.44 | 0% | 0% | 31.1 |
| EX_014 | Tekken 2 Attract Movie: Sound Track | TITLE_CHARACTER | no | n/a | n/a | n/a | n/a | n/a | n/a |
| EX_017 | Sweden | EXPLORATION | yes | 1.1 | 14 | 3.90 | 79% | 0% | 49.4 |
| EX_018 | Subwoofer Lullaby | EXPLORATION | yes | 0.0 | 0 | 0.00 | n/a | n/a | 208.5 |
| EX_022 | Wind Scene | EXPLORATION | yes | 0.5 | 6 | 1.76 | 67% | 50% | 79.5 |
| EX_030 | Route 209 | EXPLORATION | yes | 0.6 | 1 | 0.73 | 0% | 0% | 72.6 |
| EX_032 | Terra's Theme | EXPLORATION | yes | 2.0 | 16 | 4.12 | 100% | 100% | 35.9 |
| EX_033 | Corridors of Time | EXPLORATION | yes | 0.5 | 0 | 0.00 | n/a | n/a | 183.1 |
| EX_046 | BFG Division | BATTLE | yes | 9.6 | 13 | 1.54 | 100% | 77% | 145.6 |
| EX_053 | Cynthia Battle Theme | BATTLE | yes | 1.5 | 2 | 1.31 | 100% | 100% | 51.3 |
| EX_055 | The Cyber Grind | BATTLE | yes | 0.2 | 2 | 0.44 | 100% | 100% | 111.2 |
| EX_064 | Ludwig, the Holy Blade | BOSS | yes | 3.2 | 0 | 0.00 | n/a | n/a | 244.8 |
| EX_075 | Dancing Mad | BOSS | yes | 1.0 | 23 | 1.30 | 74% | 70% | 480.4 |
| EX_082 | The Best Is Yet to Come | MELANCHOLIC | yes | 1.5 | 0 | 0.00 | n/a | n/a | 344.0 |
| EX_088 | An Unwavering Heart | MELANCHOLIC | yes | 0.8 | 8 | 4.49 | 75% | 50% | 17.8 |
| EX_092 | Snake Eater (Ladder Climb) | TENSION | yes | 0.6 | 1 | 0.34 | 100% | 100% | 145.4 |
| EX_094 | Dark Creature Pursuit | TENSION | yes | 2.1 | 0 | 0.00 | n/a | n/a | 113.2 |
| EX_102 | Magus Castle | TENSION | yes | 5.1 | 1 | 2.10 | 100% | 0% | 23.5 |
| EX_110 | Want You Gone | CREDITS_TRIUMPH | yes | 0.0 | 4 | 1.70 | 75% | 0% | 59.9 |
| EX_113 | To Good Friends | CREDITS_TRIUMPH | yes | 0.4 | 1 | 0.43 | 100% | 0% | 92.1 |
| EX_124 | Deus Ex Main Title (UNATCO) | TITLE_CHARACTER | yes | 0.1 | 4 | 1.89 | 75% | 0% | 57.6 |
| EX_136 | Humming the Bassline | EXPLORATION | yes | 0.2 | 4 | 0.93 | 75% | 75% | 165.1 |
| EX_142 | Shinshu Field | EXPLORATION | yes | 0.8 | 2 | 0.59 | 0% | 0% | 88.6 |
| EX_145 | Go Straight | BATTLE | yes | 0.3 | 0 | 0.00 | n/a | n/a | 268.6 |
| EX_147 | Fighting of the Spirit | BATTLE | yes | 0.6 | 1 | 0.32 | 100% | 100% | 141.7 |
| EX_161 | Aria di Mezzo Carattere | MELANCHOLIC | yes | 0.6 | 1 | 0.25 | 100% | 100% | 220.1 |
| EX_162 | Schala's Theme | MELANCHOLIC | yes | 0.4 | 0 | 0.00 | n/a | n/a | 174.1 |
| EX_179 | Ending Theme (Balance is Restored) | CREDITS_TRIUMPH | yes | 0.6 | 0 | 0.00 | n/a | n/a | 1295.0 |
| EX_180 | Dreams Dreams | CREDITS_TRIUMPH | yes | 0.6 | 0 | 0.00 | n/a | n/a | 149.1 |
The transformed column counts every kind of change. The pitch or time column counts only transposition and time-scaling — the two axes that come out of a discrete search, are recovered exactly on the controls, and involve no threshold judgement at all. Where the two columns disagree, the difference is carried entirely by register and colour, which are continuous and are the softest thing this instrument does.
The question was asked without assuming the answer.
| metric | within-album AUC | ρ vs duration | hits above own-album median | binomial p | clears instrument bar | clears joint bar |
|---|---|---|---|---|---|---|
mean_return_similarity | 0.325 | -0.18 | 6/17 | 0.3323 | no | no |
max_return_gap_s | 0.633 | 0.56 | 17/27 | 0.2478 | no | no |
timescaled_share | 0.623 | 0.01 | 10/17 | 0.6291 | no | no |
contour_return_rate | 0.385 | -0.23 | 4/16 | 0.0768 | no | no |
structural_transformation_share | 0.603 | 0.02 | 9/17 | 1.0000 | no | no |
transformation_share | 0.566 | -0.03 | 9/17 | 1.0000 | no | no |
time_to_hook_s | 0.443 | 0.03 | 11/27 | 0.4421 | no | no |
transposed_share | 0.444 | 0.22 | 1/17 | 0.0003 | no | no |
hook_strength | 0.448 | -0.11 | 7/27 | 0.0192 | no | no |
max_return_gap_frac | 0.542 | -0.20 | 14/27 | 1.0000 | no | no |
interval_return_rate | 0.479 | -0.17 | 4/16 | 0.0768 | no | no |
distinct_transpositions | 0.488 | 0.14 | 2/17 | 0.0023 | no | no |
n_returns | 0.510 | 0.27 | 13/27 | 1.0000 | no | no |
returns_per_min | 0.500 | 0.07 | 14/27 | 1.0000 | no | no |
Two bars, both re-derived on this pool with permutation_null_best. The INSTRUMENT bar prices only this instrument's 14 metrics, which is the pre-registered reading. The JOINT bar prices those metrics alongside the 110 card axes they would join, which is the harsher and more honest question: does this instrument beat everything already measured. A metric clearing the first and not the second has not earned a place in the standard.
Do not read the binomial column as a finding where the AUC is flat. transposed_share, distinct_transpositions carry small binomial p-values beside deviations far under the bar, and the cause is ties rather than signal: these are share metrics on which most tracks, corpus rows and siblings alike, sit at exactly zero. A tie counts as half a win in the AUC and as a failure to beat the median in the binomial, so the two statistics disagree by construction on a zero-inflated axis. The AUC is the priced statistic and it is the one to believe.
The duration column is not decoration. PATTERN_FINDINGS_V2 section 5 established that the whole top of the card's ranking is structural scale, and a raw count of returns inherits that confound directly — which is why returns_per_min is reported beside n_returns and is the one to read.
Two names need reading correctly. mean_return_similarity is a match LIFT, not a raw cosine: it is how far a return stands above the background match level of its own track, as a fraction of the distance to a perfect match, and it is scaled that way because a raw chroma cosine has a floor set by the track's key. structural_transformation_share counts only transposition and time-scaling, the two threshold-free axes.
| kind | returns across the loved tracks | returns across the sampled siblings |
|---|---|---|
| augmented | 9 | 25 |
| diminished | 49 | 76 |
| literal | 21 | 98 |
| re_registered | 22 | 60 |
| re_timbred | 49 | 142 |
| transposed | 11 | 52 |
A kind is counted once per return and a return may carry more than one, so the columns sum above the return count. literal is exclusive by construction: it is what a return is called when no transformation is positively detected.
Across the loved tracks the median REGISTER difference between the hook window and an arbitrary window of the same track is 0.21 octaves, and the median COLOUR distance is 0.75 of that track's own timbral standard deviations. Both sit above the cuts the planted controls calibrated (0.5 octaves and 0.45 sigma), which is to say a real orchestral recording drifts in colour, from one moment to the next, by more than a synthetic re-orchestration does. That is why the cuts are not anchored to this background — an arbitrary window holds different material, so it is the wrong thing to compare a restatement against — and it is also why the register and colour columns of the census should be read as the weak half of it.
The first full run produced a number that could not be true: nine of the loved tracks came back with no detectable return of their opening motif, and two of the nine were *Corridors of Time* and *Schala's Theme*, pieces built on restating one idea until it is unforgettable. A reading like that is a claim about the instrument, not the music, and the way to tell them apart is to move the one number the reading depends on.
| track | duration (s) | λ = 0.1 | λ = 0.15 | λ = 0.2 | λ = 0.3 | λ = 0.42 |
|---|---|---|---|---|---|---|
| EX_179 zero-return | 1296 | 86 | 44 | 27 | 4 | 0 |
| EX_082 zero-return | 346 | 27 | 21 | 13 | 2 | 0 |
| EX_145 zero-return | 269 | 3 | 2 | 1 | 0 | 0 |
| EX_064 zero-return | 248 | 11 | 10 | 9 | 3 | 0 |
| EX_075 most-returns | 1060 | 60 | 54 | 48 | 38 | 23 |
| EX_032 most-returns | 233 | 35 | 32 | 30 | 23 | 16 |
| SLICE_T1_EXPLORATION_FLORES_a_41033 candidate | 214 | 20 | 18 | 15 | 12 | 10 |
| SLICE_T1_EXPLORATION_FLORES_a_41022 candidate | 214 | 18 | 17 | 13 | 10 | 8 |
| SLICE_T3_TITLE_PROTAGONIST_a_43033 candidate | 232 | 12 | 11 | 10 | 8 | 8 |
Selection rule: the four zero-return corpus rows with the longest durations, the two corpus rows with the most returns, and the three candidates with the most -- chosen by rule so the table cannot be a hand-picked one. The shipped threshold is λ = 0.42, the value the planted controls calibrated.
Read the two things this says, because they point in opposite directions.
The first is a defect and it is mine. The return threshold was calibrated on synthetic controls whose background is contrasting material, where a restatement stands far above everything around it. A real recording holds one key, one ensemble and one texture for minutes at a time, so its background match level is already high and a genuine restatement clears it by much less. Carried across unchanged, EX_179 reads as having no returns at λ = 0.42 and 86 at λ = 0.1. The absolute return counts in this document are not trustworthy on real recordings, and n_returns, returns_per_min and the derived floor inherit that. The fix belongs to the next version and it is not a smaller number chosen after seeing the answer: it is a threshold calibrated against real recordings whose restatement structure is known independently.
The second is the reason the finding survives anyway. Loosening the threshold lifts the rejected candidates at least as much as it lifts the loved tracks — SLICE_T1_EXPLORATION_FLORES_a_41033 already carries 10 returns at the shipped threshold, more than any of the zero-return corpus rows reach until λ = 0.1 — so at no setting tested does the ordering reverse. The separation null in section 4 is a property of the corpus, not of the cut.
passes_floor is therefore reported but should not be believed until the threshold is recalibrated.Round 1 was generated from text with no melodic control of any kind, so the prior is a weak or absent hook. The prior was checked rather than assumed.
| candidate | hook | returns | per min | transformed | pitch or time | strength | passes floor |
|---|---|---|---|---|---|---|---|
| SLICE_T1_EXPLORATION_FLORES_a_41033 | yes | 10 | 2.80 | 60% | 50% | 0.568 | yes |
| SLICE_T1_EXPLORATION_FLORES_a_41022 | yes | 8 | 2.24 | 100% | 100% | 0.605 | yes |
| SLICE_T1_EXPLORATION_FLORES_a_41011 | yes | 5 | 1.40 | 100% | 20% | 0.775 | no |
| SLICE_T1_EXPLORATION_FLORES_a_41044 | yes | 2 | 0.56 | 100% | 100% | 0.825 | no |
| SLICE_T2_BATTLE_CACI_b_42044 | yes | 3 | 0.89 | 67% | 33% | 0.724 | no |
| SLICE_T2_BATTLE_CACI_a_42011 | yes | 3 | 0.89 | 100% | 67% | 0.717 | no |
| SLICE_T2_BATTLE_CACI_b_42033 | yes | 5 | 1.49 | 0% | 0% | 0.814 | no |
| SLICE_T3_TITLE_PROTAGONIST_a_43011 | yes | 4 | 1.03 | 100% | 100% | 0.536 | no |
| SLICE_T3_TITLE_PROTAGONIST_a_43022 | yes | 3 | 0.78 | 100% | 100% | 0.686 | no |
| SLICE_T3_TITLE_PROTAGONIST_a_43033 | yes | 8 | 2.07 | 88% | 75% | 0.650 | yes |
| SLICE_T3_TITLE_PROTAGONIST_b_43033 | yes | 7 | 1.81 | 100% | 86% | 0.519 | yes |
| SLICE_T4_MELANCHOLIC_HOME_AND_LOSS_a_44033 | yes | 0 | 0.00 | n/a | n/a | 0.747 | n/a |
| SLICE_T4_MELANCHOLIC_HOME_AND_LOSS_a_44022 | yes | 0 | 0.00 | n/a | n/a | 0.770 | n/a |
| SLICE_T4_MELANCHOLIC_HOME_AND_LOSS_b_44033 | yes | 3 | 0.87 | 100% | 0% | 0.817 | no |
| SLICE_T4_MELANCHOLIC_HOME_AND_LOSS_b_44011 | yes | 0 | 0.00 | n/a | n/a | 0.800 | n/a |
| SLICE_T4_MELANCHOLIC_HOME_AND_LOSS_a_44044 | yes | 2 | 0.58 | 100% | 100% | 0.800 | no |
| SLICE_T4_MELANCHOLIC_HOME_AND_LOSS_b_44022 | yes | 1 | 0.29 | 100% | 0% | 0.844 | no |
| SLICE_T4_MELANCHOLIC_HOME_AND_LOSS_a_44011 | yes | 3 | 0.87 | 100% | 100% | 0.687 | n/a |
| axis | loved-track median | candidate median | AUC, loved over candidate |
|---|---|---|---|
returns_per_min | 0.585 | 0.878 | 0.447 |
transformation_share | 0.893 | 1.000 | 0.390 |
n_returns | 1 | 3.000 | 0.388 |
hook_strength | 0.691 | 0.736 | 0.306 |
An instrument that cannot tell the rejected round from the loved tracks is not yet an instrument, so this table is the one that decides whether this file is worth keeping. Read the AUC column: 0.5 is indistinguishable and 1.0 is complete separation.
hook_strength is a composite of craft-consensus terms; the one term this corpus has already tested — singability — came back at AUC 0.455 in PATTERN_FINDINGS_V2, on the wrong side of chance. The composite is carried with that written on its face, not because it is validated.exemplar_hook_signatures.json fingerprint set through nostalgia_score.screen_candidate, and 0 were refused. That set is explicitly partial and its own file says so: CLEAR is not a clean-room certificate, only an absence of a seeded match. A planted signature is refused in the controls so the zero is not an uncontrolled one.Nothing above is admissible unless --check exits zero in the same process. The controls synthesise music with planted answers and prove recovery: literal repeats at known times, a return transposed by a known interval, a return augmented by a known ratio, a return moved an octave, a return re-coloured, a through-composed track that must yield nothing, a pure loop that must read as many returns and no transformation, malformed cards that must return unavailable rather than raise, and a dense-mix control that quantifies the honesty limit above. Three mutation arms then break the instrument on purpose — the transposition search forced to zero, the time-ratio search forced to one, the return threshold dropped to the background — and each must be caught by a named control. A suite with no mutation proof has never been armed.
_Generated 2026-08-08T00:07:15+00:00 · seed 20260807 · run time 15.1 s._