xa-bpm-algorithm — windowed tempo-stability map: does it track a 100→140 BPM jump?

8s of 100 BPM clicks + 8s of 140 BPM clicks run through bpm.analyzeWithProgress(y, sr, 4, 1). Repairs proven here (2026-07-02): the constrained per-window estimator used to reduce each 4s window to ~15 energy points while its BPM search needed lags ≥ ~17, so the loop never executed and every window silently echoed the global tempo; it now autocorrelates the raw onset envelope. The global estimator's 70–180 hard cap also picked the 69.8 subharmonic on this material; an octave correction now prefers the double when it carries ≥70% of the correlation. Proofs (node-verified): windows fully inside each region average within 8 BPM of 100 / 140 (measured 99.4 / 143.6), the tracked jump exceeds 25 BPM, the Fourier-tempogram top-3 peaks include ~100.9 and ~141.3, and every window confidence is measured in (0, 0.95]. NOTE: the plan's original "mean(t<7s)" criterion is replaced by the stronger fully-inside-region criterion — the window starting at 6.99s legitimately straddles the tempo boundary.