Glitch playground — core/loopPlayground + core/beatGlitcher

Section 1 proves randomSequence (node-verified in examples/node/loop-playground.mjs): seeded determinism — identical op logs for the same seed, pinned golden log for seed 42 — and a 500-step bounds fuzz with zero violations. Then it plays: a GibClock drives step execution against live LoopPlayer playback of Drive Through Beat.wav, with the moving loop overlay and a scrolling op ticker. Same seed ⇒ same choreography.

Live playground

seed loading + decoding WAV…

Section 2 — beatGlitcher: bar-synced glitch clock

A synthesized 120 BPM click buffer (sr 32768, so the 0.5 s beat is exactly 16 energy frames — the internal fast BPM detector reads 120.0) drives startBeatGlitch({maxOpsPerBar: 1}). Badges (asserts node-verified: mean 1999.6 ms, 8/8 updates, 0 post-stop): mean bar interval 2000 ± 40 ms over 8 bars, effective BPM 120 ± 2 derived from the measured interval, onUpdate fired exactly once per bar, and the stop handle silences the clock (no calls within 3 s). Runs automatically — takes ~19 s; keep this tab focused (background-tab timer throttling would corrupt the timing measurement).

beatGlitcher: waiting…