11bbeeaefb
Two retention sweeps run once on app launch before the sync worker spawns. Mirrors doctate-client-core::startup + ::pending_cleanup. - Marker sweep: synced markers older than 72h are dropped via caseStore.cleanupStale; unsynced markers (guarding pending uploads) are preserved indefinitely. - Orphan audio sweep: m4a without sidecar (or vice versa) older than 24h goes; tmp leftovers go unconditionally. Paired files survive regardless of age — the upload worker owns deletion of valid pairs. Best-effort: failures are logged but never thrown. A hostile filesystem must not stop the watch from starting. 9 new tests (PendingCleanupTest 6, StartupCleanupTest 3) covering the window, sibling, and tmp-leftover edges. 52 tests green total.