You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(messaging)!: migrate messaging to TurboModules
Convert the messaging native module to a Codegen TurboModule shell while
keeping the legacy event-emitter path in place per NewArch-AD-4. Method
calls now route through NativeRNFBTurboMessaging (iOS .mm shell, Android
spec-backed shell); event delivery continues over the app-module proxy so
foreground, background, and headless message handling are unchanged.
Add committed codegen artifacts, register messaging in codegen:verify and
the spec-native parity list, and remove the legacy Android module.
BREAKING CHANGE: messaging requires the React Native New Architecture.
Ephemeral tracker; see [OKF policy](../documentation-policy.md).
@@ -88,6 +88,8 @@ Follow-on **after** Phases 0–5 and coordinated break. Not in scope unless test
88
88
89
89
**Deferral discriminator:** if **area-focused** e2e or device testing shows TurboModule migration **cannot** work with the legacy event proxy, escalate that package's event path into the active migration PR — do not wait for Phase C.
90
90
91
+
**Messaging event-delivery e2e (Phase C — investigate before enabling):**`packages/messaging/e2e/messaging.e2e.js` foreground `onMessage()` delivery test stays **`xit`** (disabled since modular e2e consolidation, 2023). Un-skipping without a harness audit risks intermittent Android failures (`TestsAPI.messaging().sendToDevice` / FCM data payload; see [#8736](https://github.com/invertase/react-native-firebase/issues/8736), [#8670](https://github.com/invertase/react-native-firebase/issues/8670), [#8392](https://github.com/invertase/react-native-firebase/issues/8392)). Phase C must define stable pass criteria (device vs emulator, data-only vs notification+data, delegation settings) and broader event coverage (token refresh, notification-opened, iOS background timing vs `signalBackgroundMessageHandlerSet`) before re-enabling as a CI gate — per [NewArch-AD-4 § messaging testing requirement](architecture-decisions.md#messaging--defer-eventemitter-cutover-migrate-shell-only-in-phase-4).
92
+
91
93
---
92
94
93
95
## Package inventory
@@ -324,7 +326,7 @@ Skip steps 1–2 when spec shape is known (most Tier D packages).
| Phase 4 `messaging` TurboModules | P4m |**open**|open|open |**implementation**|`area-focused`|`feat(messaging)!: migrate messaging to TurboModules`|Shell only (P4a); area-focused e2e per ADR-4 testing requirement. |
359
+
| Phase 4 `messaging` TurboModules | P4m |**closed**|**closed**|**closed**|done |`area-focused`|`feat(messaging)!: migrate messaging to TurboModules`|Turbo shell only (AD-4 event path preserved). Jest 38/38 + parity 32/32; codegen:verify incl messaging; legacy Java removed. iOS/Android area e2e green on method-call + listener-registration scope. Foreground `onMessage` delivery test **left `xit`** — flaky FCM harness; re-enable in [Phase C](#deferred-cleanup-phase-eventemitter). |
358
360
| Phase Docs — NA reqs + consolidation | PDoc | open | open | open | documentation |`none`|`docs: new-architecture requirements + migration consolidation`| Opportunistic; does not gate 4. |
359
361
| Phase PD — platform divergence | PPD | open | open | open | documentation |`none`|`docs(<pkg>): …` per package | Opportunistic; gap-analysis first. |
360
362
| Phase R — remove `NativeModules` fallback | PR-fallback | open | open | open | pre-merge-validation |`full`| (Phase R) | Decision B. Jest + `app` e2e "unknown module throws". |
0 commit comments