Part 11 — realtime
The relay pokes; your existing socket layer delivers; the device pulls.
// serveronPoke: (evt) => { for (const memberId of evt.memberIds) { hub.send(memberId, { type: 'argala.poke', graphId: evt.graphIdFor(memberId) }); }};
// devicesocket.on('argala.poke', ({ graphId }) => void engine.poke(graphId));poke is a no-op for a graph this device is not following, so it is safe to
fan out.
Without a socket layer, engine.startAutoSync(15_000) is sufficient for most
apps — writes push within pushDebounceMs regardless, so the
interval only governs how fast you see other people’s work.