Offline behaviour
RaceTagger Desktop is online-required by default. Without a connection, exactly two things keep working: reviewing results already analysed on this device (the review gallery) and exporting those already-processed results. Everything else — running an analysis (including the local ONNX face-recognition flow), loading participant presets, credits/token operations, and cross-device sync — needs an active connection, and the app is designed to fail clearly rather than hang or silently do nothing when it isn't there.
How to use it
- 1Open an execution from the home page's list of past analyses: scanLocalExecutions reads the local .analysis-logs directory (JSONL log + summary sidecar) with no network call, so the list and the review gallery render from files already on disk.
- 2Review, filter and correct results as normal — corrections you make while offline are still saved: update-analysis-log…: writes to the local JSONL/summary immediately, and the Supabase write is queued in the correction outbox (src/utils/correction-outbox.ts) for retry once the connection is back. If the immediate persist call itself fails, the log visualizer shows "Marked locally — saving failed (offline?). Use 'Save All Changes' to retry." and keeps the change queued for the Save All Changes button.
- 3Use Export & IPTC as normal: If the IPTC defaults lookup can't reach the app's backend, the modal falls back to a localStorage mirror of your account-level default IPTC template so export still runs.
- 4Anything else attempted offline — starting a new analysis, restoring an execution marked "☁ Cloud" (no local JSONL)…: , loading/saving participant presets, checking token balance — returns an explicit error asking you to check your connection, instead of failing silently.
Limits and known behaviour
- An execution that only exists in the cloud (no local JSONL — another device, a reinstall,
or a deleted file) cannot be reviewed offline: Restore from cloud
(
restore-execution-from-cloud) needs the connection to look up and download the backup, and returns "Couldn't reach the cloud to look up this analysis. Check your connection and try again." / "...couldn't download it..." when it can't reach Supabase. - Corrections queued offline in the outbox retry with exponential backoff (1s → 2s → 4s → 8s →
16s) up to 5 attempts, then are dropped and logged — the in-app state (No-Match / corrected
value) is not rolled back, only the Supabase write is abandoned; a fresh save retries it. The
outbox is durable JSONL under
userData/.outbox/corrections.jsonl, so pending corrections survive an app restart or crash while offline. - The DB-reconstruction fallback that would let another machine review an execution whose local
log is missing (
loadFromDatabaseIfExistsinexecution-log-loader.ts) is gated behind a per-userfeature_flags.db_execution_fallbackflag, default off, and requires network by definition — it does not change offline behaviour on the device that ran the analysis. - Archived/expired server-side photos (storage-retention sweep) show a calm "Photo archived — your original is safe on your own disk" placeholder in the gallery rather than a broken image; this can appear with or without a connection, since it depends on whether the local copy is still on disk, not on network state.
- Settings pages that read account-level configuration (e.g. the IPTC Pro default template status) show "Not configured" rather than guessing when the IPC/network call fails offline.
- The online-required policy itself predates this changelog trail; the offline review/export mechanisms documented on this page (correction outbox, local executions scanner) date from 1.1.8–1.1.10.