Skip to content

chore(deps): Update NitroSQLite to 9.8.1 - #101437

Open
chrispader wants to merge 6 commits into
Expensify:mainfrom
margelo:@chrispader/chore/update-nitro-sqlite-9.8.0
Open

chrispader wants to merge 6 commits into
Expensify:mainfrom
margelo:@chrispader/chore/update-nitro-sqlite-9.8.0

Conversation

@chrispader

@chrispader chrispader commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

NitroSQLite 9.6.0 still needs local fixes for rollback errors and iOS database storage. The published 9.8.1 release includes those fixes and accepts the app's existing NitroModules 0.36.3. This PR upgrades SQLite and removes both local SQLite patches without changing NitroModules, NitroFetch, or Nitrogen. NewDot and the companion HybridApp PR opt into the upstream Application Support location in their respective Info.plist files.

@NicolasBonet

Explanation of Change

The published NitroSQLite 9.8.1 package replaces the temporary archive built from an upstream commit. The dependency now resolves from the package registry, so the vendored archive and its provenance note are removed.

The upstream batch executor preserves the original error when rollback also fails. Its per-database migration replaces the old OnyxDB-specific patch. NewDot and HybridApp each set RNNitroSQLite_DatabaseLocation to ApplicationSupport in their host Info.plist, so NitroSQLite needs no local patch. NitroSQLite 9.8.1 accepts NitroModules 0.36.3, allowing this change to retain NitroFetch 1.5.4, Nitrogen 0.36.3, and the existing Android certificate-pinning patch. A separate follow-up PR upgrades the Nitro runtime and its affected packages.

ios/Podfile.lock changes only the RNNitroSQLite version and checksum. The companion HybridApp lockfile pins NitroSQLite 9.8.1 while retaining NitroModules 0.36.3 and NitroFetch 1.5.4.

Fixed Issues

$ #101448

MOBILE-EXPENSIFY: https://github.com/Expensify/Mobile-Expensify/pull/14129

No separate approved proposal applies to this dependency update.

Tests

Manual device verification is pending.

  1. Upgrade an iOS installation that has existing Onyx data. Open a chat, send a message, force-close and reopen the app, and verify that the message and sign-in state persist.
  2. In the iOS Files app, open the New Expensify folder. Verify that OnyxDB and its journal files are absent while a downloaded attachment remains visible. Repeat the upgrade and Files check in a hybrid iOS build using the companion Mobile-Expensify PR.
  3. Repeat the chat and relaunch check on Android. Verify that the message and sign-in state persist.
  4. On a disposable iOS simulator with a full test volume, trigger a failed batch write. Verify that the original SQLite storage error appears instead of a secondary rollback error, then free space and verify that the app resumes writing.
  5. Verify that no errors appear in the JS console during the normal flows above.

Offline tests

  1. Sign in while online, switch to airplane mode, compose a chat message, and relaunch the native app. Verify that the pending message and sign-in state remain available from local storage.
  2. Reconnect and verify that the message sends once without a duplicate. On iOS, repeat the offline relaunch after upgrading an installation whose database previously lived in Documents.

QA Steps

  1. Upgrade standalone NewDot and hybrid iOS staging builds with existing chat history, send a message, force-close and reopen, and verify that the message and sign-in state persist. In the Files app, verify that no OnyxDB files appear in the app's folder while downloads remain visible.
  2. On Android staging, send a message, force-close and reopen, and verify that the message and sign-in state persist.
  3. On each native platform, go offline, compose a message, reopen the app, and verify that it remains pending. Reconnect and verify that it sends once without an error banner.

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

No screenshots or videos are included because this dependency and plist change has no visible UI.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ This PR is possibly changing native code and/or updating libraries, it may cause problems with HybridApp. Please check if any patch updates are required in the HybridApp repo and run an AdHoc build to verify that HybridApp will not break. Ask Contributor Plus for help if you are not sure how to handle this. ⚠️

