mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-10 15:11:58 +01:00
- Paged loops now throw when they hit maxPages with a full last page, so a truncated enumeration aborts the entity's collect and skips its prune instead of deleting rows the sync never saw. The cap is injectable for tests. - Move sync serialization into SyncManager (tryLock coalesces duplicate requests) and construct SyncService there; SourceRepository only exposes the active MusicSource. Removes the repo <-> sync import cycle. - Re-throw CancellationException instead of reporting a cancelled sync as failed. - Add buffer(1) to the outer albums/songs/playlistSongs flows so their flowOn channel cannot hold 64 batches. - Rank prefetch is best-effort (missing frequent/recent no longer aborts the album sync). - Skip playlist entries without an id, keeping positions contiguous. - Chunk stale-disc deletes like the other prunes. - Update the implementation plan line that still described the old single-transaction sync.