Implement ScenarioDeepLinkRouter for push payload parsing and navigation
epic-scenario-push-engagement-foundation-task-008 — Implement ScenarioDeepLinkRouter to parse incoming push notification payloads (scenario_type, entity_id, target_route) and resolve the correct in-app navigation target. Handle both cold-start (app launched from terminated state) and foreground scenarios. Ensure back-stack integrity by pushing the correct ancestor routes before the destination. Integrate with the existing GoRouter or Navigator 2.0 setup.
Acceptance Criteria
Technical Requirements
Execution Context
Tier 1 - 540 tasks
Can start after Tier 0 completes
Implementation Notes
Use FirebaseMessaging.instance.getInitialMessage() in the root widget's initState (or a Riverpod provider with autoDispose) to capture cold-start payloads. Use FirebaseMessaging.onMessageOpenedApp.listen() for background-to-foreground. Store initial payload in a Riverpod StateProvider
Avoid handling navigation in a firebase_messaging background handler (background isolate) — only record the payload there and process on foreground resume.
Testing Requirements
Write unit tests using flutter_test. Test handlePayload for every ScenarioType enum value with a valid entity_id. Test cold-start path by simulating getInitialMessage() returning a RemoteMessage. Test onMessageOpenedApp stream handling.
Test invalid scenario_type falls back to home. Test missing entity_id falls back gracefully. Test UUID validation rejects malformed entity_id strings. Integration test: install debug build on a real device via TestFlight; trigger each scenario push type and verify correct screen is reached with correct back-stack.
Achieve 90% branch coverage.
FCM service account key and APNs certificate configuration may be missing or misconfigured in the Supabase Edge Function secrets store, blocking end-to-end push delivery testing until resolved by the infrastructure owner.
Mitigation & Contingency
Mitigation: Raise a credentials-setup task in the project board at epic start; document the exact secret names required in scenario-evaluation-config so the infrastructure owner can provision them independently of development work.
Contingency: Implement a mock push-notification-dispatcher stub that records payloads to the database for local testing, allowing the rest of the feature to proceed while credentials are obtained.
Incorrect RLS policies on the scenario_notifications or notification_preferences tables could allow one user to read or modify another user's notification records, constituting a data privacy breach.
Mitigation & Contingency
Mitigation: Write dedicated RLS policy tests using Supabase's built-in test framework before any application code touches the tables; require a peer security review of all policy definitions before merging.
Contingency: If a policy gap is discovered post-merge, immediately disable the affected table's read policy, notify the security lead, and deploy a hotfix with corrected policies before re-enabling access.
Norwegian Bokmål ARB localisation strings for all scenario message templates may not be available at implementation time, causing content-builder tests to fail and delaying integration.
Mitigation & Contingency
Mitigation: Define all required ARB message keys in a tracked document shared with the content owner at epic kickoff; use English placeholder strings that follow the final format so template injection logic can be tested independently.
Contingency: Ship with English-only strings in the first release and gate Norwegian strings behind a feature flag that is enabled once translations are reviewed and approved.