Sigil 0.22.4
A web audio release. A page that is not cross-origin isolated no longer mixes its sound on the main thread, so a long game frame no longer pops the audio. Found by Crash The Stack's live soundtrack on a phone over a plain http host.
Existing projects build without changes. The (sigil audio sink) facade is the same; a project picks the new path up by rebuilding with this toolchain.
The worklet drains a page that cannot share memory
The bridge used an AudioWorkletNode only when the page could share memory with it (cross-origin isolated) and fell back to a ScriptProcessorNode on the main thread otherwise, where any frame that ran long starved the ring. A third mode now sits between them: the worklet is fed the frames by message and drains them on the audio thread, with the depth and underrun readings lagging by at most one report. SigilWasmAudio.sinkMode(id) says which path a sink is on (worklet-sab, worklet-msg or scriptprocessor). A browser without a worklet keeps the old path. test/integration/test-wasm-audio-worklet-msg.mjs drives the processor against the real producer and bounds the lag with the main thread stalled.