Tracked-beat corroboration: rigid grids adopt on syncopated material (Stage 10) - #39
Merged
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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_lock0.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
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:
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)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