• v1.0.30 — Sync loop fully fixed

    Ghost released this 2026-05-25 13:48:18 +00:00 | 49 commits to main since this release

    Root cause fixes (found via live device logs)\n\nBug 1 — double refresh() race: onStartCommand received twice → two concurrent refresh() coroutines → doubled FileObservers and catchupScans. Fixed with Mutex.\n\nBug 2 — catchupScan no cooldown: Catchup syncs wrote files without setting syncCooldownUntil, so FileObserver immediately re-triggered. Fixed by setting 120s cooldown before catchup enqueue, watching completion, and releasing to 60s after.\n\nBug 3 — CancellationException reset cooldown: catch(_: Exception) was catching CancellationException and resetting cooldown to 0L. Fixed by rethrowing CancellationException and setting a 60s cooldown on other errors instead of 0.\n\n### Icon\n- Interlocked ring loops (blue / red / green / orange) with sync arrow at center\n- Pure black background

    Downloads