music/exemplars/instruments/CYCLE_LAW_VALIDATION.md
CANON SUBORDINATION — this document is PROPOSAL-TIER: it serves canon and never outranks it.
The canon: the CVD · the T1 foundation docs · the T0 registries (registries/) · the spine
(docs/spine/CH_*.md). Authority order:docs/DOC_MAP.md§ 0.
Canon served: the composition floor ruled by Josh on 2026-08-07 —
docs/spine/DECISIONS_PENDING_JOSH.md, MUSIC ROUND 1 GRADED + THE COMPOSITION FLOOR.
If this document disagrees with canon, CANON WINS and this document is the defect.
Tier: MEASURED INSTRUMENT. Every number below was produced by
harness/music_gen/instr_cycle_law.py from the formula cards and the exemplar audio already
on disk. No listening test was run by this lane. Nothing here is a judgement of quality.
Every comparative sentence in this document is generated from the measured value beside it,
so a re-run that flips a number flips the sentence with it.
Josh's floor reads: no repetitious loop runs more than three to five cycles without a new
instrument, a catch, a melody or a beat drop. Instrumented — the cycle period read off a
chroma and MFCC self-similarity lag profile, the novelty events read off the formula card,
the worst gap between them expressed in cycles — **29 of 30 tracks Josh
named as loved for decades pass their own five-cycle floor**, at a median worst span of
1.52 cycles. The law is real and the loved tracks keep it.
And as literally written it does not adjudicate anything. Their album siblings pass at
864 of 927 (93%) at a median of
1.34 cycles, which is
lower than the loved tracks' own
1.52. The within-album AUC of the headline number is
0.501 — chance. And the eighteen round-1 candidates Josh turned down pass
at 17 of 18 (94%), median
2.07 cycles.
The novelty definition was then swept across eight settings, from every threshold at zero to
structural boundaries alone, with the period held fixed so only the definition moved. The
best separation any setting achieves between the rejected round and the loved tracks is
AUC 0.622 (as shipped). No
defensible setting of this law tells Josh's rejects from his favourites.
One axis does, and it is not a cycle law. Structural yield — structural boundaries per
texture drop — separates this programme's generated output from real released music at
AUC 0.911 over all 32 round-1
candidates and 0.866 over the eighteen. Against a hit's
own album siblings it sits at 0.437, below chance,
which is the point: it is a generation-defect detector, not a taste oracle. Section 7.
A cycle is not a field on the card, so it has to be derived, and the obvious derivation is a
trap. The card's section boundaries come from checkerboard novelty over a self-similarity
matrix, which means the boundaries are novelty peaks. Deriving the cycle period from that
same grid, and then counting novelty events off the same grid, would make every gap about one
section long by construction. The ratio would be a tautology with a number on it.
So the period is measured from evidence the event detector never touches.
averaged down each diagonal, giving one number per lag: how similar, on average, the track
is to itself that far ahead. The loop period is where that curve peaks.
full of bar-level and beat-level periodicity, which is real but is not what the ruling is
about. The ceiling is a third of the track, because a period longer than that cannot repeat
enough times for "more than five cycles" to mean anything.
eight, sixteen, twenty-four and thirty seconds with nearly equal strength, and which one the
argmax lands on is an accident of how the later repeats decay. The estimator takes the
shortest peak that divides the tallest one to within the profile's own resolution and still
holds most of its strength. A descent that only knows how to halve cannot get from thirty
back to six, which is why the rule is stated as division rather than as a divisor list.
When a shorter reading nearly wins but does not, the record names it anyway. The card's own
octave_ambiguity_note documents this failure class for tempo and the lesson transfers.
the modal section repeat lag. It is circular, and it is measured to disagree: against the
audio reference it lands within a factor of 1.41 on 31%
of 1119 tracks and is a clean octave out on
14%. The independent per-bar complexity
autocorrelation agrees within 1.41 on 31% of
823. Neither is good enough to be the reference; both are reported on every
record so a reader can see the spread rather than take the headline on trust.
Josh named four kinds. Each maps onto something the card measures. Each mapping is declared
with its slack, because a mapping presented without its slack is a claim the evidence does not
carry.
says on its own face that this is a proxy: its method is spectral_band_proxy and its note
reads that two instruments in one octave read as one lane and one instrument spanning two
octaves reads as two. A band entry is evidence that energy arrived in a register. It is
not evidence that a shakuhachi came in. Naming instruments needs source-separated stems, and
no card on disk carries them.
of sub-decibel dips that are the mix breathing.
or a step in the per-bar complexity index. All three are structural evidence that the
material changed. None of them proves a tune arrived — a key change and a new drum pattern
look alike from here.
a forty-beat "adjustment" is as likely a beat-tracker octave flip as composed rubato, so
every record also reports the worst span computed with tempo events removed.
Events inside a short window collapse into one moment: a drop, a band entry and a section
boundary at the same instant is one thing happening, and counting it three times would turn
the novelty rate into a measure of how many detectors happened to agree.
A drop removes something. It introduces nothing. The round-1 candidates drop
14.13 times a minute against the loved tracks'
5.56, which is a drop every
4.2 seconds — so if a drop
counts as novelty, a track that chops its own texture continuously can never fail a cycle law,
and the instrument is being satisfied by the very defect it should catch. The strict
reading therefore counts only the kinds that ADD: a band arriving, a raise adding lanes, and
the three structural kinds. It is reported beside the default everywhere below.
A cheap novelty event and a real one are separated by explicit numbers, not by hidden
constants. Each default sits near the corpus median of its own quantity, so roughly half the
raw candidates survive and the survivors are the ones a listener would notice.
| quantity | corpus p25 | corpus median | corpus p75 | threshold | share surviving |
|---|---|---|---|---|---|
complexity_step (n=6997) | 0.183 | 0.233 | 0.331 | 0.2 | 65% |
drop_db (n=13470) | 2.07 | 4.36 | 6.24 | 3.0 | 64% |
lane_segment_s (n=126978) | 0.812 | 1.486 | 3.599 | 1.5 | 50% |
novelty_peak (n=10707) | 0.4247 | 0.6202 | 0.8496 | 0.6 | 52% |
raise_lanes_added (n=10947) | 1.51 | 1.56 | 1.96 | 1.5 | 81% |
tempo_delta_bpm (n=10577) | 24.58 | 39.5 | 59.25 | 25.0 | 74% |
Sorted worst first. cycles is the track's length in cycles; a track shorter than five cycles
cannot violate a five-cycle law, and those rows are marked — their pass is arithmetic, not
evidence. strict is the worst span when drops and tempo events do not count.
| id | title | period s | cycles | moments | worst span | worst, cycles | strict | where | escalation | floor |
|---|---|---|---|---|---|---|---|---|---|---|
| EX_179 | Ending Theme (Balance is Restored) | 7.71 | 168.1 | 172 | 55.3 s | 7.17 | 11.70 | 950–1005 s | falling | FAIL |
| EX_064 | Ludwig, the Holy Blade | 7.71 | 32.2 | 39 | 35.3 s | 4.58 | 9.64 | 190–225 s | falling | PASS |
| EX_033 | Corridors of Time | 8.64? | 21.3 | 15 | 38.5 s | 4.46 | 9.11 | 43–81 s | flat | PASS |
| EX_046 | BFG Division | 9.29 | 54.6 | 60 | 40.9 s | 4.40 | 10.79 | 195–236 s | flat | PASS |
| EX_147 | Fighting of the Spirit | 10.59? | 17.8 | 12 | 45.5 s | 4.30 | 8.03 | 91–137 s | falling | PASS |
| EX_055 | The Cyber Grind | 10.12 | 26.7 | 20 | 39.8 s | 3.93 | 18.48 | 156–196 s | flat | PASS |
| EX_075 | Dancing Mad | 8.36 | 126.8 | 146 | 31.1 s | 3.72 | 8.14 | 877–908 s | flat | PASS |
| EX_018 | Subwoofer Lullaby | 8.08 | 25.8 | 42 | 26.1 s | 3.23 | 3.32 | 0–26 s | rising | PASS |
| EX_161 | Aria di Mezzo Carattere | 25.54 | 9.3 | 16 | 76.6 s | 3.00 | 3.00 | 137–214 s | falling | PASS |
| EX_145 | Go Straight | 11.24 | 23.9 | 36 | 29.7 s | 2.64 | 5.45 | 150–180 s | flat | PASS |
| EX_030 | Route 209 | 5.94 | 13.8 | 16 | 15.2 s | 2.56 | 4.66 | 24–39 s | falling | PASS |
| EX_053 | Cynthia Battle Theme | 10.31 | 8.9 | 14 | 24.7 s | 2.39 | 3.46 | 46–70 s | flat | PASS |
| EX_136 | Humming the Bassline | 18.30 | 14.1 | 37 | 32.0 s | 1.75 | 4.44 | 199–231 s | falling | PASS |
| EX_032 | Terra's Theme | 23.96 | 9.7 | 22 | 41.9 s | 1.75 | 1.75 | 49–91 s | rising | PASS |
| EX_088 | An Unwavering Heart | 10.96 | 9.8 | 30 | 16.6 s | 1.52 | 1.62 | 22–39 s | falling | PASS |
| EX_082 | The Best Is Yet to Come | 14.95? | 23.1 | 44 | 21.6 s | 1.44 | 4.25 | 258–279 s | falling | PASS |
| EX_124 | Deus Ex Main Title (UNATCO) | 11.52 | 11.1 | 22 | 15.0 s | 1.30 | 1.48 | 11–26 s | flat | PASS |
| EX_017 | Sweden | 10.87 | 19.8 | 48 | 11.8 s | 1.09 | 3.69 | 0–12 s | flat | PASS |
| EX_092 | Snake Eater (Ladder Climb) | 10.68 | 16.7 | 35 | 11.1 s | 1.04 | 2.41 | 147–159 s | falling | PASS |
| EX_180 | Dreams Dreams | 19.23 | 7.8 | 19 | 19.6 s | 1.02 | 1.16 | 120–140 s | flat | PASS |
| EX_102 | Magus Castle | 7.24 | 3.9 ‡ | 9 | 6.8 s | 0.94 | 1.44 | 15–22 s | rising | PASS |
| EX_110 | Want You Gone | 40.77 | 3.5 ‡ | 12 | 38.0 s | 0.93 | 0.84 | 94–132 s | falling | PASS |
| EX_022 | Wind Scene | 12.63 | 16.2 | 32 | 11.5 s | 0.91 | 2.06 | 2–13 s | rising | PASS |
| EX_094 | Dark Creature Pursuit | 17.74 | 6.5 | 21 | 13.5 s | 0.76 | 1.54 | 64–77 s | flat | PASS |
| EX_014 | Tekken 2 Attract Movie: Sound Track | 14.30 | 1.5 ‡ | 5 | 10.9 s | 0.76 | 0.75 | 0–11 s | rising | PASS |
| EX_162 | Schala's Theme | 23.68 | 7.4 | 18 | 14.6 s | 0.62 | 2.50 | 122–137 s | flat | PASS |
| EX_113 | To Good Friends | 21.36 | 6.6 | 23 | 10.9 s | 0.51 | 2.00 | 109–120 s | falling | PASS |
| EX_007 | Frog's Theme | 23.22 | 3.6 ‡ | 13 | 11.6 s | 0.50 | 0.50 | 43–55 s | flat | PASS |
| EX_006 | Chrono Trigger Main Theme | 29.81? | 5.1 | 21 | 13.8 s | 0.46 | 0.75 | 5–19 s | flat | PASS |
| EX_142 | Shinshu Field | 44.30? | 4.6 ‡ | 19 | 20.1 s | 0.45 | 1.00 | 150–170 s | flat | PASS |
‡ fewer than five cycles long — the law cannot bind. A ? on the period marks a resolved or
declared period ambiguity; the alternative reading is on the record in the JSON.
**29 of 30 pass the five-cycle floor; 22 of
30 pass the three-cycle target. On the strict reading, 22
of 30 and 16 of
30.**
55 s from 950 s
to 1005 s, at a 7.71 s cycle, which is
7.17 cycles unchanged. The track runs
168 cycles in total.
Clearing the floor but missing the enhanced three-cycle target: Subwoofer Lullaby (3.23), Corridors of Time (4.46), BFG Division (4.40), The Cyber Grind (3.93), Ludwig, the Holy Blade (4.58), Dancing Mad (3.72), Fighting of the Spirit (4.30), Aria di Mezzo Carattere (3.00).
| pool | n | median worst-span cycles | p90 | max | pass floor | pass target |
|---|---|---|---|---|---|---|
| the tracks Josh named | 30 | 1.52 | 4.46 | 7.17 | 29/30 | 22/30 |
| their album siblings | 927 | 1.34 | 4.14 | 22.95 | 864/927 | 736/927 |
| measured, no hit on the album | 223 | 1.25 | 4.95 | 13.42 | 202/223 | 180/223 |
| the eighteen Josh turned down | 18 | 2.07 | 4.38 | 5.38 | 17/18 | 12/18 |
The same four pools on the strict reading, where only events that ADD count:
| pool, strict | n | median | p90 | pass floor | pass target |
|---|---|---|---|---|---|
| the tracks Josh named | 30 | 3.00 | 10.79 | 22/30 | 16/30 |
| their album siblings | 927 | 1.96 | 7.29 | 762/927 | 603/927 |
| the eighteen Josh turned down | 18 | 4.90 | 6.65 | 11/18 | 5/18 |
The strict reading moves the rejected round in the expected direction — its floor pass rate
falls from 94% to 61% while the
loved tracks fall from 97% to 73% —
and its median worst span is higher than the loved
tracks' (4.90 against 3.00). The direction is right.
The overlap is still large, which section 6 quantifies.
The five-cycle law cannot bind on a track shorter than five cycles, and the sibling pool
carries a great many jingles and stingers. So the comparison is run again with both sides
restricted to tracks at least five cycles long, which is the pool where the law has teeth:
| pool, five cycles or longer | n | median | pass floor | pass target |
|---|---|---|---|---|
| the tracks Josh named | 25 | 1.75 | 24/25 | 17/25 |
| their album siblings | 579 | 2.15 | 516/579 | 388/579 |
Separation, scored the way this programme scores everything — each corpus row against the
tracks that shipped on its own record, composer and session and codec held constant. Three
readings: the full pool, the five-cycle-or-longer pool, and a duration-matched pool that
admits only siblings within 35% of a hit's own length, because duration is this corpus's
standing confound.
| axis | AUC, full | AUC, ≥5 cycles | AUC, length-matched | hits above own-album median | binomial p |
|---|---|---|---|---|---|
max_cycles_unchanged | 0.501 | 0.462 | 0.449 | 13/28 | 0.8506 |
max_cycles_unchanged_strict | 0.564 | 0.528 | 0.512 | 17/28 | 0.3449 |
novelty_moments_per_cycle | 0.555 | 0.589 | 0.585 | 16/28 | 0.5716 |
median_cycles_between_novelty | 0.470 | 0.449 | 0.447 | 11/28 | 0.3449 |
escalation_ratio | 0.458 | 0.422 | 0.402 | 13/28 | 0.8506 |
structural_novelty_share | 0.395 | 0.383 | 0.421 | 10/28 | 0.1849 |
structural_yield | 0.495 | 0.484 | 0.480 | 11/28 | 0.3449 |
An AUC of 0.5 is chance. Nothing in this table is a discovered separator and nothing here is
claimed as one; multiplicity was not priced because there is no effect to price.
The obvious objection to section 5 is that the thresholds were set wrong. So they were swept.
The period is held at whatever the audio said for each track; only the event definition moves.
AUC 18/hits is the probability that a random rejected candidate carries a WORSE worst span
than a random loved track — 0.5 is chance, and a setting that could adjudicate Josh's floor
would have to sit well above it.
| novelty definition | hit median | the 18 median | sibling median | hits pass | 18 pass | AUC 18/hits |
|---|---|---|---|---|---|---|
| as shipped | 1.48 | 2.04 | 1.34 | 29/30 | 17/18 | 0.622 |
| drops must be 6 dB | 1.57 | 2.10 | 1.35 | 29/30 | 17/18 | 0.622 |
| drops must be 9 dB | 1.62 | 2.26 | 1.39 | 29/30 | 17/18 | 0.615 |
| drops must be 12 dB | 1.62 | 2.26 | 1.39 | 29/30 | 17/18 | 0.615 |
| no drops, no tempo (STRICT) | 2.75 | 4.65 | 1.96 | 22/30 | 11/18 | 0.607 |
| structural kinds only | 5.00 | 6.51 | 2.33 | 15/30 | 6/18 | 0.620 |
| band entries only | 4.85 | 6.46 | 3.94 | 15/30 | 5/18 | 0.539 |
| every threshold at zero | 0.45 | 0.57 | 0.55 | 30/30 | 18/18 | 0.539 |
The best any setting reaches is 0.622
(as shipped), and the spread across all 8 settings is narrow.
Loosening the definition to nothing makes every track pass; tightening it to structural
boundaries alone makes half the loved tracks fail. Neither end separates the pools.
**The honest verdict: the 3-5-cycle law, instrumented literally, cannot adjudicate the round
Josh rejected.** Two explanations are available and they are not equally likely.
cannot see. But the controls recover planted spacings of one, two and eight cycles, planted
loop periods are recovered from audio, and five mutations of the module are each caught by
a named control. It is measuring *a* real thing.
Josh's sentence names a failure mode — a loop that grinds on unchanged — and that failure
mode is rare in released game music and was rare in round 1. He wrote it as one clause of a
longer ruling whose other clauses are about density and craft: dozens of layers, hooks and
complexities, no stacked noise. Those are different measurements. Section 7 is one of them.
The operational consequence, stated plainly so it is not lost: **keep this as a gate, never
use it as a grade.** A round-2 track that fails it is genuinely broken and should not reach
the queue. A round-2 track that passes it has demonstrated nothing about whether it is good,
because 17 of the 18 tracks Josh rejected pass it too.
Structural yield is the count of structural boundaries divided by the count of texture drops:
structural change produced per unit of chopping. It was derived in the repetition-form
research lane and is reproduced here on its own definition, over tracks of 45 seconds or more.
| pool | n | p10 | median | p90 |
|---|---|---|---|---|
| the tracks Josh named | 28 | 0.29 | 0.79 | 2.33 |
| their album siblings | 714 | 0.34 | 1.00 | 3.00 |
| all round-1 candidates | 32 | 0.07 | 0.22 | 0.45 |
| the eighteen Josh turned down | 18 | 0.14 | 0.36 | 0.61 |
| comparison | AUC |
|---|---|
| loved tracks against all round-1 candidates | 0.911 |
| loved tracks against the eighteen | 0.866 |
| loved tracks against their own album siblings | 0.437 |
Read the third row before the first two. At
0.437 against siblings this axis cannot tell a beloved
track from competent filler on the same album, and it must never be reported as if it could.
What it does, at
0.911, is separate this programme's generated output
from real released music of any quality. That is a generation-defect detector, and at this
rung it is exactly the instrument the factory needs.
The underlying rates say what the defect is:
| pool | boundaries/min | drops/min | lane-adding raises/min |
|---|---|---|---|
| the tracks Josh named (n=28) | 5.29 | 5.56 | 5.00 |
| their album siblings (n=716) | 5.64 | 4.78 | 3.02 |
| all round-1 candidates (n=32) | 2.88 | 14.13 | 8.69 |
Round 1 carries
fewer structural
boundaries per minute than the loved tracks (2.88 against
5.29) while dropping the texture
2.5 times as often
(14.13 against 5.56) and firing lane-adding
raises 1.7
times as often (8.69 against
5.00). The texture is in constant flux and almost nothing
new ever arrives. That is motion without change, and it is a better description of what
Josh heard than anything a cycle count found.
It also explains section 6's negative result, and the explanation is not a rescue: at
14.13 drops a minute a drop lands every
4.2 seconds, so a novelty definition that counts
drops can never fail these tracks. The cycle law was being satisfied by the very defect it
should have caught.
One loved track fails its own law and is worth its own paragraph.
Ending Theme (Balance is Restored) carries a 55-second span with nothing new in
it, 7.17 cycles at its own period, across a
168-cycle track, so this is not a short-track artefact. Two readings
survive scrutiny. The first: a long-form ending suite is not the thing the ruling is
about — Josh wrote it about a loop, a cue a player hears hundreds of times, and an
ending suite is heard once. The second: the instrument cannot hear the kind of novelty
that stretch contains, because a melody moving over a held texture at constant band
energy is invisible to a lane map and to a drop map alike. Both point the same way — the
law is a loop law and should bite hardest where a cue loops.
What the factory should take from this document, in order:
On the strict reading 11 of 18 of the rejected round pass against
22 of 30 of the loved tracks, which is the right direction even
though it is not a separator on its own.
Round 1 passed it.
from released music, at AUC 0.911. The loved tracks'
p10 is 0.29 and the rejected round's p90 is
0.45, so a floor anywhere between them separates the pools
cleanly. It says nothing about quality and must be labelled that way wherever it is used.
texture drops, fewer lane-adding raises per minute than round 1 fired.
an octave up over a new drum pattern". Both read as novelty. Josh's word *catch* is the
hardest of his four to measure and this instrument approximates it with structural change.
"A new instrument entered" is never claimed here; "energy arrived in a register that had
been empty" is.
every four bars scores exactly like a countermelody. This was tested rather than assumed:
structural_novelty_share — the fraction of novelty moments landing on a structural
boundary rather than on a drop or a band coming and going — sits at
0.395 against
siblings, chance. Structural yield in section 7 is the measure that does catch the churn,
and it is a ratio of card-level counts rather than anything this instrument's own timeline
produced. A track can pass every cycle number in this document and still be stacked noise.
a countermelody entering inside an already-active band, an articulation change — all
invisible. This is the blind spot that most likely explains the loved track that fails.
ambiguity is declared per track rather than papered over, and a period estimate twice too
long makes a track pass for the wrong reason. Read n_cycles beside every verdict.
Nothing above counts unless the instrument first recovered answers that were put there.
Two layers, because the two halves fail independently: the period estimator reads audio, so
its controls are synthesised loops with a planted period; the gap arithmetic reads a card, so
its controls are synthesised cards with a planted novelty spacing.
| control | result | detail |
|---|---|---|
| C1 planted 8 s loop period is recovered from audio | PASS | got=7.99 planted=8.0 |
| C2 planted 12 s loop period is recovered from audio | PASS | got=11.98 planted=12.0 |
| C3a PERIOD-DOUBLING TRAP (exact tile): the descent returns the fundamental, not a multiple | PASS | planted=6.0 got=6.04 tallest_lag=30.0 descended=True |
| C3b PERIOD-DOUBLING TRAP (variation between passes): the true period is recovered, or the ambiguity is DECLARED and the alternative named | PASS | planted=6.0 got=11.98 ambiguous=True subharmonic_candidate=6.0372 |
| C4 novelty planted every 2 cycles reads back as 2 | PASS | max_cycles_unchanged=2.0 period=10.0 events=19 reason='' |
| C5 novelty planted every 8 cycles reads back as 8 | PASS | max_cycles_unchanged=8.0 period=10.0 events=4 reason='' |
| C6 an 8-cycle gap FAILS the five-cycle floor and the three-cycle target | PASS | passes_floor=False passes_target=False |
| C7 novelty planted every 1 cycles reads back as 1 | PASS | max_cycles_unchanged=1.0 period=10.0 events=39 reason='' |
| C8 a 1-cycle gap PASSES both floor and target | PASS | max=1.0 floor=True target=True |
| C9 a track with NO novelty at all reads as one unchanged span the length of the track | PASS | available=True reason='' max_cycles=20.0 n_events=0 span=200.0s of 200.0s |
| C10 a 0.5 dB dip is not a beat drop and a 0.2 s band flicker is not a new instrument | PASS | n_events=0 max_cycles=20.0 reason='' |
| C11 ANTI-VACUITY: the same spacing with real 8 dB drops IS detected | PASS | n_events=19 max_cycles=1.0 reason='' |
| C12 escalation separates a track that builds from one that front-loads | PASS | rising_case=rising falling_case=falling |
| C13 a degenerate card (empty dict) returns available=False and does not raise | PASS | reason="card has no 'card' block" |
| C14 a degenerate card (card with no blocks) returns available=False and does not raise | PASS | reason='no positive total_length_s on the card' |
| C15 a degenerate card (zero sections, zero length, empty repeat_map) returns available=False and does not raise | PASS | reason='no positive total_length_s on the card' |
| C16 a card with wrong types in every numeric field still returns a record | PASS | available=False reason="unhandled ValueError: could not convert string to float: 'x'" |
A control that has never been seen to fire is decoration. Each row below breaks one real
decision inside the module and names the control that caught it.
| mutation | what it breaks | caught | by |
|---|---|---|---|
drop_threshold_removed | THRESHOLDS['min_drop_db'] -> 0.0 (every mix breath becomes a beat drop) | YES | C10 a 0.5 dB dip is not a beat drop and a 0.2 s band flicker is not a new instrument |
lane_flicker_threshold_removed | THRESHOLDS['min_lane_segment_s'] -> 0.0 (a 200 ms flicker becomes an arrival) | YES | C10 a 0.5 dB dip is not a beat drop and a 0.2 s band flicker is not a new instrument |
period_estimator_doubled | period_from_card returns 2x the true period | YES | C4 novelty planted every 2 cycles reads back as 2; C5 novelty planted every 8 cycles reads back as 8; C6 an 8-cycle gap FAILS the five-cycle floor and the three-cycle target… |
boundary_gaps_dropped | _gaps() ignores the lead-in and the run-out | YES | C9 a track with NO novelty at all reads as one unchanged span the length of the track; C10 a 0.5 dB dip is not a beat drop and a 0.2 s band flicker is not a new instrument |
merge_window_unbounded | THRESHOLDS['merge_cycles'] -> 50 (every event collapses into one moment) | YES | C4 novelty planted every 2 cycles reads back as 2; C5 novelty planted every 8 cycles reads back as 8; C7 novelty planted every 1 cycles reads back as 1… |
harness/music_gen/instr_cycle_law.py, cycle_law v1.927 within-album siblings, 223 measured cards
on albums with no corpus row.
PATTERN_FINDINGS_V2.md. The pool grew: EX_014's quarantine was cleared on the corpus's own
evidence and EX_094 attached. Nothing was reclassified by this lane.
verdicts.json records as KEEP,which is what the review queue published and what Josh graded.
docs/proposals/music/craft_research/REPETITION_AND_VARIATION_FORM.md § 1 on that lane's
own definition and filter.
harness/music_gen/derive_patterns.py: load_cards, flatten, load_corpus, label_rows, within_album_auc, auc, matched_ctrl,
percentile_of, binom_tail.
build/audio/exemplars/instruments/CYCLE_LAW_VALIDATION.json.