@chrispader chrispader changed the title chore(deps): Update NitroSQLite to 9.8.0 [HOLD on #14129] [Task 2/2] chore(deps): Update NitroSQLite to 9.8.0 Sep 17, 2026
@chrispader chrispader changed the title [HOLD on #14129] [Task 2/2] chore(deps): Update NitroSQLite to 9.8.0 [HOLD on Mobile-Expensify#14129] [Task 2/2] chore(deps): Update NitroSQLite to 9.8.0 Sep 17, 2026
@chrispader

Copy link
Copy Markdown
Contributor Author

@MelvinBot please create an Expensify/App issue to track updating NitroSQLite from 9.6.0 to the latest upstream code, packaged in this PR as an unreleased 9.8.0 snapshot at 4f95bbe. Assign the issue to @chrispader and add its full URL to this PR's ### Fixed Issues section. The existing patch-tracking issue is context; the new issue should track the dependency update.

Please include the main reasons for the update:

Answered by Codex, instructed by Chris.

@MelvinBot

Copy link
Copy Markdown
Contributor

Created chore(deps): Update NitroSQLite from 9.6.0 to 9.8.0 and assigned it to chrispader.

The issue tracks the dependency update itself: the 9.8.0 snapshot from 4f95bbe, the two local patches upstream now replaces (Application Support location + safe migration and the batch rollback error handling), the single-materialization and per-connection serialization improvements, plus iOS performance mode and memory management. [Patch Tracking] react-native-nitro-sqlite+9.6.0+001+store-database-outside-documents is referenced as context, and a follow-up note covers swapping the vendored tarball for the published release.

I also updated this PR's ### Fixed Issues section: the $ link now points at the new issue, and the old patch-tracking issue stays listed as context alongside the Mobile-Expensify link.

@chrispader chrispader changed the title [HOLD on Mobile-Expensify#14129] [Task 2/2] chore(deps): Update NitroSQLite to 9.8.0 [HOLD on https://github.com/Expensify/Mobile-Expensify/pull/14129] [Task 2/2] chore(deps): Update NitroSQLite to 9.8.0 Sep 17, 2026
@chrispader
chrispader marked this pull request as ready for review September 17, 2026 17:18
@chrispader
chrispader requested a review from a team as a code owner September 17, 2026 17:18
@melvin-bot
melvin-bot Bot requested review from ikevin127 and removed request for a team September 17, 2026 17:18
@melvin-bot

melvin-bot Bot commented Sep 17, 2026

Copy link
Copy Markdown

@ikevin127 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button]

@chrispader chrispader changed the title [HOLD on https://github.com/Expensify/Mobile-Expensify/pull/14129] [Task 2/2] chore(deps): Update NitroSQLite to 9.8.0 chore(deps): Update NitroSQLite to 9.8.0 Sep 17, 2026
@chrispader

Copy link
Copy Markdown
Contributor Author

@MelvinBot can you please request review from @NicolasBonet 🙌🏼

@MelvinBot

Copy link
Copy Markdown
Contributor

Requested a review from NicolasBonet 🙌🏼

Current reviewers on this PR: ikevin127, NicolasBonet.

@chrispader
chrispader force-pushed the @chrispader/chore/update-nitro-sqlite-9.8.0 branch from ec26355 to 719b37c Compare September 17, 2026 17:45
@NicolasBonet

Copy link
Copy Markdown
Contributor

@ikevin127 could you please follow the steps in here: #96531 (Tests A, B and C)? 🙏

@chrispader chrispader changed the title chore(deps): Update NitroSQLite to 9.8.0 [WIP] chore(deps): Update NitroSQLite to 9.8.0 Sep 17, 2026
@chrispader

Copy link
Copy Markdown
Contributor Author

I've just noticed that i've unnecessarily bumped the peer dependency range for NitroModules in the last NitroSQLite release, i'm going to lower that again in 9.8.1, to avoid scope creep in this PR by bumping NitroModules + NitroFetch.

I'll ping @ikevin127 once i've updated the PR!

@ikevin127

Copy link
Copy Markdown
Contributor

Reviewer Checklist

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I included screenshots or videos for tests on all platforms
  • I verified that the composer does not automatically focus or open the keyboard on mobile unless explicitly intended. This includes checking that returning the app from the background does not unexpectedly open the keyboard.
  • I verified tests pass on all platforms & I tested again on:
    • Android: HybridApp
    • Android: mWeb Chrome
    • iOS: HybridApp
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: HybridApp
Android: mWeb Chrome
iOS: HybridApp
iOS: mWeb Safari
MacOS: Chrome / Safari

@ikevin127

Copy link
Copy Markdown
Contributor

I'll ping @ikevin127 once i've updated the PR!

I'll hold on reviewing until you give the green light 🙌

@chrispader chrispader changed the title [WIP] chore(deps): Update NitroSQLite to 9.8.0 [WIP] [Task 1/2] chore(deps): Update NitroSQLite to 9.8.1 Sep 17, 2026
@chrispader chrispader changed the title [WIP] [Task 1/2] chore(deps): Update NitroSQLite to 9.8.1 [Task 1/2] chore(deps): Update NitroSQLite to 9.8.1 Sep 17, 2026
@chrispader

Copy link
Copy Markdown
Contributor Author

@ikevin127 the PR is ready now!

@chrispader chrispader changed the title [Task 1/2] chore(deps): Update NitroSQLite to 9.8.1 chore(deps): Update NitroSQLite to 9.8.1 Sep 17, 2026
Comment thread package.json
"react-native-nitro-fetch": "1.5.4",
"react-native-nitro-modules": "0.36.3",
"react-native-nitro-sqlite": "9.6.0",
"react-native-nitro-sqlite": "9.8.1",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 package.json:203 (behaviour lands in src/libs/ExportOnyxState/index.native.ts:19)

Settings → Troubleshoot → Export Onyx state breaks silently on iOS and Android.

9.8.1's cpp/operations.cpp is byte-identical to 9.8.0:

void sqliteOpenDb(const std::string& dbName, const std::string& docPath) {
  std::lock_guard lifecycleLock(dbLifecycleMutex);
  {
    std::lock_guard lock(dbMapMutex);
    if (dbMap.contains(dbName)) {
      throw NitroSQLiteException::DatabaseAlreadyOpen(dbName);
    }
  }

and the JS layer still rejects it before the native call is even reached:

// 9.8.1 lib/module/operations/session.js
export function open(options) {
  openDatabaseQueue(options.name); // throws "Database OnyxDB is already open."

We open OnyxDB a second time here, while Onyx's SQLiteProvider already holds it:

// src/libs/ExportOnyxState/index.native.ts
onyxDb = open({name: CONST.DEFAULT_DB_NAME});

9.6.0 tolerated this because sqliteOpenDb just did dbMap[dbName] = db;. The throw happens inside the new Promise executor in readFromOnyxDatabase, and TroubleshootPage.tsx:92 has no .catch, so the user taps Export Onyx state and gets nothing at all: no share sheet, no error, no log. That is our primary tool for debugging user reports.

This is the exact blocker the deleted patches/react-native-nitro-sqlite/details.md recorded:

its new per-database queue breaks second opens of the same database (used by src/libs/ExportOnyxState/index.native.ts)

The SQLITE_THREADSAFE=0 half of that note is genuinely fixed (9.8.1's podspec still defaults threadSafe to true). The second-open half is not, and the note documenting it is being deleted.

Fix belongs in src/libs/ExportOnyxState/index.native.ts: reuse Onyx's existing connection instead of opening a new one, or read through Onyx's own API. At minimum add a .catch in TroubleshootPage.tsx so it fails loudly.

Please also add "Troubleshoot → Export Onyx state, verify the share sheet opens with a populated dump" to the Tests section and run it on both platforms.


// NitroSQLite now migrates each database when it opens, using the caller's database name.
const nitroSQLiteContent = fs.readFileSync(path.resolve(__dirname, '../../node_modules/react-native-nitro-sqlite/cpp/hybridObjects/HybridNitroSQLite.cpp'), 'utf8');
expect(nitroSQLiteContent).toContain('return migrateDatabase(dbName,');

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 tests/unit/MoveFilesOutOfDocumentsTest.ts:174

I confirmed the string is present in 9.8.1 (cpp/hybridObjects/HybridNitroSQLite.cpp:86), so it passes today. Two problems remain. It is a raw substring match on upstream C++, so any reformat upstream breaks our build for no real reason. And it does not assert what the it() title claims, there is no longer anything tying CONST.DEFAULT_DB_NAME to the migration.

Meanwhile the thing that can actually regress silently is unguarded. ios/OnLoad.mm falls back without failing:

if (databaseLocation != nil && ![databaseLocation isEqualToString:@"Documents"]) {
  NSLog(@"Invalid RNNitroSQLite_DatabaseLocation value provided (%@). ... Falling back to \"Documents\".", databaseLocation);
}

A typo, or someone dropping the key in a future Info.plist edit, puts OnyxDB straight back into the user-visible Documents folder, which is the bug #96531 fixed, and nothing in CI notices. Swap the C++ grep for something that guards what we own:

it('keeps the iOS database location opted into Application Support', () => {
    const infoPlist = fs.readFileSync(path.resolve(__dirname, '../../ios/NewExpensify/Info.plist'), 'utf8');

    // NitroSQLite silently falls back to the user-visible Documents directory when this key is
    // missing or misspelled, which would put OnyxDB back in the iOS Files app.
    expect(infoPlist).toMatch(/<key>RNNitroSQLite_DatabaseLocation<\/key>\s*<string>ApplicationSupport<\/string>/);
});

Comment thread package.json
"react-native-nitro-fetch": "1.5.4",
"react-native-nitro-modules": "0.36.3",
"react-native-nitro-sqlite": "9.6.0",
"react-native-nitro-sqlite": "9.8.1",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 package.json:203

9.8.1 still routes every async op through a per-database JS queue, one at a time with a setImmediate hop between each:

return queueOperationAsync(dbName, () => executeAsyncNative(dbName, query, params));

Onyx fans out and expects overlap:

return Promise.all(keyChunks.map((keyChunk) => provider.store.executeAsync(command, keyChunk)))

On a High Traffic account that is many chunks now running strictly sequentially instead of concurrently on the native pool. Please post a TTI comparison against main with a High Traffic account on a real low-end device, both platforms, before this merges.

"Send a message and relaunch" will not surface it.

Comment thread package.json
"react-native-nitro-fetch": "1.5.4",
"react-native-nitro-modules": "0.36.3",
"react-native-nitro-sqlite": "9.6.0",
"react-native-nitro-sqlite": "9.8.1",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 package.json:203 (new, from the 9.8.1 respin)

9.8.1's shipped nitrogen/generated/ C++ was generated by nitrogen 0.37.1 (devDependencies.nitrogen: "0.37.1"), while this PR keeps react-native-nitro-modules pinned at 0.36.3.

The peer range that would have caught a mismatch was hand-relaxed from >=0.37.1 to >=0.35.0 specifically to allow this, so it is now a declaration rather than a check.

I did verify every NitroModules header the generated and hand-written C++ includes exists in the installed 0.36.3:

AnyMapUtils.hpp, ArrayBuffer.hpp, ArrayBufferHolder.hpp, DateToChronoDate.hpp,
DefaultConstructableObject.hpp, HybridObject.hpp, HybridObjectRegistry.hpp,
JHybridObject.hpp, JSIConverter.hpp, JSIHelpers.hpp, NitroDefines.hpp,
Null.hpp, Promise.hpp, PropNameIDCache.hpp, RuntimeError.hpp

none missing, so it looks buildable. That is not proof though, signatures inside those headers can still have moved between 0.36.3 and 0.37.1. The only thing that settles it is an actual native build.

The HybridApp bot already asked for one on this PR, so please run AdHoc builds for both iOS and Android (standalone and hybrid) and link them here.

Comment thread package.json
"react-native-nitro-fetch": "1.5.4",
"react-native-nitro-modules": "0.36.3",
"react-native-nitro-sqlite": "9.6.0",
"react-native-nitro-sqlite": "9.8.1",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 package.json:203

9.8.1's podspec still picks build defaults when we say nothing:

app_config = app_package.fetch("nitroSQLite", {})
thread_safe_value = app_config.fetch("threadSafe", true)
performance_mode = app_config.fetch("performanceMode", true)

performanceMode defaulting to true newly enables -DSQLITE_DQS=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_OMIT_SHARED_CACHE=1 ... on the iOS pod, and Android gets none of it (it reads rootProject.properties['nitroSqliteFlags'], which we do not set).

Two platforms compiling SQLite differently, off defaults we never chose. Suggest pinning them so the build is reproducible and the choice is on the record:

"nitroSQLite": {
    "threadSafe": true,
    "performanceMode": true
}

Comment on lines +98 to +99
<key>RNNitroSQLite_DatabaseLocation</key>
<string>ApplicationSupport</string>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 ios/NewExpensify/Info.plist:98

Correct. Key and value match 9.8.1's ios/OnLoad.mm, and the companion PR sets the same pair. Neither plist sets RNNitroSQLite_AppGroup, which matters because the app-group branch returns before RNNitroSQLite_DatabaseLocation is ever read.

Worth a comment in the plist or a note on the issue so nobody adds an App Group later and quietly reverts the Files-app fix.

@ikevin127

Copy link
Copy Markdown
Contributor

Status

Solved: scope creep, Podfile.lock churn, project.pbxproj, the nitro-fetch patch rename, companion PR scope.

Remaining before I can approve:

  1. 🔴 Fix the ExportOnyxState second open, or this ships with Export Onyx state dead on both native platforms.
  2. 🟠 Retarget the Jest assertion at the Info.plist key.
  3. 🟠 Post High Traffic TTI numbers vs main.
  4. 🟡 Post AdHoc builds confirming 9.8.1 compiles against NitroModules 0.36.3.
  5. 🟡 Reconcile the checklist with "verification is pending", and add the Export Onyx state step.

@chrispader Holding off on running Tests A/B/C until the Export Onyx state fix lands, since I would have to re-run them afterwards anyway.

Short version: the respin fixed everything that was noise (scope creep, lockfile churn, pbxproj, patch rename), and I confirmed 9.8.0 → 9.8.1 is purely the peer-range relax with zero source changes.

The 🔴 ExportOnyxState regression is therefore completely untouched and still blocks, along with the test assertion, the serialization perf question, and a new 🟡 about 9.8.1's nitrogen-0.37.1 codegen running against pinned NitroModules 0.36.3 (headers all check out, but it needs a real build).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants