Context
APNs throttles silent (content-available) pushes to roughly 5 per device per day and coalesces bursts; beyond that they are deferred or dropped. If the relay maps writes→pushes 1:1, wakes silently stop arriving and background sync dies on iOS.
Task
Relay-side debounce / coalesce of wake pushes per (device, topic):
- Collapse a burst of writes into a single wake push.
- Rate-limit per device/day toward the budget.
- Treat the push as a best-effort wake hint — the peer reconnects and the version-vector catch-up delivers the actual data, so a dropped/coalesced push only delays, never loses, sync.
Targeted multi-group wake already narrows which device gets woken; this adds the rate control on top.
Acceptance
- Under sustained writes, per-device silent pushes stay within budget.
- Instrument actual pushes/device/day to confirm.
References
- Gap P1-5 / §2.2 in
docs/research/ios-sync-state-of-the-art.md
Context
APNs throttles silent (
content-available) pushes to roughly 5 per device per day and coalesces bursts; beyond that they are deferred or dropped. If the relay maps writes→pushes 1:1, wakes silently stop arriving and background sync dies on iOS.Task
Relay-side debounce / coalesce of wake pushes per
(device, topic):Targeted multi-group wake already narrows which device gets woken; this adds the rate control on top.
Acceptance
References
docs/research/ios-sync-state-of-the-art.md