v1.2.10 Critical Fixes
Critical: Fix cloud sync data loss
BACKUP YOUR DATA BEFORE UPDATING THE APP
Fixed a race condition in the cloud sync engine that caused tasks, settings, and calendar configuration to be lost across devices.
What happened: After merging local and remote data during cloud sync, the app immediately uploaded the result back to the server. However, it read from React state (which hadn't been updated yet) instead of using the just-merged data. This uploaded stale pre-merge data to the server, effectively undoing the merge and causing data to flip-flop and gradually disappear across sync cycles.
This bug was latent but became actively triggered after v1.2.8's sync engine fix corrected a remoteChanged flag that was being incorrectly suppressed. Once that flag worked correctly, the stale-upload code path was reached on every sync where both sides had changes.
Symptoms:
- Tasks, inbox items, and calendar events disappearing — up to complete data loss
- Calendar and sync settings getting wiped on web instances
- Settings like Habits/Routines being toggled off unexpectedly (hiding Glance panel FABs)
- Android native calendar unaffected (settings are device-local)
Safety guards
Added defense-in-depth protections to prevent data loss from any future sync bugs:
- Upload guard: Cloud sync will refuse to upload a payload with zero tasks when local storage has data, preventing empty data from overwriting the remote
- Apply guard: The app will refuse to apply incoming remote/merged data that has zero tasks when local storage has data, preventing a data wipe
Other fixes
- Calendar filter in backups: Calendar visibility settings (which calendars to show/hide) are now included in manual backup export, auto-backup, and backup restore
- GTD frame merge test: Updated test to match the
lastModified-based conflict resolution introduced in v1.2.8