Skip to content

Tracked-beat corroboration: rigid grids adopt on syncopated material (Stage 10) - #39

Merged
robmorgan merged 1 commit into
mainfrom
feat/rigid-grid-offbeat-disambiguation
Aug 6, 2026
Merged

Tracked-beat corroboration: rigid grids adopt on syncopated material (Stage 10)#39
robmorgan merged 1 commit into
mainfrom
feat/rigid-grid-offbeat-disambiguation

Conversation

@robmorgan

Copy link
Copy Markdown
Owner

Fixes the rigid-grid non-adopter class (ROADMAP Stage 10) — the misaligned beat markers first observed on Hot Stuff in the desktop app.

Problem

MSBWY, Hot Stuff, and Somebody To Love fit exact BPMs but sat at phase_lock 0.109–0.181 against the 0.3 adoption gate, shipping wandering DP grids (intervals 475–569 ms on constant-tempo tracks). Rival-phase landscape mapping showed why: swung bassline energy under 150 Hz scores competing phases at scattered subdivision offsets (Hot Stuff peaks at 6–10/32 period, MSBWY at 25/32).

Both roadmap candidates prototyped first — and failed

  • Slot exclusion (anti-phase ± tolerance): rivals aren't at one excludable slot; stacking zones until specific tracks pass is threshold-lowering in disguise. Only helped cold_heart (already an adopter).
  • Onset-sharpness weighting (squared envelope): helped two tracks, made Hot Stuff worse (0.109 → 0.072) — disco bass is as punchy as the kick inside the kick band.

Both negative results are recorded in LEARNINGS.md.

What landed: corroboration by an independent estimator

A below-threshold fit adopts when ≥ 60% of the DP tracker's beats — full-band novelty + dynamic programming, independent of the kick-band phase circle — land on the rigid grid within 25 ms. Measured populations:

Case phase_lock agreement @25 ms outcome
msbwy 0.112 0.98 adopts
hot_stuff 0.109 0.90 adopts
somebody 0.181 0.28 stays out (genuine estimator disagreement)
tempo-ramp control 0.77 (!) 0.25 correctly rejected
jittered-kicks control 0.99 0.61 adopts (via lock, as before)

The clusters sit at ≤ 0.28 and ≥ 0.90; the 0.6 threshold splits the gap with margin on both sides. The 0.3 lock gate and the smeared sanity floor are untouched.

Corpus results (qa/bpm_accuracy, vs saved baseline)

Track beat F mean offset downbeat F
msbwy 0.952 → 1.000 −5.3 → −0.6 ms 0.0 → 1.0
hot_stuff 0.934 → 1.000 −9.8 → +0.1 ms 0.94 → 1.0
33rd Rate Revs X 1.0 → 1.0 −4.1 → −0.1 ms 0.0 → 1.0

13/16 rows byte-identical; zero regressions.

Tests

New unit fixtures: a syncopated train (kick + beater click + swung low-band stabs) that deflates the lock, adopts via corroboration, and lands the phase on the kicks; and a drifting-tracker control sweeping a full period that must not adopt. Existing ramp/jitter/degenerate tests unchanged and green.

PREANALYSIS_VERSION/MIN_COMPATIBLE_VERSION → 9/9 per the CLAUDE.md analysis version policy (beat positions change on the corroborated class; cached sidecars regenerate once).

🤖 Generated with Claude Code

…erial

ROADMAP Stage 10: the three rigid-grid non-adopters (MSBWY, Hot Stuff,
Somebody To Love) sat at phase_lock 0.109-0.181 against the 0.3 gate
because swung bassline energy under 150 Hz scores rival phases at
scattered subdivision offsets. Both roadmap disambiguation candidates
were prototyped first and failed: slot exclusion (rivals are not at one
excludable slot) and onset-sharpness weighting (made Hot Stuff worse -
disco bass is as punchy as the kick).

What landed: a below-threshold fit adopts when >= 60% of the DP
tracker's beats - an INDEPENDENT estimator - land on the rigid grid
within 25 ms. The measured populations cluster at <= 0.28 (tempo-ramp
control, which phase_lock alone would wrongly trust at 0.77; Somebody's
genuine estimator disagreement) and >= 0.90 (corroborated); 0.6 splits
the gap. The 0.3 gate and smeared sanity floor are untouched.

Corpus: MSBWY and Hot Stuff adopt (beat F 0.95/0.93 -> 1.00, downbeat F
-> 1.0, sub-ms offsets); 33rd Rate Revs X downbeat F 0 -> 1.0; 13/16
harness rows byte-identical, zero regressions. New unit tests: a
syncopated fixture (kick + beater click + swung bass stabs) that adopts
via corroboration with the phase on the kicks, and a drifting-tracker
control that must not. PREANALYSIS_VERSION/MIN_COMPATIBLE -> 9/9 per
the CLAUDE.md analysis version policy (beat positions change on the
corroborated class).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@robmorgan
robmorgan merged commit ffb949e into main Aug 6, 2026
10 checks passed
@robmorgan
robmorgan deleted the feat/rigid-grid-offbeat-disambiguation branch August 6, 2026 23:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant