Files
Kordant/tasks/android-production/23-offline-sync.md
2026-05-26 16:06:34 -04:00

2.9 KiB

23. Offline Sync & Conflict Resolution

meta: id: android-production-23 feature: android-production priority: P2 depends_on: [android-production-21] tags: [backend, offline, production]

objective:

  • Implement robust offline mode with sync conflict resolution for all user actions

deliverables:

  • Offline queue improvements
  • Sync conflict resolution strategy
  • Offline UI indicators
  • Data consistency guarantees

steps:

  1. Audit existing offline support:
    • Review android/app/.../data/sync/SyncManager.kt
    • Review OfflineWorker.kt
    • Review PendingRequestQueue.kt
    • Identify gaps in offline handling
  2. Improve offline queue:
    • Support all mutation types (add, update, delete)
    • Add request deduplication
    • Add request ordering (dependencies)
    • Increase max retry count with exponential backoff
  3. Implement conflict resolution:
    • Define strategy per data type:
      • Server wins for most data (alerts, exposures)
      • Last write wins for user preferences
      • Merge for watchlist items
    • Add conflict detection (version numbers or timestamps)
    • Show conflict UI for manual resolution (if needed)
  4. Add offline UI:
    • Offline indicator in status bar
    • Disabled actions when offline
    • "Sync pending" badges on modified items
    • Pull-to-refresh with offline state
  5. Implement data consistency:
    • Optimistic updates (update UI immediately, sync in background)
    • Rollback on sync failure
    • Verify server state after sync
    • Handle partial sync failures
  6. Add background sync:
    • Process queue on app foreground
    • Process queue on network restoration
    • Schedule periodic sync attempts
  7. Test offline scenarios:
    • Create watchlist item offline → syncs when online
    • Delete exposure offline → syncs when online
    • Modify settings offline → syncs when online
    • Conflicting edits on multiple devices

tests:

  • Unit: Test queue ordering and deduplication
  • Integration: Test sync after offline period
  • E2E: Test conflicting edits resolution

acceptance_criteria:

  • All mutations queued when offline
  • Queue processed automatically when online
  • Optimistic updates show immediately
  • Failed operations roll back UI changes
  • Conflict resolution strategy defined per data type
  • Offline indicator visible in UI
  • Sync pending badges on modified items
  • No data loss during sync failures
  • Background sync on app foreground and network restore
  • Unit tests for all offline scenarios

validation:

  • Enable airplane mode → create watchlist item → badge shows
  • Disable airplane mode → item syncs → badge clears
  • Edit same item on web and Android → conflict resolved correctly
  • Kill app during sync → queue persists, resumes on relaunch

notes:

  • SyncManager.kt and OfflineWorker.kt already exist but may need enhancement
  • Room database can help with offline queue persistence
  • Simple server-wins strategy is acceptable for MVP
  • Consider using WorkManager for reliable background sync