🔥 A well-tested feature-rich modular Firebase implementation for React Native. Supports both iOS & Android platforms for all Firebase services.
This report presents the forensic synthetic code analysis of invertase/react-native-firebase, a TypeScript project with 12,301 GitHub stars. SynthScan v2.0 examined 244,818 lines of code across 1418 source files, recording 578 pattern matches distributed across 9 syntactic categories. The overall adjusted score of 12.5 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 578 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 23 | queryBefore._modifiers._modifiers.length.should.equal(0); | CODE |
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 26 | queryBefore._modifiers._modifiers.length.should.equal(0); | CODE |
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 27 | queryAfter._modifiers._modifiers.length.should.equal(1); | CODE |
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 30 | queryAfter._modifiers._modifiers.length.should.equal(1); | CODE |
| CRITICAL⚡ | packages/database/e2e/query/query.e2e.js | 31 | queryAfterAfter._modifiers._modifiers.length.should.equal(3); // adds startAt endAt internally | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 26 | FilePath.MAIN_BUNDLE.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 31 | FilePath.CACHES_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 32 | FilePath.DOCUMENT_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 35 | FilePath.EXTERNAL_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 41 | FilePath.EXTERNAL_STORAGE_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 46 | FilePath.TEMP_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 47 | FilePath.LIBRARY_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 48 | FilePath.PICTURES_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/utilsStatics.e2e.js | 49 | FilePath.MOVIES_DIRECTORY.should.be.a.String(); | CODE |
| CRITICAL | packages/app/e2e/app.e2e.js | 50 | modular.SDK_VERSION.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/app.constants.e2e.js | 44 | app.appConfig.should.be.a.Object(); | CODE |
| CRITICAL⚡ | packages/app/e2e/app.constants.e2e.js | 45 | app.appConfig.name.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/app/e2e/app.constants.e2e.js | 46 | app.options.should.be.a.Object(); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 183 | data.createdAt.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 189 | data.nested.updatedAt.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 190 | data.nested.updatedAt.seconds.should.equal(updatedAt.seconds); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 191 | data.nested.updatedAt.nanoseconds.should.equal(updatedAt.nanoseconds); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 192 | data.nested.linkedRef.path.should.equal(linkedRef.path); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2649 | data.nextDay.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2651 | data.prevHour.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2653 | data.dayBucket.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2654 | data.fromEpochMs.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2694 | data.now.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2696 | data.receiverNow.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2699 | data.fromSec.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/Pipeline.e2e.js | 2701 | data.fromMicros.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 1676 | data.randomValue.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2269 | data.firstScore.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2270 | data.lastScore.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2338 | eng.firstName.should.be.a.String(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2339 | eng.lastName.should.be.a.String(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2439 | data.globalDayBucket.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2440 | data.fluentDayBucket.constructor.name.should.equal('Timestamp'); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2728 | data.numType.should.be.a.String(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 2729 | data.collId.should.be.a.String(); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 3124 | snapshot.results.length.should.be.greaterThan(0); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 4132 | snapshot.results.length.should.be.greaterThan(0); | CODE |
| CRITICAL | packages/firestore/e2e/Pipeline.e2e.js | 4133 | snapshot.results.length.should.be.lessThanOrEqual(10); | CODE |
| CRITICAL | packages/firestore/e2e/SnapshotMetadata.e2e.js | 34 | colRef.metadata.fromCache.should.be.Boolean(); | CODE |
| CRITICAL | packages/firestore/e2e/SnapshotMetadata.e2e.js | 35 | docRef.metadata.fromCache.should.be.Boolean(); | CODE |
| CRITICAL | packages/firestore/e2e/SnapshotMetadata.e2e.js | 46 | colRef.metadata.hasPendingWrites.should.be.Boolean(); | CODE |
| CRITICAL | packages/firestore/e2e/SnapshotMetadata.e2e.js | 47 | docRef.metadata.hasPendingWrites.should.be.Boolean(); | CODE |
| CRITICAL | packages/firestore/e2e/FieldValue.e2e.js | 125 | snapshot.data().foo.seconds.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/FieldValue.e2e.js | 137 | snapshot1.data().foo.nanoseconds.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/FieldValue.e2e.js | 142 | snapshot2.data().foo.nanoseconds.should.be.a.Number(); | CODE |
| CRITICAL | packages/firestore/e2e/DocumentChange.e2e.js | 41 | docChange.doc.constructor.name.should.eql('DocumentSnapshot'); | CODE |
| CRITICAL | packages/firestore/e2e/QuerySnapshot.e2e.js | 51 | snapshot.docs.length.should.be.aboveOrEqual(1); | CODE |
| CRITICAL | packages/firestore/e2e/QuerySnapshot.e2e.js | 76 | snapshot.metadata.constructor.name.should.eql('SnapshotMetadata'); | CODE |
| CRITICAL | packages/firestore/e2e/QuerySnapshot.e2e.js | 83 | snapshot.query.constructor.name.should.eql('CollectionReference'); | CODE |
| CRITICAL | packages/firestore/e2e/withConverter.e2e.js | 69 | post.should.not.be.an.instanceof(Post); | CODE |
| CRITICAL | packages/firestore/e2e/withConverter.e2e.js | 384 | data.createdAt.should.be.an.instanceOf(Timestamp); | CODE |
| CRITICAL | packages/firestore/e2e/withConverter.e2e.js | 385 | data.updatedAt.should.be.an.instanceOf(Timestamp); | CODE |
| CRITICAL | …es/firestore/e2e/CollectionReference/properties.e2e.js | 29 | instance.firestore.app.name.should.eql('[DEFAULT]'); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/DocumentSnapshot/data.e2e.js | 93 | data.string.should.be.a.String(); | CODE |
| CRITICAL⚡ | packages/firestore/e2e/DocumentSnapshot/data.e2e.js | 95 | data.stringEmpty.should.be.a.String(); | CODE |
| 156 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/.detoxrc.js | 12 | function androidReversePortsFromEnv() { | CODE |
| LOW | tests/app.js | 272 | after(async function flushNativeCoverageProfile() { | CODE |
| LOW | tests/local-tests/firestore/document-reference.tsx | 6 | export function DocumentReferenceTestComponent() { | CODE |
| LOW | tests/local-tests/firestore/onSnapshotInSync.js | 31 | export function FirestoreOnSnapshotInSyncTest() { | CODE |
| LOW | tests/local-tests/auth/nativeAppleSignIn.ts | 36 | export function isNativeAppleSignInAvailable(): boolean { | CODE |
| LOW | tests/local-tests/auth/nativeAppleSignIn.ts | 40 | export async function performAppleSignInRequest(): Promise<NativeAppleSignInResult> { | CODE |
| LOW | tests/local-tests/auth/apple-full-name.tsx | 70 | export function AppleFullNameTestComponent() { | CODE |
| LOW | tests/local-tests/functions/https-callable.tsx | 14 | export function HttpsCallableTestComponent(): React.JSX.Element { | CODE |
| LOW | tests/local-tests/functions/streaming-callable.tsx | 14 | export function StreamingCallableTestComponent(): React.JSX.Element { | CODE |
| LOW | tests/scripts/pull-native-coverage.js | 40 | function androidCoverageFileExists(deviceId) { | CODE |
| LOW | tests/scripts/pull-native-coverage.js | 81 | async function pullAndroidCoverageWithRetry(deviceId, options = {}) { | CODE |
| LOW | tests/scripts/pull-native-coverage.js | 170 | function deleteProcessedAndroidCoverageEc(ecFilePath) { | CODE |
| LOW | tests/e2e/firebase.test.js | 53 | function logCloudPressureAnalysisPointer(context) { | CODE |
| LOW | tests/e2e/firebase.test.js | 62 | function platformFromDetoxConfigurationName(name) { | CODE |
| LOW | tests/e2e/firebase.test.js | 117 | function staticPrefixedJetControlPort(pk) { | CODE |
| LOW | tests/e2e/firebase.test.js | 233 | function resolveDetoxConfigurationName() { | CODE |
| LOW | tests/e2e/firebase.test.js | 422 | function resolveAndroidEmulatorPort(serial) { | CODE |
| LOW | tests/e2e/firebase.test.js | 585 | function forceStopAndroidTestingApps(label) { | CODE |
| LOW | tests/e2e/firebase.test.js | 603 | async function waitForAndroidInstrumentationStopped(label, timeoutMs = 30000) { | CODE |
| LOW | tests/e2e/firebase.test.js | 633 | function clearStaleMacOsTestingForSharedJetPort(label) { | CODE |
| LOW | tests/e2e/firebase.test.js | 659 | async function ensureAndroidJetHostClear(label = 'android-jet-host-clear') { | CODE |
| LOW | tests/e2e/firebase.test.js | 681 | async function waitForColdBootEmulatorRegistered(serial, avdName, timeoutMs) { | CODE |
| LOW | tests/e2e/firebase.test.js | 761 | async function waitForAndroidEmulatorReady() { | CODE |
| LOW⚡ | tests/e2e/firebase.test.js | 1028 | function hasJetReconnectDesyncSignal(output) { | CODE |
| LOW⚡ | tests/e2e/firebase.test.js | 1038 | function isJetReconnectDesyncFailure(output) { | CODE |
| LOW⚡ | tests/e2e/firebase.test.js | 1042 | function isRetryableJetSessionFailure(output) { | CODE |
| LOW | tests/e2e/firebase.test.js | 1070 | function isRetryableCloudQuotaFailure(jetOutput) { | CODE |
| LOW | tests/e2e/firebase.test.js | 1293 | async function awaitJetExitWithStallGuard(jetSession, stallMs = jetAwaitExitStallTimeoutMs()) { | CODE |
| LOW | tests/e2e/androidReadyPolicy.js | 13 | function shouldSkipAndroidSettleAndLoad(isCI) { | CODE |
| LOW⚡ | tests/e2e/detoxLatencyPolicy.js | 44 | function androidAdbSerialAppearTimeoutMs() { | CODE |
| LOW⚡ | tests/e2e/detoxLatencyPolicy.js | 53 | function androidAdbInstallTimeoutMs() { | CODE |
| LOW⚡ | tests/e2e/detoxLatencyPolicy.js | 58 | function jetAwaitExitStallTimeoutMs() { | CODE |
| LOW⚡ | tests/e2e/androidAdbRange.js | 16 | function isAdbEmulatorConsolePortInRange(port) { | CODE |
| LOW⚡ | tests/e2e/androidAdbRange.js | 24 | function emulatorConsolePortOutOfAdbRange(serial) { | CODE |
| LOW⚡ | tests/e2e/androidAdbRange.js | 30 | function shouldFailFastQemuWithoutAdb(serial, deviceState) { | CODE |
| LOW | tests/e2e/androidAdbRange.js | 75 | function shouldColdBootAndroidOnLaunchRetry(messageOrErr) { | CODE |
| LOW | scripts/version.js | 54 | function resolveTestsMacosFmtPodspecPath(candidates = TESTS_MACOS_FMT_PODSPEC_CANDIDATES) { | CODE |
| LOW | scripts/version.js | 65 | function assertTestsMacosFmtAtLeastFloor() { | CODE |
| LOW | scripts/jest-ai-mocks-global-setup.js | 59 | function getArgvTestPathIgnorePatterns() { | CODE |
| LOW | packages/database/lib/index.ts | 291 | export function setPersistenceCacheSizeBytes(db: Database, bytes: number): Promise<void> { | CODE |
| LOW | packages/database/lib/web/RNFBDatabaseModule.ts | 81 | function snapshotWithPreviousChildToObject( | CODE |
| LOW | packages/database/lib/web/RNFBDatabaseModule.ts | 106 | function getCachedDatabaseInstance(appName: string, dbURL: string): WebDatabase { | CODE |
| LOW | packages/database/lib/web/RNFBDatabaseModule.ts | 123 | function getCachedOnDisconnectInstance(refValue: WebDatabaseReference): WebOnDisconnect { | CODE |
| LOW | packages/database/e2e/helpers.js | 114 | exports.waitForNativeDbListenerReady = async function waitForNativeDbListenerReady( | CODE |
| LOW | packages/database/e2e/helpers.js | 131 | exports.waitForNativeDbListenerRegistration = async function waitForNativeDbListenerRegistration( | CODE |
| LOW | packages/crashlytics/lib/index.ts | 186 | export function didCrashOnPreviousExecution(crashlytics: Crashlytics): Promise<boolean> { | CODE |
| LOW | packages/crashlytics/lib/index.ts | 221 | export function setCrashlyticsCollectionEnabled( | CODE |
| LOW | packages/app/firebase_spm.rb | 178 | def rnfirebase_build_setting_list(current) | CODE |
| LOW | packages/app/firebase_spm.rb | 321 | def rnfirebase_add_spm_embed_phase(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 537 | def rnfirebase_run_spm_user_project_hooks(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 758 | def rnfirebase_add_spm_core_to_app_target(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 881 | def rnfirebase_remove_spm_core_from_app_target(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 967 | def rnfirebase_fix_spm_archive_signature_collision(installer) | CODE |
| LOW | packages/app/firebase_spm.rb | 1055 | def rnfirebase_apply_spm_build_settings(installer) | CODE |
| LOW | packages/app/__tests__/harnessCommittedDefaults.test.ts | 111 | function listTrackedHarnessTestSources(): string[] { | CODE |
| LOW | packages/app/__tests__/expoPluginPackageExports.test.ts | 32 | function discoverPackageNamesWithAppPlugin(): string[] { | CODE |
| LOW | packages/app/__tests__/firebase_spm_test.rb | 44 | def new_shell_script_build_phase(name) | CODE |
| LOW | packages/app/__tests__/firebase_spm_test.rb | 1362 | def new_fake_cocoapods_installer_class(hook_private: true) | CODE |
| LOW | …ckages/app/__tests__/firebase_spm_embed_script_test.rb | 126 | def extract_embed_frameworks_from(script) | CODE |
| LOW | …ckages/app/__tests__/firebase_spm_embed_script_test.rb | 191 | def build_fat_dynamic_framework(framework_path, binary_name) | CODE |
| 149 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | jest.config.js | 1 | module.exports = { | COMMENT |
| LOW | tests/globals.js | 21 | import shouldMatchers from 'should'; | COMMENT |
| LOW | tests/ios/testing/AppDelegate.mm | 261 | // Initialize RNFBAppCheckModule, it sets the custom RNFBAppCheckProviderFactory | COMMENT |
| LOW | tests/local-tests/auth/gcloud-enable-totp-in-project.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/fetch_ai_mock_responses.ts | 1 | // Copyright (c) 2016-present Invertase Limited & Contributors | COMMENT |
| LOW | scripts/update-firebase-sdk-versions.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/jest-ai-mocks-global-setup.js | 1 | // Copyright (c) 2016-present Invertase Limited & Contributors | COMMENT |
| LOW | scripts/repro-android-build-flake.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/e2e/export-slot-env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/check-e2e-resources.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/start-packager.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/release-e2e-resources.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/lib/e2e-slot-env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/lib/e2e-startup-failfast.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/e2e/lib/e2e-resource-env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …ckages/database/ios/RNFBDatabase/RNFBDatabaseModule.mm | 21 | #import "RNFBDatabaseModule.h" | COMMENT |
| LOW | packages/crashlytics/ios_config.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …ashlytics/ios/RNFBCrashlytics/RNFBCrashlyticsModule.mm | 21 | #import <React/RCTConvert.h> | COMMENT |
| LOW | …tics/ios/RNFBCrashlytics/RNFBCrashlyticsInitProvider.m | 21 | #elif __has_include(<FirebaseCore/FirebaseCore.h>) | COMMENT |
| LOW | …tics/ios/RNFBCrashlytics/RNFBCrashlyticsInitProvider.h | 21 | // RNFBCrashlyticsModule.mm (Objective-C++), which only ever calls the three | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/firebase_spm.rb | 41 | absl | COMMENT |
| LOW | packages/app/firebase_spm.rb | 61 | # source of truth) the first time it's needed, then cached for the rest | COMMENT |
| LOW | packages/app/firebase_spm.rb | 81 | # resolved with. Called once, from `firebase_dependency` itself, the | COMMENT |
| LOW | packages/app/firebase_spm.rb | 141 | # | COMMENT |
| LOW | packages/app/firebase_spm.rb | 161 | # Returns true only when `$RNFirebaseDisableSPM` has been explicitly set to `true`. | COMMENT |
| LOW | packages/app/firebase_spm.rb | 201 | destination="${app_frameworks_dir}/${framework_name}" | COMMENT |
| LOW | packages/app/firebase_spm.rb | 241 | } | COMMENT |
| LOW | packages/app/firebase_spm.rb | 261 | COMMENT | |
| LOW | packages/app/firebase_spm.rb | 301 | # dynamic linkage. It's a no-op (returns immediately) when Firebase used | COMMENT |
| LOW | packages/app/firebase_spm.rb | 341 | COMMENT | |
| LOW | packages/app/firebase_spm.rb | 401 | # not `type: .dynamic`) -- see | COMMENT |
| LOW | packages/app/firebase_spm.rb | 481 | project.instance_variable_set(:@available_uuids, []) | COMMENT |
| LOW | packages/app/firebase_spm.rb | 601 | # counter, RN SPM integrity, static-linkage guard) and, when present, | COMMENT |
| LOW | packages/app/firebase_spm.rb | 621 | # This file is `require`d from each RNFB podspec, which CocoaPods evaluates | COMMENT |
| LOW | packages/app/firebase_spm.rb | 741 | # need to call this yourself. | COMMENT |
| LOW | packages/app/firebase_spm.rb | 821 | # doesn't actually link it. Linking a package product (same as | COMMENT |
| LOW | packages/app/firebase_spm.rb | 861 | # need to call this yourself. | COMMENT |
| LOW | packages/app/firebase_spm.rb | 921 | pkg.remove_from_project | COMMENT |
| LOW | packages/app/firebase_spm.rb | 941 | # This isn't specific to react-native-firebase -- the same class of bug, with | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1001 | # need to call this yourself. | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1021 | # resolved via the app's own project/scheme (SPM packages don't have | COMMENT |
| LOW | packages/app/firebase_spm.rb | 1041 | # paths for *every* product in that resolved package graph (not just | COMMENT |
| LOW | packages/app/ios_config.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/app/firebase_json.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/ios/RNFBApp/RNFBSharedUtils.h | 21 | #if __has_include(<FirebaseCore/FirebaseCore.h>) | COMMENT |
| LOW | packages/app/ios/RNFBApp/RNFBAppModule.mm | 21 | #import <FirebaseCore/FirebaseCore.h> | COMMENT |
| LOW | packages/app/__tests__/firebase_spm_test.rb | 181 | # element type of `AbstractTarget#build_configurations`. Exposes both `name` | COMMENT |
| LOW | packages/app/__tests__/firebase_spm_test.rb | 341 | def setup | COMMENT |
| LOW | …ckages/app/__tests__/firebase_spm_embed_script_test.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/__tests__/run_with_coverage.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/__tests__/firebase_spm_shape_test.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | packages/app/__tests__/firebase_spm_shape_test.rb | 21 | # | COMMENT |
| LOW | …ests__/iosTurboModuleConstantsReturnTypeParity.test.ts | 1 | import fs from 'fs'; | COMMENT |
| LOW | …e/firebase/common/ReactNativeFirebaseEventEmitter.java | 41 | private static final String TAG = "RNFB_EMITTER"; | COMMENT |
| LOW | …e/firebase/common/ReactNativeFirebaseEventEmitter.java | 61 | // Host identity we moved past while converging onto pending/attached; late attaches of this | COMMENT |
| LOW | …e/firebase/common/ReactNativeFirebaseEventEmitter.java | 81 | return sharedInstance; | COMMENT |
| LOW | packages/app/lib/internal/web/memidb/lib/scheduling.js | 1 | // When running within Node.js (including jsdom), we want to use setImmediate | COMMENT |
| LOW | …estore/ios/RNFBFirestore/RNFBFirestoreDocumentModule.h | 21 | #import <FirebaseCore/FirebaseCore.h> | COMMENT |
| LOW | …ore/ios/RNFBFirestore/RNFBFirestoreTransactionModule.h | 21 | #import <FirebaseCore/FirebaseCore.h> | COMMENT |
| 37 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/run-full-tests.sh | 75 | # In case of error send output to console for agentic troubleshooting | COMMENT |
| MEDIUM | scripts/e2e/lib/e2e-slot-env.sh | 301 | # Process-local / orchestration leftovers apply() clears — export if re-set for | COMMENT |
| MEDIUM | .github/workflows/scripts/android-e2e-detox.sh | 2 | # android-emulator-runner executes each script: line via sh -c; keep orchestration here. | COMMENT |
| MEDIUM | okf-bundle/monorepo-tooling/prepare-and-cache.md | 214 | **Bundling premise:** per [running e2e § Rules #3](../testing/running-e2e.md#rules) (canonical owner). The inner loop is | CODE |
| MEDIUM | okf-bundle/monorepo-tooling/prepare-and-cache.md | 230 | ### Tier C — event-driven e2e rerun (spike) | COMMENT |
| MEDIUM | okf-bundle/monorepo-tooling/prepare-and-cache.md | 240 | Chain: `lib` edit → `nx watch` rebuilds `dist` → Metro re-bundles → **`update-done`** → host `POST`s a re-run action to | CODE |
| MEDIUM | okf-bundle/monorepo-tooling/architecture-decisions.md | 156 | ## MonoTool-AD-9 — Dev watch rebuilds prepare; e2e TDD rerun is event-driven off Metro — **Deferred** | COMMENT |
| MEDIUM | okf-bundle/monorepo-tooling/index.md | 15 | In scope: `lerna`/`nx` task orchestration and caching, `react-native-builder-bob` outputs, the `packages/*` build graph, | CODE |
| MEDIUM | okf-bundle/monorepo-tooling/work-queue.md | 32 | | [MonoTool-AD-9](architecture-decisions.md#monotool-ad-9--dev-watch-rebuilds-prepare-e2e-tdd-rerun-is-event-driven-off- | CODE |
| MEDIUM⚡ | okf-bundle/monorepo-tooling/work-queue.md | 358 | - **Status:** Deferred — no incremental dev-watch/hot-reload loop exists today; **off the critical path** for MT1/MT2/MT | CODE |
| MEDIUM⚡ | okf-bundle/monorepo-tooling/work-queue.md | 361 | - Note: the OKF debug/release correction already landed separately as `docs: correct assertion about JS bundles in dev | CODE |
| MEDIUM⚡ | okf-bundle/monorepo-tooling/work-queue.md | 362 | - Analyze the event-driven e2e rerun (Metro `update-done`/`onBundleBuilt` → Jet `POST /rerun` on `8091`; [design Tier | CODE |
| MEDIUM | okf-bundle/testing/e2e-parallel-design.md | 517 | ### Host orchestration | COMMENT |
| MEDIUM | okf-bundle/testing/running-e2e.md | 73 | 6. **One e2e at a time (default)** — never overlap `:test-cover` runs on one host unless each run uses a distinct port/d | CODE |
| MEDIUM | okf-bundle/testing/running-e2e.md | 115 | #### Test-runner host orchestration (log triage only) | COMMENT |
| MEDIUM | okf-bundle/testing/running-e2e.md | 117 | **No commands to run from this section** — for interpreting `:test-cover` logs and CI artifacts only. Patch workflow: [d | CODE |
| MEDIUM | okf-bundle/testing/coverage-design.md | 198 | - **Transfer:** patched test-runner/mocha-remote WS only (`coverage-ready` → `pull-coverage` → `coverage-data` → `covera | CODE |
| MEDIUM | okf-bundle/ci-workflows/android.md | 71 | | Defer `server.run()` until host `POST /launch-ready` on control port **8091** (`RNFB_JET_DEFER_RUN=1`) | Jet patch + ` | CODE |
| MEDIUM | okf-bundle/ci-workflows/detox-patches.md | 31 | Related patches: `jet`, `mocha-remote-client`, `mocha-remote-server` — WS reconnect grace, coverage handshake, client ke | CODE |
| MEDIUM | okf-bundle/ci-workflows/index.md | 15 | * [Test-runner orchestration (log triage)](../testing/running-e2e.md#test-runner-host-orchestration-log-triage-only) — p | COMMENT |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 167 | ### E2E test app orchestration (Detox + Jet) | COMMENT |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 208 | | Defer `server.run()` until host `POST /launch-ready` on control port **8091** (`RNFB_JET_DEFER_RUN=1`) | Jet patch + ` | CODE |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 265 | # Detox orchestration inside the app process | COMMENT |
| MEDIUM | okf-bundle/ci-workflows/ios.md | 360 | # Disconnect resource context (+ orchestrate phase when defer-run enabled) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CONTRIBUTING.md | 103 | ### Step 1: Clone the repository | COMMENT |
| LOW | CONTRIBUTING.md | 110 | ### Step 2: Install test project dependencies | COMMENT |
| LOW | tests/README.md | 34 | ### Step 1: Install test project dependencies | COMMENT |
| LOW | tests/README.md | 44 | ### Step 2: Start Packager Script | COMMENT |
| LOW | tests/README.md | 60 | ### Step 3: Build Native App | COMMENT |
| LOW | tests/README.md | 81 | ### Step 4: Setting up android emulator and iOS simulator and Firestore emulator | COMMENT |
| LOW | tests/README.md | 97 | ### Step 5: Finally, run the tests | COMMENT |
| LOW | packages/auth/ios/RNFBAuth/RNFBAuthHelper.m | 833 | // NOTE: This variable has NO PURPOSE AT ALL, it is | COMMENT |
| LOW | packages/auth/ios/RNFBAuth/RNFBAuthHelper.m | 1511 | // NOTE: This variable has NO PURPOSE AT ALL, it is | COMMENT |
| LOW | packages/auth/ios/RNFBAuth/RNFBAuthHelper.m | 1643 | // NOTE: This variable has NO PURPOSE AT | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/firestore/e2e/Pipeline.e2e.js | 1706 | phone: '555-0200', | CODE |
| LOW | packages/firestore/e2e/Pipeline.e2e.js | 1835 | data.fullName.should.equal('John Doe'); | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 258 | currentUser: { email: 'user@example.com' }, | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 266 | expect(generateQrCodeUrl).toHaveBeenCalledWith('secret-key', 'user@example.com', '[DEFAULT]'); | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 277 | currentUser: { email: 'user@example.com' }, | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 286 | 'user@example.com', | CODE |
| LOW | packages/auth/__tests__/auth.test.ts | 298 | currentUser: { email: 'user@example.com' }, | CODE |
| LOW⚡ | packages/auth/e2e/phone.e2e.js | 1 | // const TEST_EMAIL = 'test@test.com'; | COMMENT |
| LOW | packages/auth/e2e/user.e2e.js | 1 | const TEST_EMAIL = 'test@test.com'; | CODE |
| LOW | packages/analytics/type-test.ts | 150 | initiateOnDeviceConversionMeasurementWithEmailAddress(analytics, 'user@example.com'); | CODE |
| LOW | packages/analytics/lib/index.ts | 1813 | * @param {string} emailAddress - Email address, properly formatted complete with domain name e.g, 'user@example.com'. | COMMENT |
| LOW | packages/analytics/lib/index.ts | 1833 | * @param hashedEmailAddress sha256-hashed of normalized email address, properly formatted complete with domain name e.g | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/update-firebase-sdk-versions.sh | 9 | # Usage: | COMMENT |
| LOW | scripts/repro-android-build-flake.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/e2e/export-slot-env.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/e2e/start-emulator-slotted.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/e2e/check-e2e-resources.sh | 17 | # Usage: | COMMENT |
| LOW | scripts/e2e/start-packager.sh | 9 | # Usage: | COMMENT |
| LOW | scripts/e2e/release-e2e-resources.sh | 7 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/app/firebase_spm.rb | 621 | # This file is `require`d from each RNFB podspec, which CocoaPods evaluates | COMMENT |
| MEDIUM | packages/app/ios_config.sh | 23 | # This file is installed as an Xcode build script in the project file | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ive/java/io/invertase/firebase/common/SharedUtils.java | 116 | * We need to check if app is in foreground otherwise the app will crash. | COMMENT |