Readonlyonlinefalse only when the browser positively says so.
ReadonlyowedEntries still owed to the server — pending, failed and inFlight together.
ReadonlyquarantinedEntries set aside with a named motive; blocked rather than owed.
ReadonlylastEpoch ms of the last accepted push, or null when the server never accepted one.
The write queue as a whole — the four facts every surface showing it must agree on.
🛑 DELIBERATELY NOT PER-LAYER, and that is the difference with LayerSyncReport. The question this answers is the one a field user asks before closing the application — "is anything of mine still not sent?" — and it has no layer in it. Splitting it per layer would force every caller to re-aggregate, and each would choose its own set of "owed" states; three such choices already existed in this repository, and they disagreed.
owedandquarantinedare disjoint: an entry set aside is blocked, not owed. Summing them would make a drain look idle while captures sat unsent under a named motive.