evented backend with single ordered publication path
flip backend from Io.Threaded to Io.Evented. frame workers run on a
dedicated Io.Threaded (pool_io) for CPU-heavy decode/validate, then
hand off to the broadcaster fiber via an MPSC ring buffer.
key design: one publication path for all relay-sequenced events.
workers, subscriber inline, and admin all use the same pattern:
persist_order spinlock → dp.persist → resequence → queue.push.
the broadcaster fiber drains FIFO (= seq order) and fans out.
persist_order is an atomic spinlock (not Io.Mutex) so both Threaded
workers and Evented admin can participate — Io.Mutex futex
implementations are incompatible across domains.
- DiskPersist initialized with pool_io (workers are its callers)
- BroadcastQueue: lossless spin-wait push (matches Indigo semantics)
- admin ban: same ordered path as workers, no direct broadcast()
- pool_io wired to HttpContext for future cross-domain use
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>