2026-06-26
Summary
This release includes two critical hotfixes that improve app reliability and user authentication experience. Both fixes address race conditions and error handling issues discovered during testing.
Highlights
- Cold-start notification deep-linking now reliable — OneSignal listener registered immediately on app mount, eliminating race condition where notification taps failed silently on killed-app restarts.
- Email verification flow improved — Unverified Auth0 accounts now trigger the correct verification modal instead of generic login failures.
Changes by PR
PR #353 — fix: deeplink cold-start race — register OneSignal listener before auth resolves
Problem: On cold start via notification tap, deep-linking silently failed. The OneSignal click listener was gated behind auth state initialization (~1-3s), but the SDK fired the click event at app startup (t=0). Result: notification taps landed on home screen with no map focus.
Solution:
OneSignalContext.tsx— Initialize OneSignal and attach click listener immediately on mount, independent of auth state. Gated init still runs for subscription/sync setup.initialize()is idempotent.Home.tsx— Isolate camera zoom tRPC fetch in its own try/catch so failed zoom doesn't block incident dispatch.- Removed debug logging.
Impact: Incident and alert notifications now open reliably on cold start, app maps focus immediately, and bottom sheets load without delay.
PR: #353
PR #354 — fix(login): show email verification modal for Auth0 access_denied / email_not_verified
Problem: Auth0 returns access_denied with email_not_verified for unverified accounts, not unauthorized. The old check only matched unauthorized, so all three failure paths showed generic Login Failed toast, and the verification modal never appeared.
Solution:
- New
apps/nativeapp/app/utils/authErrors.ts—isUnverifiedEmailError()helper matchesunauthorized,access_denied + email_not_verified, and message fallback. - Login.tsx — Added
showEmailVerificationModal()helper; wired all three error paths (hook error, catch block, null creds) to use it. - Removed
transparentfrom Modal background to prevent iOS safe-area bleed-through.
Impact: Unverified and signup-return users now see the verification modal correctly. No more silent loading spinner or incorrect toast messages.
PR: #354
Ops & QA Notes
- No schema migrations in these PRs.
- Deploy native app + server together for best UX.
- QA steps:
- Cold-start incident notification tap → app opens → map focuses → bottom sheet loads ✓
- Cold-start alert notification tap → app opens → map focuses → alert sheet loads ✓
- Warm-start (app in background) notification tap still works ✓
- Unverified sign-in → verification modal shown (not toast) ✓
- Verified sign-in → normal login completes ✓
- Cancel Auth0 browser → generic failure (toast), not verification modal ✓
Would you like me to refine the format, add more details, or create a GitHub release directly?
Full Changelog: 2026-04-16...2026-06-26