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
'Returns `Promise<ReactNativeFirebase.FirebaseApp>` because initialization crosses the native bridge. Accepts `ReactNativeFirebase.FirebaseAppOptions` and optional `ReactNativeFirebase.FirebaseAppConfig` (name / auth domain) instead of firebase-js-sdk `(FirebaseOptions, string)` only.',
130
130
},
131
-
{
132
-
name: 'registerVersion',
133
-
reason:
134
-
'Returns `Promise<void>` in RN Firebase vs `void` in firebase-js-sdk. Bridge-forced async today — Phase S sync-conversion candidate when native work is in-memory only.',
|[NewArch-AD-6](architecture-decisions.md#newarch-ad-6--unified-native-module-resolver--accepted)| Unified resolver; Phase R final state is TurboModule-only (no `NativeModules` fallback) |
|**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 |
@@ -203,7 +203,7 @@ Pick **one** of `firestore` or `auth` in Phase 1 (firestore = multi-module + pip
203
203
204
204
This is a **coordinated public-API change** (async→sync is observable to consumers) and ships in the same major as the migration — see [implementation workflow § Phase S](turbomodule-implementation-workflow.md#phase-s-sync-conversion-forced-async--sync).
205
205
206
-
### Gap-analysis (deferred — capture only, do not size yet)
206
+
### Gap-analysis (completed 2026-07-03)
207
207
208
208
The "keep async if it does network/IO/disk" rule in the discriminator **assumes** that where firebase-js-sdk is synchronous, the work is genuinely in-memory and non-blocking. That assumption is **unverified** and is the core thing the gap-analysis must establish. Open question to resolve:
209
209
@@ -223,7 +223,15 @@ The "keep async if it does network/IO/disk" rule in the discriminator **assumes*
223
223
224
224
**Candidate sources:** the `compare:types` async-vs-sync entries **plus** a manual sweep of `Promise`-returning methods whose firebase-js-sdk equivalent is sync but which `compare:types` does not flag (e.g. unregistered packages or utils-only exports). The third verdict (`needs-native-change`) is the interesting one the user raised: cases where we are async only because our native implementation chose IO, not because the operation requires it.
225
225
226
-
**Defer the actual inventory** — this section is the brief for it.
|`needs-native-change`|`analytics` fire-and-forget setters/events; `app-check/initializeAppCheck`; `firestore/initializeFirestore`; `storage` task controls; storage retry setters | Web APIs are sync or fire-and-forget, but RNFB native paths currently wrap async work or need behavior clarification before sync conversion. |
232
+
|`keep-async`| Firestore persistent cache index manager delete/enable/disable | Web returns `void` but starts real persistent-cache work; do not block JS thread. |
233
+
234
+
**Next slice:**`app/registerVersion` because RNFB already behaves synchronously and Phase S should only change the public type/compare-types entry. Planned subject: `refactor(app): return sync parity for registerVersion`.
227
235
228
236
---
229
237
@@ -322,11 +330,11 @@ Skip steps 1–2 when spec shape is known (most Tier D packages).
0 commit comments