Skip to content

v1.0.5 — Capture and sync hotfix

Choose a tag to compare

@theetaz theetaz released this 25 Apr 10:50
· 9 commits to main since this release

Hotfix release on top of v1.0.4. Two regressions surfaced during testing:

📷 Photo capture is instant again

Capture-time photo optimization in v1.0.4 stalled the picker for 30s+ on
Android — manipulator + blurhash both round-trip the native bridge with
full-resolution bitmaps, and Promise.all serialised them on a single
native thread. The thumbnail wouldn't appear until both finished.

The optimization (resize to 1600 px, JPEG q 0.7, blurhash compute) now
runs inside the upload pipeline instead of the picker. Capture stages
the original URI immediately so the thumbnail shows up the instant the
picker returns; the optimization happens silently in the background as
part of the upload.

🔁 Auto-sync now actually fires after saving

Saving a job left the queue stuck at "1 pending" until the user
foregrounded the app or pulled to sync. The local data-change bus only
refreshed the count badge — nothing called the sync engine. Adding a
3-second debounced auto-sync on every local mutation fixes this; the
queue clears while the user is still on the screen.

🛡 Trailing-edge re-run for in-flight syncs

Strict single-flight (added in v1.0.4) silently coalesced writes that
arrived during a running sync into the in-flight pass — but that pass
already snapshotted its dirty rows before the new write existed.
Replaced with a trailing-edge pattern: callers arriving during a run
mark a pending re-run, and one more pass fires after the current one
completes.

Distribution

Build and ship the Android APK to Firebase App Distribution: `./deploy.sh --notes "Capture and sync hotfix — see GitHub release v1.0.5"`