Study 19 · Validation
The ChordMini port gated: perfect frame parity, and the bench's numbers become the app's by measurement
Validation, the chord reader's port
Study Overview
The Port, and What Gating It Means
Study 17's verdict was that the neural chord reader on the original mix beats everything the note path can reach on real audio. The app acted on it: version 0.236.0 reads a song's chords from its mix on the server, with the whole Study 17 pipeline rebuilt in TypeScript. The pieces that could drift are exactly the pieces that were rewritten: librosa's constant-Q transform became a baked plan of sparse kernels over a short-time Fourier transform, with a 255-tap Kaiser half-band filter standing in for the reference resampler; the network runs under a WebAssembly ONNX runtime instead of Python's; the smoothing and the per-bar vote were retyped. The app's brief asked the bench to gate the port so the bench's numbers remain the app's, and proposed the pass lines itself: frame agreement of at least 99.5 percent, and per-bar scores within one bar of Study 17. The brief promised a parity table from the app's own run and the committed file did not contain it, so every number in this study was measured fresh. The bench ran the app's code as committed, imported from a worktree pinned at the shipping commit, against the Python reference exactly as Study 10 pinned it, on the bench's own decoded audio, so the gates isolate the rewritten pieces.
Perfect Parity
Zero disagreeing frames. On all four public Badverbs mixes, 7,102 frames in total, the TypeScript pipeline's per-frame label equals the Python reference's, and the frame counts match exactly per song. The transform, the resampler, the inference and the smoothing reproduce numpy and librosa at the level that matters, the argmax. The registered prediction said at least 99.9 percent with any differences at window edges or label boundaries; the measurement left nothing to locate. On the two songs with chord truth, the app's per-bar vote reads 59 of 76 on the gated song and 53 of 86 on the exploratory one, Study 17's registered numbers to the bar rather than merely within the one-bar tolerance. The pre-registration checks had already pinned the label maps: the app's chart-symbol file is the bench's vocabulary map, 170 entries with zero differences, and the vocabulary order matches index for index.
The Two Bars of Daylight
The study's one finding beyond the passes came from an internal cross-check: the app's vote run over the reference's own frames, compared with the reference's own per-bar answer. They differ at exactly two bars of one song, and both bars are the same case, an exact five-to-five frame tie between F sharp major and F sharp minor. Numpy's argmax breaks a tie toward the lower vocabulary index and says F sharp minor; the app's vote breaks it toward the first label the bar encounters and says F sharp major. The truth at both bars is the power chord F sharp five, the grading allowance admits either reading, and the score is identical either way. Tie-break order on exact ties is the entire remaining daylight between the two implementations, and it is disclosed here rather than papered over.
What Stands
Ship stands, nothing to change. The standing rule from Study 17 rides along in the shipped code's own comments: the app never runs the AI reconciler on the model's chords, because the one measured attempt broke sixteen right bars. The chord numbers the dashboard cites for real audio, 77.6 percent on the gated song, now describe the production feature itself, not a Python harness that resembles it. Zero model calls, zero dollars, about thirty seconds of compute per song.