Correctness (four were my own regressions from the REVELATION wave):
· ☸ WHEELS polymeter permanently detuned after any skipped frame —
seqAbsStep advanced by ++ per transition, but one frame can cross two
16ths (bpm ≳155, or the clamped dt on every tab refocus). Proven to
drift 12 steps out at 174bpm; now advances by the true distance, so
seqAbsStep % 16 === seqCurStep always holds.
· Sample & hold with exactly one lit step froze on its first sample
forever (guard keyed on the wrapped step, which never changed) — now
keyed on the absolute step.
· PSALM double-activation left the MICROPHONE HOT after "stop": the
re-entrancy guard sat after the getUserMedia await, orphaning the
first stream/interval/context. Guard is now synchronous, a stop
during the prompt is honoured, and a second tap while starting
cancels. Mic off means off — the promise the feature makes.
· Live-recording a drum tap into a short wheel wrote steps past wlen
that never played; the tap now folds onto the lane's own wheel.
· Switching MIDI out port left notes droning on the old port (pending
off-timers fired at the NEW one) — midiFlushOut() releases every held
note + all-notes-off before the swap.
· world_quakes' seen-set grew unbounded on long-running rigs.
Security: stored XSS via the commune room name — the one untrusted
string reaching innerHTML unescaped (hub only lower-cased it). Escaped
client-side at both sinks, and the hub now strips markup chars too.
Robustness: world_ephemeris/world_almanac imported swisseph unguarded,
so a machine without pyswisseph crash-looped them every 10s forever
against the supervisor's exit-0 contract — both now retire quietly
(verified by simulating the missing dep), and pyswisseph is documented
in requirements.
Mobile: the top bar's five separately-pinned chips collided below
~500px — the first thing a phone visitor saw was a broken header. Now
a clean row with the account chip on its own line and the source
counter moved left.
Housekeeping: dead measureSpaced(), dead #account .code selector, and
an 888K stale worktree removed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Everything — your hand, the room, a satellite, the markets, the sky — becomes an
OSC control signal fused through a modulation matrix. Includes:
- hub + normalize (One-Euro) + matrix (curves/gates/quantize) + transform (tweaks/groups)
- 20+ workers: sim sensors, 8 keyless world feeds, ephemeris/almanac/clock (computed),
time-warp replay (quakes/weather/db), and the dealgod market warehouse feed
- planetary orbital LFOs, SQLite recorder, city targeting
- live browser console: mute, group macros, drag-to-patch, inspector, Web MIDI
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>