@@ -8,7 +8,7 @@ timestamp: 2026-06-26T00:00:00Z
88
99# TurboModule migration — work queue
1010
11- > ** IN PROGRESS (2026-07-02):** Phase ** 5 ** complete (P5pnv + auth fix committed ). All native packages migrated except Phase ** R ** / ** S ** / ** C ** . Next: Phase ** R ** pre-merge validation or opportunistic docs .
11+ > ** IN PROGRESS (2026-07-02):** Phase ** R ** — remove ` NativeModules ` fallback (PR-fallback ). Phases 0–5 complete .
1212> ** Goal/order:** app foundation → hard probe → easy wins → remaining complex → sync conversion → coordinated break → cleanup (events, shared-state encapsulation). Decisions: [ architecture-decisions.md] ( architecture-decisions.md ) . Links: [ implementation workflow] ( turbomodule-implementation-workflow.md ) , [ change authoring] ( ../testing/change-authoring-workflow.md ) , [ functions reference] ( ../../../packages/functions/ ) ([ PR #8603 ] ( https://github.com/invertase/react-native-firebase/pull/8603 ) ).
1313
1414Ephemeral tracker; see [ OKF policy] ( ../documentation-policy.md ) .
@@ -169,15 +169,15 @@ Pick **one** of `firestore` or `auth` in Phase 1 (firestore = multi-module + pip
169169| ** 1** | Hard probe | ** done** | ` firestore ` (multi-module + pipelines; NewArch-AD-14a composite) |
170170| ** 2** | Easy wins | ** done** | ` installations ` , ` perf ` , ` in-app-messaging ` , ` app-distribution ` , ` ml ` |
171171| ** 3** | Moderate | ** done** | ` app-check ` , ` remote-config ` , ` analytics ` , ` crashlytics ` , ` storage ` |
172- | ** NB** | Interruption batch — JS infra/test/chore (standalone commits) | queued | ` app ` resolver refactor+perf, shared contract-test helper, harness snapshot; ` compare-types ` ** S0** — [ § interruption batch] ( #interruption-batch-standalone-commits ) |
173- | ** 3.5** | Guardrails — spec↔native parity + codegen-drift CI (** gates 4** ) | queued | all migrated packages — [ § Phase 3.5] ( #phase-35-guardrails ) |
172+ | ** NB** | Interruption batch — JS infra/test/chore (standalone commits) | ** done ** | ` app ` resolver refactor+perf, shared contract-test helper, harness snapshot; ` compare-types ` ** S0** — [ § interruption batch] ( #interruption-batch-standalone-commits ) |
173+ | ** 3.5** | Guardrails — spec↔native parity + codegen-drift CI (** gates 4** ) | ** done ** | all migrated packages — [ § Phase 3.5] ( #phase-35-guardrails ) |
174174| ** 4a** | messaging event decision — gap-analysis (** gates 4** ) | ** done** | ` messaging ` — [ § Phase 4a] ( #phase-4a-messaging-event-decision ) |
175175| ** Docs** | New-Architecture requirements + migration-doc consolidation | queued (opportunistic) | docs — [ § Phase Docs] ( #phase-docs-new-architecture-requirements-and-doc-consolidation ) |
176176| ** PD** | Platform-divergence documentation | queued (opportunistic) | multi-package JSDoc/docs — [ § Phase PD] ( #phase-pd-platform-divergence-documentation ) |
177- | ** 4** | Remaining complex | queued | other Tier A/B + ` messaging ` , ` database ` |
178- | ** 5** | Android-only / misc | queued | ` phone-number-verification ` |
177+ | ** 4** | Remaining complex | ** done ** | ` firestore ` , ` messaging ` , ` database ` , ` auth ` |
178+ | ** 5** | Android-only / misc | ** done ** | ` phone-number-verification ` |
179179| ** S** | Sync conversion (forced-async → sync) | queued (scope open — [ NewArch-AD-16] ( architecture-decisions.md#newarch-ad-16--phase-s-asyncsync-conversion--open ) ); prereq ** S0** ([ interruption batch] ( #interruption-batch-standalone-commits ) ) | All migrated packages — [ § sync conversion] ( #phase-s-sync-conversion-forced-async--sync ) |
180- | ** R** | Pre-merge full validation | queued | Revert harness narrowing; remove ` NativeModules ` fallback + throw test ([ § Phase R additions] ( #phase-r-additions ) ); [ full tier] ( ../testing/running-e2e.md#e2e-validation-tiers-unit-focused-area-focused-full ) 3-platform before coordinated major |
180+ | ** R** | Pre-merge full validation | ** done ** | Revert harness narrowing; remove ` NativeModules ` fallback + throw test ([ § Phase R additions] ( #phase-r-additions ) ); [ full tier] ( ../testing/running-e2e.md#e2e-validation-tiers-unit-focused-area-focused-full ) 3-platform before coordinated major |
181181| ** C** | EventEmitter cleanup | deferred | All — [ § deferred cleanup] ( #deferred-cleanup-phase-eventemitter ) |
182182| ** E** | Shared-state encapsulation | deferred (optional) | ` app ` + readers — [ § Phase E] ( #phase-e-shared-state-encapsulation-optional ) |
183183
@@ -322,11 +322,11 @@ Skip steps 1–2 when spec shape is known (most Tier D packages).
322322
323323## Current snapshot
324324
325- ** Label:** ` phase-5-pnv ` (2026-07-02); ** harness:** full (implementer applies area narrowing for e2e )
325+ ** Label:** ` phase-r-fallback ` (2026-07-02); ** harness:** full (no narrowing for final review )
326326
327- ** Next item:** Phase ** R** pre-merge validation or opportunistic PDoc
327+ ** Next item:** Phase ** R** PR-fallback — remove ` NativeModules ` fallback
328328
329- ** Current gates:** P5pnv all gates ** closed** — committed 2026-07-02. Auth fix ` fix(auth): rename delete turbo method for C++ codegen compatibility ` committed separately .
329+ ** Current gates:** PR-fallback all gates ** closed** — committed as ` refactor: cleanup legacy arch native module fallback ` . Proof run + review green .
330330
331331** Host rule:** one ` :test-cover ` at a time — never parallel subagents with e2e.
332332
@@ -358,11 +358,11 @@ Skip steps 1–2 when spec shape is known (most Tier D packages).
358358| Phase 4a messaging event decision | P4a | n/a | n/a | n/a | done | ` none ` | none | ** Defer** events to Phase C — [ NewArch-AD-4 § messaging] ( architecture-decisions.md#messaging--defer-eventemitter-cutover-migrate-shell-only-in-phase-4 ) . |
359359| 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 ) . |
360360| Phase 4 ` database ` TurboModules | P4d | ** closed** | ** closed** | ** closed** | done | ` area-focused ` | ` feat(database)!: migrate database to TurboModules ` | 5 Turbo specs/shells + committed codegen; Jest 49 + parity 38; area e2e macOS 213 / iOS 219 / Android 220 (delta logs ` /tmp/rnfb-e2e-*-database-delta-review.log ` ). Remediation: invalidate/teardown parity (Reference+Transaction), onComplete guard, contract test 22 methods, jest mock cleanup. Orchestration: macOS/Android ` :8090 ` pre-flight in ` firebase.test.js ` + OKF. ** Deferred minor:** void spec vs Promise JS API; silent Query ` RejectedExecutionException ` post-invalidate. |
361- | Phase 4 ` auth ` TurboModules | P4u | ** closed** | ** closed** | ** closed** | done | ` area-focused ` | ` feat(auth)!: migrate auth to TurboModules ` | … ** Follow-up (uncommitted): ** spec ` delete ` → C++ keyword collision; rename + regen; ` TaskExecutorService(TAG) ` fix applied on disk . |
361+ | Phase 4 ` auth ` TurboModules | P4u | ** closed** | ** closed** | ** closed** | done | ` area-focused ` | ` feat(auth)!: migrate auth to TurboModules ` | 60-method spec + shells; review e2e macOS 171 / iOS 185 / Android 192. Follow-up committed: ` fix(auth): rename delete turbo method for C++ codegen compatibility ` . |
362362| Phase 5 ` phone-number-verification ` TurboModules | P5pnv | ** closed** | ** closed** | ** closed** | done | ` area-focused ` | ` feat(phone-number-verification)!: migrate phone-number-verification to TurboModules ` | Android-only 6-method spec; review e2e Android 40/2 pending (log ` /tmp/rnfb-e2e-android-pnv-review.log ` ). AD-18 E10 direct resolver. Parity registered. ** Bundled auth fix:** separate commit ` fix(auth): rename delete turbo method for C++ codegen compatibility ` . |
363363| Phase Docs — NA reqs + consolidation | PDoc | open | open | open | documentation | ` none ` | ` docs: new-architecture requirements + migration consolidation ` | Opportunistic; does not gate 4. |
364364| Phase PD — platform divergence | PPD | open | open | open | documentation | ` none ` | ` docs(<pkg>): … ` per package | Opportunistic; gap-analysis first. |
365- | Phase R — remove ` NativeModules ` fallback | PR-fallback | open | open | open | pre-merge-validation | ` full ` | (Phase R) | Decision B. Jest + ` app ` e2e "unknown module throws" . |
365+ | Phase R — remove ` NativeModules ` fallback | PR-fallback | ** closed ** | ** closed ** | ** closed ** | done | ` full ` + RNFBDebug | ` refactor: cleanup legacy arch native module fallback ` | Proof 683/823/849 ( ` /tmp/rnfb-e2e-phaseR-proof-*.log ` ). Review 2026-07-03: no critical/serious. Android cold boot committed separately . |
366366
367367---
368368
0 commit comments