···11---
22title: To-Do/Parking Lot
33-updated: 2026-04-26
33+updated: 2026-05-02
44---
5566## Tests
···1818- Saved posts should be a tabbed view for local & ATProto/BSky saved posts.
19192020## UX
2121+2222+### Notifications
2323+2424+- Foreground push messages are processed through the standalone background notification
2525+ context (same path as background payload handling), to keep behavior consistent across
2626+ app states.
21272228### Posts
2329
+23-15
docs/tasks/notification.md
···11---
22title: Notification Milestones
33-updated: 2026-04-29
33+updated: 2026-05-01
44---
5566## M1 - Foundation Hardening (Polling Baseline)
···20202121## M3 - Push Registration Lifecycle
22222323-- [ ] Add token acquisition and refresh listeners
2424-- [ ] Implement `registerPush` and `unregisterPush`
2525-- [ ] Wire account login/switch/logout paths
2626-- [ ] Add retries/backoff for registration failures
2727-- [ ] Add unit tests for lifecycle transitions
2323+- [x] Add token acquisition and refresh listeners
2424+- [x] Implement `registerPush` and `unregisterPush`
2525+- [x] Wire account login/switch/logout paths
2626+- [x] Add retries/backoff for registration failures
2727+- [x] Add unit tests for lifecycle transitions
28282929## M4 - Push Payload Processing
30303131-- [ ] Add background payload entrypoint (`@pragma('vm:entry-point')`)
3232-- [ ] Parse defensively: `senderDid`, `targetDid`, `recordUri`, `reason`
3333-- [ ] Fetch canonical notification payload before display
3434-- [ ] Apply moderation + preference filtering before display
3535-- [ ] Add timeout-bound processing and drop accounting
3131+- [x] Add background payload entrypoint (`@pragma('vm:entry-point')`)
3232+- [x] Parse defensively: `senderDid`, `targetDid`, `recordUri`, `reason`
3333+- [x] Fetch canonical notification payload before display
3434+- [x] Apply moderation + preference filtering before display
3535+- [x] Add timeout-bound processing and drop accounting
36363737## M5 - Background Reconciliation
38383939-- [ ] Add periodic background reconcile task (Android 15m+)
4040-- [ ] Add iOS background fetch/BGTaskScheduler integration
4141-- [ ] Ensure tasks are idempotent and dedupe-safe
4242-- [ ] Add test harness for worker entrypoints
3939+- [x] Add periodic background reconcile task (Android 15m+)
4040+- [x] Add iOS background fetch/BGTaskScheduler integration
4141+- [x] Ensure tasks are idempotent and dedupe-safe
4242+- [x] Add test harness for worker entrypoints
43434444## M6 - Preferences and UX
4545···5454- [ ] Add smoke checklist for Android/iOS permission and delivery scenarios
5555- [ ] Validate multi-account behavior and token cleanup
5656- [ ] Run full `flutter analyze` and full test suite
5757+5858+## M8 - Firebase/APNs Production Push Setup
5959+6060+- [ ] Create/configure Firebase project apps for iOS + Android
6161+- [ ] Add `GoogleService-Info.plist` to iOS target and `google-services.json` to `android/app`
6262+- [ ] Configure Apple Push Notifications capability/provisioning in Apple Developer
6363+- [ ] Upload APNs auth key/certificate to Firebase Cloud Messaging settings
6464+- [ ] Validate end-to-end remote push delivery (foreground, background, terminated) on iOS + Android