[Onyx bump] Bump react-native-onyx from 3.0.86 to 3.0.88#95044
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
|
|
@abzokhattab 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] |
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariScreen.Recording.2026-07-01.at.14.59.47.movMacOS: Chrome / Safaribefore Screen.Recording.2026-07-01.at.14.43.58.movafter Screen.Recording.2026-07-01.at.14.53.50.mov |
abzokhattab
left a comment
There was a problem hiding this comment.
LGTM i am no longer getting the error after the upgrade
|
🚧 roryabraham has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/roryabraham in version: 9.4.26-0 🚀
|
|
@Julesssss @roryabraham @elirangoshen Is this one Internal? A few of the test steps can't be executed by the QA team. |
|
@m-natarajan QA what you can, ignore the rest.
This one we'll monitor sentry for |
Validated only the following steps: Functional smoke — no regression and Offline steps in the Test section |
|
🚀 Deployed to production by https://github.com/grgia in version: 9.4.27-2 🚀
Bundle Size Analysis (Sentry): |
Explanation of Change
This PR bumps Onyx from 3.0.86 to 3.0.88 (diff), which includes the following changes:
visibilitychangeprobe for IDB health, building on the reactive heal from Update version to 1.0.1-177 #780. Safari kills IDB connections for backgrounded tabs, so on return the burst of reconnect writes hits a dead cacheddbpand every write fails before the reactive heal can fire. Avisibilitychangelistener registered increateStore()runs a lightweight readonlycount()probe when the tab becomes visible; if it detects a stale connection it dropsdbpbefore the write burst arrives, so the first real op opens a fresh connection. AddsisStaleConnectionError()(union detector for InvalidStateError / backing-store corruption / connection-lost), aprobePromiseguard so a stale probe can't clear adbpalready replaced by a concurrent heal, classifiedreq.onerror(only dropsdbpfor genuine stale-connection errors), and diagnostic logging.classifyError, mapping engine dialects to a shared taxonomy (TRANSIENT,CAPACITY,INVALID_DATA,FATAL,UNKNOWN) inlib/storage/errors.ts. (2) Single-owner recovery:TRANSIENT/FATAL→ connection layer reopens/heals (retry skips them quietly),CAPACITY→ operation layer evicts LRU + retries,INVALID_DATA→ throws,UNKNOWN→ logs the full error shape once then bounded retry. (3) A session-level circuit breaker (lib/StorageCircuitBreaker.ts) trips when capacity failures storm (>50/60s) or evictions repeatedly free nothing (5 consecutive no-progress cycles), halting eviction/retry and emitting exactly one alert per window instead of one log line per failed write.Fixed Issues
$ #87864
$ #87873
PROPOSAL: N/A — Onyx version bump. The bundled Onyx changes resolve these storage-error investigations:
Tests
Both bundled Onyx PRs touch web IDB storage paths. The changes are defensive — under normal operation the App should look identical to
main; the value shows up in failure/recovery scenarios. Testing steps below are taken from the two Onyx PRs.Setup
bump-onyx-3.0.88).npm installunder Node 20.20.0, thennpm run web.Onyx).Functional smoke — no regression
mainsession.main.Storage circuit breaker (onyx#797) — Chrome quota simulation
Onyx).Storage circuit breaker tripped: 5 consecutive evictions freed no usable space. Halting eviction/retry for 60s to stop a storage failure storm.Stale-connection recovery (onyx#798) — Safari backgrounded tab
IDB visibilitychange probe: stale connection detected, dropping cached connection.Offline tests
This PR is an Onyx version bump; there is no new offline behavior beyond the existing Onyx offline-first invariants. Spot-check:
QA Steps
Same as tests.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)Avatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
N/A — Onyx web IDB storage paths; no native-specific changes.
Android: mWeb Chrome
iOS: Native
N/A — Onyx web IDB storage paths; no native-specific changes.
iOS: mWeb Safari
MacOS: Chrome / Safari
Behavioral recordings carried over from the bundled Onyx PRs.
Storage circuit breaker — react-native-onyx#797:
Before:
before.mov
After:
after.mov
visibilitychange probe / heal — react-native-onyx#798:
Probe on Safari (primary target platform):
Simulator.Screen.Recording.-.iPhone.17.-.2026-06-10.at.17.09.41.mov
Healed (simulated error):
healed.mov
Killed connection (simulated error):
killed.mp4
Exhausted (simulated error):
exhausted.mov
Healed (simulated on Safari):
safari_error.mp4
Killed connection (simulated on Safari):
safari_killed.mp4
Exhausted (simulated on Safari):
safari_exhausted.mp4
Healed offline (simulated on Chrome):
offline.mp4