ActivityBus
Reconnecting after time offline kicks off two things that both want to bring your cache up to date: a delta catch-up stream, and a routine freshness check. Left uncoordinated, the freshness check can decide data is stale and re-fetch it over HTTP at the exact moment the delta stream is already delivering it. ActivityBus is what keeps those two from racing each other.
The obvious fix is to make the freshness check simply wait a while after reconnect before deciding anything is stale — give the delta stream a head start. The problem is that any fixed wait is a guess about how long catch-up will take, and a guess that's wrong in either direction causes a real problem. Too short, and the freshness check fires its own network refetch while the delta stream is still mid-delivery, racing against data that's actively being written. Too long, and a channel with genuinely stale data — because its own catch-up stream stalled, or the channel simply had nothing to deliver — sits stale for far longer than necessary before anything corrects it.
ActivityBus replaces the guess with an actual signal: rather than waiting a fixed amount of time, the freshness check waits on real information about whether catch-up is still in progress, and proceeds the moment that information says it's done — not a moment sooner or later than the data itself justifies.
A channel is either catching up or it isn't
Completion is detected, not timed
The signal that a channel has finished catching up isn't a fixed duration — it's silence. A channel is considered settled once a short window passes with no further catch-up events for it. This is deliberately generous by default, to comfortably cover slower query execution, intentional pacing between batches, and ordinary gaps on a weak connection, and it's tunable per adapter for a backend with unusually fast or unusually slow delivery characteristics.
A minimum wait, then a hard ceiling
The full window, in order: for the first 20 seconds after a reconnect, Flux always keeps waiting, even if nothing looks like it's syncing yet — the connection may simply still be handshaking. Between 20 and 60 seconds, it keeps polling and exits the moment every stale channel reports it has settled. At 60 seconds, it stops waiting unconditionally, regardless of what's still in progress, and treats anything still stale at that point as a signal that something upstream may be stuck.
What happens once the wait ends
ActivityBus is what the delta stream described in core-concepts/sync-anchors is being coordinated against. For the storage side of what "fresh" and "stale" actually mean, see core-concepts/5-layer-stack.