pub async fn drain_sync_queue(
db: &Arc<RusqliteService>,
sink: &dyn SyncSink,
user_id: &str,
) -> Result<DrainReport, String>Expand description
Push every queued mutation for this user, oldest first.
Chronological order matters: a stale start replayed after a later stop would otherwise move the server’s resume position backwards.
A row that fails keeps its place and is retried on the next reconnect, until
MAX_SYNC_ATTEMPTS — after which it is abandoned, because a row nothing can
ever push is exactly what turned this queue into a counter that only grew.
TRACES: UR-025, UR-002 | DR-131 | UT-122