Strict Ordering
Every event takes the next sequence number, one higher than the last. Messages from all four devices interleave into a single ordered stream, and each sender keeps its own counter on top.
Four devices, one room, every message in order.
Starting the room.
Four simulated devices share the room on a three second heartbeat. Stall one and watch the sweep evict it after ten seconds of silence.
An append only log. Every event takes the next sequence number, and the four cells show which lanes held it.
Compose a script against its own room, then run it one step at a time and read exactly why each event was accepted, rejected or swept.
The lab room is fresh.
A room code is six characters from a 31 character alphabet with the lookalikes removed. The sixth character is a checksum digit computed from the first five.
Type a six character code.
Runs the same checks the test suite runs: 1,000 generated codes validated and deduplicated, then 6,000 single character mutations thrown at them.
The room core is a deterministic event log. It has no timers and no network: time only moves when a clock advances it, so the same script always produces the same log.
Every event takes the next sequence number, one higher than the last. Messages from all four devices interleave into a single ordered stream, and each sender keeps its own counter on top.
Each device pings the room every three seconds. A ping is an event like any other, with its own place in the log and its own sequence number.
A device silent for more than ten seconds is swept out with a leave event that records how long it went quiet. It can rejoin later and starts a fresh sender sequence.
A rejoining device asks for everything after a sequence it already holds. The engine hands back that exact window of the log, copies, in order.
About transport: this build has no server. The engine, the log and the scheduler all run in this page, which is why the badge above says Local Simulation. When a backend exists, a WebSocket transport is the drop in replacement for the in page scheduler: it would call the same engine methods and append to the same log.