Fit flags on precision (<0.6) and chance-corrected lift (<0.25), null with <8
recording onsets; old match rate kept as audibleRate (info). Symbolic-chroma
beat/bar-shift check per window. Constant-offset baseline (-2..+2 s) replaces
DTW without manual anchors unless DTW precision is better by >=0.02. Stretch
warning counts in the fit summary. DTW: slope-limited steps, open begin/end
options; per-bar outlier rejection (1/4 beat, Theil-Sen-transported +-3 bar
median); no anchor in the final partial bar. bench real: saved/computed
source, baseline + method, corrupt alignment.json skipped. Parabolic onset
interpolation; warp extrapolation documented; spec amended.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- server: collapse leading slashes so //host/x is never proxied off-host
or redirected cross-origin; 1 MB body limit; max 10k anchors; a corrupt
alignment.json no longer 500s /api/songs (song falls back to auto with
a warning); comments on cookie scope and the loopback inner server
- warp (ruling A6): adding/moving a manual anchor removes autos only
within 10 s (MIDI) of the new/old position, never past a manual, plus
any auto that would break audio monotonicity
- page: first anchor clamped at >= 0 s; ruler scrubbing seeks on release;
wording for the new auto-removal rule; removed-count excludes the
dragged anchor; shows server warnings
- manifest: unique tmp name for alignment.json; clear error for a
corrupt file
- resample test: speed asserted as a ratio to the direct path
Co-Authored-By: Claude Opus 5.5 <[email protected]>