useOutbox
Queue mutations offline, replay them in order on reconnect.
Queue mutations while offline, replay IN ORDER on reconnect — over the existing optimistic layer. Replay stops at the first conflict to preserve causality. NOT multi-device CRDT (single-user/device, honest about its limits).
const outbox = useOutbox({ send })
// → { queue, enqueue, replay, online, pending, conflicts }