Skip to content

Bump react-native-onyx 3.0.122 to 3.0.138 - #104984

Merged
mountiny merged 8 commits into
Expensify:mainfrom
software-mansion-labs:feat/react-native-onyx-860-array-deep-equal
Nov 12, 2026
Merged

mountiny merged 8 commits into
Expensify:mainfrom
software-mansion-labs:feat/react-native-onyx-860-array-deep-equal

Conversation

@jmusial

@jmusial jmusial commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Explanation of Change

Bumps react-native-onyx from 3.0.122 to 3.0.138.

When cache.merge gets an array that is deep-equal to the cached one, it now keeps the cached array instead of replacing it. Objects already worked this way (#765), and this extends it to arrays.

The rest of the 3.0.122 → 3.0.138 range only changes dev dependencies or removes unused ones.

Fixed Issues

$ #104725
PROPOSAL:

Tests

Use an account with a few hundred expenses that have violations. Compare this PR's E/App build with main, 5 runs each, using the medians. Spans appear in the JS console as [Sentry][<span name>] Ending span (<N>ms).

Web (desktop and mobile browsers)

  1. Open the Inbox and the browser console, filtered on Ending span.
  2. Reload the page.
  3. Note the first OnyxDerivedCompute_reportAttributes logged after the SearchForTodos request finishes. The earlier ones aren't affected.
  4. Open Spend and wait for the expenses to load.
  5. Go back to Inbox. Note ManualNavigateToInboxTab.

Native (iOS and Android)

  1. Open the Inbox and the JS logs, filtered on Ending span.
  2. Force-quit the app, open it again, and wait after the Inbox shows.
  3. Note the first OnyxDerivedCompute_reportAttributes logged after the SearchForTodos request finishes. The earlier ones aren't affected.
  4. Open Spend and wait for the expenses to load.
  5. Go back to Inbox. Note ManualNavigateToInboxTab.

Offline tests

Same as tests

QA Steps

  1. Open the Inbox and the browser console, filtered on Ending span.
  2. On web: Reload the page. On native: Force-quit the app, open it again, and wait after the Inbox shows.
  3. Open Spend and wait for the expenses to load.
  4. Go back to Inbox.

Everything should work the same as prod.

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 verified any copy / text that was added to the app 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 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 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.
  • If the PR adds or modifies the UI:
    • I asked an AI agent to review the changes for accessibility issues and addressed its findings.
    • I tested with a screen reader (VoiceOver on macOS) and verified all new/changed elements are reachable with a logical focus order.
    • I verified all new/changed elements have meaningful accessible names and roles.
    • I verified state changes are announced (e.g. checked/unchecked, expanded/collapsed, selected).
  • 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

Android: Native
android-native-pr860.mp4
Android: mWeb Chrome
android-chrome-pr860.mp4
iOS: Native
ios-native-pr860.mp4
iOS: mWeb Safari
ios-safari-pr860.mp4
MacOS: Chrome / Safari
web-chrome-pr860.mp4

@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. ⚠️

@jmusial jmusial changed the title Test branch for react native onyx 860 array deep equal react-native-onyx 860 array deep equal Oct 26, 2026
@jmusial jmusial changed the title react-native-onyx 860 array deep equal [HOLD on https://github.com/Expensify/App/pull/103351]react-native-onyx 860 array deep equal Oct 27, 2026
@codecov

codecov Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
see 12 files with indirect coverage changes

@fabioh8010

Copy link
Copy Markdown
Contributor

@jmusial The last bump hit staging, we can proceed with this one now.

Could you bump straight to 3.0.138? Your Onyx PR was published in 3.0.133 but all the other releases before and after are just library bumps, we don't need QA for them. See the last Onyx weekly update for reference.

Screenshot 2026-11-05 at 06 53 24

@jmusial jmusial changed the title [HOLD on https://github.com/Expensify/App/pull/103351]react-native-onyx 860 array deep equal Bump react-native-onyx 3.0.122 to 3.0.138 Nov 5, 2026
@jmusial

jmusial commented Nov 5, 2026

Copy link
Copy Markdown
Contributor Author

@MelvinBot review

@jmusial
jmusial marked this pull request as ready for review November 5, 2026 09:14
@jmusial
jmusial requested a review from a team as a code owner November 5, 2026 09:14
@melvin-bot
melvin-bot Bot requested review from bernhardoj and removed request for a team November 5, 2026 09:14
@melvin-bot

melvin-bot Bot commented Nov 5, 2026

Copy link
Copy Markdown

@bernhardoj 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]

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-05T09:31:08.090266Z 04fc081 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@MelvinBot

MelvinBot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

🤖 Web test steps verification results: ⚠️ partial

Verified basic Inbox and Spend rendering, but Spend shows “No expenses yet,” so the required performance fixture is unavailable. The five-run comparison against main, span timings, reload behavior, and offline behavior remain unverified.

Spend displays Expenses and No expenses yet.

Step Status
Required fixture: a few hundred expenses with violationsSpend showed “No expenses yet”; the required fixture is unavailable.
Spend displays Expenses and No expenses yet.
⚠️
Open InboxInbox displayed the Concierge conversation, welcome message, and composer.
✅
Inspect console filtered on Ending spanConsole inspection was unavailable through the supported testing interface; console errors were not checked.
⚠️
Reload and confirm Inbox loads correctlyNot attempted because the testing session restricts reloads to preserve authentication.
⚠️
Capture OnyxDerivedCompute_reportAttributes after SearchForTodosRequest completion and span duration were not measured.
⚠️
Open Spend and wait for expensesThe Expenses page rendered its empty state; loading expense rows remains unverified.
⚠️
Return to Inbox and capture ManualNavigateToInboxTabTesting stopped at the missing fixture; return navigation and timing were not verified.
⚠️
Compare PR against main: five runs each, using mediansThe required expense fixture and main baseline were unavailable. No timings or medians were produced.
⚠️
Repeat documented navigation offlineOffline mode could not be enabled through the supported testing interface.
⚠️
Read the PR’s documented testsThe tester could not independently retrieve the PR; it followed the documented steps supplied in its task.
⚠️

view run · view recording

@bernhardoj

bernhardoj commented Nov 5, 2026 •

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.
  • If the PR adds or modifies the UI:
    • I asked an AI agent to review the changes for accessibility issues and addressed its findings.
    • I tested with a screen reader (VoiceOver on macOS) and verified all new/changed elements are reachable with a logical focus order.
    • I verified all new/changed elements have meaningful accessible names and roles.
    • I verified state changes are announced (e.g. checked/unchecked, expanded/collapsed, selected).
  • 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

@bernhardoj

bernhardoj commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Note OnyxDerivedCompute_reportAttributes logged after the SearchForTodos request finished.

@jmusial I saw multiple OnyxDerivedCompute_reportAttributes logs. 2 of them were logged before the SearchForTodos request finished. A few were logged after the SearchForTodos request finished.

a.mp4

@jmusial

jmusial commented Nov 6, 2026

Copy link
Copy Markdown
Contributor Author

Note OnyxDerivedCompute_reportAttributes logged after the SearchForTodos request finished.

@jmusial I saw multiple OnyxDerivedCompute_reportAttributes logs. 2 of them were logged before the SearchForTodos request finished. A few were logged after the SearchForTodos request finished.

a.mp4

reportAttributes runs every time its inputs change, so several logs are expected. Only the first one after SearchForTodos finishes is relevant (63 ms in your video). SearchForTodos sends back arrays we already have, like violations. Before, Onyx replaced each one with a new array, so it counted as changed and triggered recomputes and re-renders. Now Onyx keeps the cached array when the new one is equal, so there's less to recompute.

I'll clarify manual test steps.

@bernhardoj

Copy link
Copy Markdown
Contributor

Web this PR:

OnyxDerivedCompute_reportAttributes
40ms, 38ms, 67ms, 45ms, 73ms

ManualNavigateToInboxTab
890ms, 921ms, 893ms, 938ms, 881ms

Web in main:

OnyxDerivedCompute_reportAttributes
32ms, 42ms, 25ms, 39ms, 28ms

ManualNavigateToInboxTab
565ms, 598ms, 499ms, 550ms, 578ms

@jmusial hmm, looks like this PR is somehow slower

@jmusial

jmusial commented Nov 6, 2026

Copy link
Copy Markdown
Contributor Author

Web this PR:

OnyxDerivedCompute_reportAttributes 40ms, 38ms, 67ms, 45ms, 73ms

ManualNavigateToInboxTab 890ms, 921ms, 893ms, 938ms, 881ms

Web in main:

OnyxDerivedCompute_reportAttributes 32ms, 42ms, 25ms, 39ms, 28ms

ManualNavigateToInboxTab 565ms, 598ms, 499ms, 550ms, 578ms

@jmusial hmm, looks like this PR is somehow slower

This is strange, the numbers I got (re-reasured today morning)

Span main (Onyx 3.0.122) This PR (Onyx 3.0.138) Change
OnyxDerivedCompute_reportAttributes (first after SearchForTodos) 26, 26, 24, 26 ms (median 26 ms) 17, 17, 20, 17 ms (median 17 ms) −9 ms (−35%)
ManualNavigateToInboxTab 180, 173, 169, 171 ms (median 172 ms) 139, 133, 136, 132 ms (median 134.5 ms) −37.5 ms (−22%)

Looking @ your numbers: a 60% jump in navigation (565 to 893 ms) seems too big to be caused by an array-equality check (which my change was)...

@bernhardoj

Copy link
Copy Markdown
Contributor

Hmm, yeah, that's so weird. I tried without switching branches and only changed the onyx version, and the same thing happened.

Looking at your numbers (especially ManualNavigateToInboxTab), it's really small. I got small numbers too in staging. Do you test it on an ad hoc build?

I tested this locally on a dev build.

@jmusial

jmusial commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor Author

It's my local dev, but yeah I think we should do an ad hoc test.

Edit: @bernhardoj how big is your account ?

Edit 2: remeasured with 4x slowdown, 4x, alternating builds (ABBA, 8 reloads each). Numbers are closer to yours, but PR change holds the gain. Looking @ the results the order may matter - second series is much faster for ManualNavigateToInboxTab
SFT - SearchForTodos / OnyxDerivedCompute_reportAttributes
MNTIT - ManualNavigateToInboxTab

Run main (3.0.122) first after SFT PR (3.0.138) first after SFT main total after SFT PR total after SFT main MNTIT PR MNTIT
1 155 ms 80 ms 266 ms 258 ms 807 ms 697 ms
2 146 ms 94 ms 252 ms 219 ms 717 ms 859 ms
3 155 ms 91 ms 158 ms 204 ms 669 ms 658 ms
4 173 ms 96 ms 267 ms 217 ms 692 ms 847 ms
5 148 ms 99 ms 337 ms 227 ms 727 ms 521 ms
6 157 ms 93 ms 269 ms 208 ms 687 ms 503 ms
7 141 ms 99 ms 254 ms 218 ms 660 ms 513 ms
8 155 ms 99 ms 253 ms 216 ms 677 ms 481 ms
Median 155 ms 95 ms 260 ms 217.5 ms 689.5 ms 589.5 ms
Change −60 ms (−39%) −42.5 ms (−16%) −100 ms (−15%)

@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here.

@github-actions

This comment has been minimized.

@bernhardoj

bernhardoj commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Ad-hoc:
SFT: 22ms, 24ms, 23ms, 26ms, 24ms
MNTIT: 187ms, 197ms, 206ms, 199ms, 163ms

Staging:
SFT: 10ms, 8ms, 8ms, 8ms, 8ms
MNTIT: 164ms,165ms, 168ms, 171ms, 153ms

Retested with ad-hoc and staging still faster 🤔

how big is your account ?

I have 1152 expenses in total.

@jmusial

jmusial commented Nov 9, 2026

Copy link
Copy Markdown
Contributor Author

Ad-hoc: SFT: 22ms, 24ms, 23ms, 26ms, 24ms MNTIT: 187ms, 197ms, 206ms, 199ms, 163ms

Staging: SFT: 10ms, 8ms, 8ms, 8ms, 8ms MNTIT: 164ms,165ms, 168ms, 171ms, 153ms

Retested with ad-hoc and staging still faster 🤔

how big is your account ?

I have 1152 expenses in total.

Interesting...

I rechecked on Main Applause acc (4,102 reports) and got

Run Staging _reportAttributes (first after SFT) Ad hoc _reportAttributes (first after SFT) Staging MNTIT Ad hoc MNTIT
1 32 ms 18 ms 104 ms 84 ms
2 36 ms 26 ms 105 ms 86 ms
3 35 ms 26 ms 95 ms 80 ms
4 35 ms 28 ms 103 ms 82 ms
5 26 ms 27 ms 103 ms 81 ms
6 39 ms 25 ms 95 ms 88 ms
7 35 ms 29 ms 102 ms 84 ms
8 37 ms 26 ms 104 ms 82 ms
Median 35 ms 26 ms (−26%) 103 ms 83 ms (−19%)

I msgd you on slack, could you share you're accounts onyx dump ? I'll try to figure out where the differences come from

@jmusial

jmusial commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor Author

@bernhardoj I could not reproduce a slowdown on your account through copilot :( Please take a look @ below and check, maybe we were doing sth different that would cause the discrepancy ?

  • ManualNavigateToInboxTab: −43% with only Onyx swapped in a local dev build, −47% on ad hoc vs staging.
  • First OnyxDerivedCompute_reportAttributes after SearchForTodos: −11% (dev, Onyx only), −32% (ad hoc vs staging).

Metrics

Metric Definition
reportAttributes, first after SFT Duration of the first OnyxDerivedCompute_reportAttributes span that ends after the SearchForTodos response arrives
reportAttributes, total after SFT Sum of all OnyxDerivedCompute_reportAttributes spans that end after SearchForTodos in that run (includes the Spend and Inbox navigation)
ManualNavigateToInboxTab The span for clicking the Inbox tab while on the Spend tab

Spans are read from the [Sentry][<span>] Ending span (<N>ms) console line in src/libs/telemetry/activeSpans.ts, which is printed in every build.

Method

  • Chromium driven by Playwright, macOS desktop.
  • CPU throttling through CDP Emulation.setCPUThrottlingRate (4x unless stated otherwise).
  • Forced GC (HeapProfiler.collectGarbage) before every reload and every tab click, because GC pauses in a large dev heap otherwise swing the spans.
  • Versions run in alternating blocks (ABBA), with the same number of runs per version. I report medians.
  • Your account is loaded through Copilot (delegate session). Switching to it runs OpenApp, and every successful OpenApp/ReconnectApp triggers SearchForTodos (src/libs/Middleware/LoadPostDataForOpenOrReconnect.ts), the same as a normal login.

Steps per run

  1. Set CPU throttling.
  2. Force GC, wait 1 s.
  3. Reload the page (dev) or open /r/<reportID> (ad hoc, staging). The run's clock starts here.
  4. Wait for the app to settle: 50 s (dev, 4x), 45 s (ad hoc and staging, 4x), 25 s (1x).
  5. Force GC, wait 1 s, click the Spend tab. Wait 15 s (4x) or 6 s (1x).
  6. Force GC, wait 1 s, click the Inbox tab. Wait 8 s (4x) or 4 s (1x).
  7. Reset throttling and collect the spans.

SearchForTodos timing: on dev from the [Network] Finished API request log, on ad hoc and staging from Playwright's requestfinished event.

Accounts

Account Reports Transactions Transactions with violations Workspaces
Your account (Copilot) 1,058 609 394 61
Our account A 2,135 3,399 1,851 261
Our account B (QA) 4,102 4,070 1,357 206

Counts are the locally cached Onyx keys (report_, transactions_, transactionViolations_, policy_), not server totals.

1. Your account, local dev, only Onyx swapped (4x)

  • Order: PR (2 runs), main (4), PR (2).
Metric (ms) PR 3.0.138 runs PR median main 3.0.122 runs main median Change
reportAttributes, first after SFT 77, 124, 139, 106 115 132, 125, 152, 127 129.5 −11%
reportAttributes, total after SFT 201, 145, 157, 122 151 149, 143, 239, 144 146.5 +3%
ManualNavigateToInboxTab 1871, 1045, 966, 900 1005.5 1792, 1760, 1822, 1665 1776 −43%

The first PR run was the first load after logging in (warm-up). Without it, the PR median for ManualNavigateToInboxTab is 966 ms.

2. Your account, ad hoc vs staging (4x)

Metric (ms) ad hoc runs ad hoc median staging runs staging median Change
reportAttributes, first after SFT 46, 80, 85, 67 73.5 108, 98, 109, 112 108.5 −32%
reportAttributes, total after SFT 129, 80, 85, 67 82.5 207, 99, 110, 113 111.5 −26%
ManualNavigateToInboxTab 1002, 495, 435, 459 477 1020, 1082, 727, 777 898.5 −47%

The two builds also differ by 1,290 commits of app code, so this test alone cannot isolate Onyx. Test 1 does.

@bernhardoj

Copy link
Copy Markdown
Contributor

I finally see it faster in this PR after following the above steps. Maybe rebuild the web after reinstalling onyx did help 🤔

  • Order: PR (2 runs), main (4), PR (2).
Metric (ms) PR 3.0.138 runs PR median main 3.0.122 runs main median Change
reportAttributes, first after SFT 123, 136, 131, 128 129.5 169, 175, 180, 174 174.5 −25%
ManualNavigateToInboxTab 1735, 1628, 1686, 1620 1624 3089, 3072, 2970, 3252 3080.5 −47%

@melvin-bot
melvin-bot Bot requested a review from mountiny November 11, 2026 08:54
@jmusial

jmusial commented Nov 12, 2026

Copy link
Copy Markdown
Contributor Author

I finally see it faster in this PR after following the above steps. Maybe rebuild the web after reinstalling onyx did help 🤔

I think that rsbuild is caching node_modules so hot swapping does not work :(

@mountiny
mountiny merged commit 1821f2f into Expensify:main Nov 12, 2026
50 of 58 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here.

@github-actions

Copy link
Copy Markdown
Contributor

@OSBotify

Copy link
Copy Markdown
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/mountiny in version: 9.5.38-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 cancelled 🔪
🍎 iOS 🍎 cancelled 🔪

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.

6 participants