You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Due for payment 2026-09-02] Android - Expensify Card - "Your data is" is shown instead of "Your data is secure" #98499
👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:
Identify the pull request that introduced this issue and revert it.
Classification: Frontend bug (fix lands in Expensify/App) Causing PR: #96372 - "upgrade react native to 0.86.0" by @jakubstec (Medium confidence) Related Issues: None found
Recommendation: ROLL FORWARD
The regression traces to the React Native 0.85.3 → 0.86.0 upgrade in this release, not to any change in the screen's own code. A major RN version bump cannot be cleanly reverted (dozens of dependent patches and follow-up PRs), so this should be fixed forward with a targeted layout tweak on the footer. Because the symptom is cosmetic and only reproduces on Android at the minimum device font size on a secondary informational link, demoting it from deploy-blocker status is also a reasonable call for the deployer.
Assigned: @jakubstec (PR author), @mountiny and @roryabraham (approving reviewers) from the RN upgrade PR. Labels: No change. Kept DeployBlockerCash (App/frontend fix). DeployBlocker was not present, so nothing to remove.
📋 Detailed Analysis
Evidence
The truncated string is bankAccount.yourDataIsSecure (Your data is secure), rendered only in the "Add bank account" entry point shown when you try to issue an Expensify Card without a verified bank account.
Reproduces on staging only, Android only, at minimum font size, and specifically on the second entry into the flow (i.e. after the screen has been unmounted and remounted).
The screen's own code did not change in this release. VerifiedBankAccountFlowEntryPoint.tsx was last modified 2026-07-29 (commit 7a034fd), which is already in production (compare production...7a034fd → behind).
The shared components that render the text — TextLink.tsx and Text.tsx — also did not change in this release (last real edits months ago).
The one release-level change that plausibly alters native Android text layout is the RN upgrade: package.json shows react-native0.85.3 → 0.86.0, with all react-native+0.85.3+* patches removed and a new react-native+0.86.0+* patch set added by #96372 (in the 9.4.53 checklist, chronological item Some initial fixes and code style updates #1).
Several of the newly-added 0.86.0 patches target Fabric view recycling / state on clone (003+disableTextInputRecycling, 008+copyStateOnClone, 012+fixScrollViewState, 013+fix-mask-persisting-recycling). Stale measurement/layout on a recycled view after remount is exactly the class of bug that fits the "only on the 2nd navigation" reproduction.
Verification
Affected file: src/pages/ReimbursementAccount/VerifiedBankAccountFlowEntryPoint.tsx, footer at L344-L360:
TextLink sets no numberOfLines, so the truncation is not a JS-level numberOfLines={1} ellipsis (which would render Your data is s...). Instead secure wraps to a clipped second line — a native measurement/height issue rather than a code change in this component.
Confirmed #96372 modifies package.json (the react-native dependency) and the entire patches/react-native/ set; git history for the screen and text components shows no in-release change.
Root Cause
The RN 0.86.0 upgrade changed Fabric text measurement / view-recycling behavior on Android. On the second visit to the entry point the footer row is laid out from a recycled/cloned view whose height is computed for a single line, so when Your data is secure wraps at minimum font size the second line (secure) is clipped, leaving only Your data is. The screen's own React code is unchanged, so no app-side UI PR introduced it — the trigger is the platform upgrade.
Suggested targeted fix (roll forward)
Make the footer resilient to the wrap instead of relying on native single-line height, e.g. allow the secure link/row to shrink and control wrapping explicitly (styles.flexShrink1 on the pressable, numberOfLines={1} + adjustsFontSizeToFit on the link, or flexWrap), or key the entry-point ScrollView/screen so it does not reuse a recycled layout. @jakubstec / @mountiny / @roryabraham can best judge whether this is better handled with an additional RN 0.86 recycling patch.
The issue was reproduced by the original reporter on the same device after a fresh install. It was originally reproduced on two devices:
Samsung Galaxy S25 FE / Android 16 (Reproduced after fresh install)
Samsung A54 / Android 16 (Reproduced after fresh install)
Issue repro in both Playstore build and GH apk build
changed the title [-][Due for payment 2026-08-21] Android - Expensify Card - "Your data is" is shown instead of "Your data is secure"[/-][+][Due for payment 2026-09-02] Android - Expensify Card - "Your data is" is shown instead of "Your data is secure"[/+]on Aug 26, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.4.61-4 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
If no regressions arise, payment will be issued on 2026-09-02. 🎊
The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the Contributor+ Checklist from here into a new comment on this GH and complete it. If you have the K2 extension, you can simply click: [this button]. If no checklist is needed for this issue, you can click: [no checklist button]
Activity
applause-bot commentedon Aug 12, 2026
While Applause doesn't embed attachments for this bug, here are the links for quick view:
https://platform.applause.com/services/links/v1/external/935ea7c77d36706eefa3a3d7f202181d86fd837562a5e0b446699eb9688284c8
melvin-bot commentedon Aug 12, 2026
Triggered auto assignment to @NicolasBonet (
DeployBlockerCash), see https://stackoverflowteams.com/c/expensify/questions/9980/ for more details.melvin-bot commentedon Aug 12, 2026
💬 A slack conversation has been started in #expensify-open-source
github-actions commentedon Aug 12, 2026
👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:
NicolasBonet commentedon Aug 12, 2026
@MelvinBot propose a fix
MelvinBot commentedon Aug 12, 2026
🔍 Investigation Summary
Classification: Frontend bug (fix lands in
Expensify/App)Causing PR: #96372 - "upgrade react native to 0.86.0" by @jakubstec (Medium confidence)
Related Issues: None found
Recommendation: ROLL FORWARD
The regression traces to the React Native
0.85.3 → 0.86.0upgrade in this release, not to any change in the screen's own code. A major RN version bump cannot be cleanly reverted (dozens of dependent patches and follow-up PRs), so this should be fixed forward with a targeted layout tweak on the footer. Because the symptom is cosmetic and only reproduces on Android at the minimum device font size on a secondary informational link, demoting it from deploy-blocker status is also a reasonable call for the deployer.Assigned: @jakubstec (PR author), @mountiny and @roryabraham (approving reviewers) from the RN upgrade PR.
Labels: No change. Kept
DeployBlockerCash(App/frontend fix).DeployBlockerwas not present, so nothing to remove.📋 Detailed Analysis
Evidence
bankAccount.yourDataIsSecure(Your data is secure), rendered only in the "Add bank account" entry point shown when you try to issue an Expensify Card without a verified bank account.VerifiedBankAccountFlowEntryPoint.tsxwas last modified 2026-07-29 (commit7a034fd), which is already in production (compare production...7a034fd→behind).TextLink.tsxandText.tsx— also did not change in this release (last real edits months ago).package.jsonshowsreact-native0.85.3 → 0.86.0, with allreact-native+0.85.3+*patches removed and a newreact-native+0.86.0+*patch set added by #96372 (in the 9.4.53 checklist, chronological item Some initial fixes and code style updates #1).003+disableTextInputRecycling,008+copyStateOnClone,012+fixScrollViewState,013+fix-mask-persisting-recycling). Stale measurement/layout on a recycled view after remount is exactly the class of bug that fits the "only on the 2nd navigation" reproduction.Verification
src/pages/ReimbursementAccount/VerifiedBankAccountFlowEntryPoint.tsx, footer at L344-L360:TextLinksets nonumberOfLines, so the truncation is not a JS-levelnumberOfLines={1}ellipsis (which would renderYour data is s...). Insteadsecurewraps to a clipped second line — a native measurement/height issue rather than a code change in this component.#96372modifiespackage.json(thereact-nativedependency) and the entirepatches/react-native/set; git history for the screen and text components shows no in-release change.Root Cause
The RN 0.86.0 upgrade changed Fabric text measurement / view-recycling behavior on Android. On the second visit to the entry point the footer row is laid out from a recycled/cloned view whose height is computed for a single line, so when
Your data is securewraps at minimum font size the second line (secure) is clipped, leaving onlyYour data is. The screen's own React code is unchanged, so no app-side UI PR introduced it — the trigger is the platform upgrade.Suggested targeted fix (roll forward)
Make the footer resilient to the wrap instead of relying on native single-line height, e.g. allow the secure link/row to shrink and control wrapping explicitly (
styles.flexShrink1on the pressable,numberOfLines={1}+adjustsFontSizeToFiton the link, orflexWrap), or key the entry-pointScrollView/screen so it does not reuse a recycled layout. @jakubstec / @mountiny / @roryabraham can best judge whether this is better handled with an additional RN 0.86 recycling patch.26 remaining items
m-natarajan commentedon Aug 19, 2026
The issue was reproduced by the original reporter on the same device after a fresh install. It was originally reproduced on two devices:
Samsung Galaxy S25 FE / Android 16 (Reproduced after fresh install)
Samsung A54 / Android 16 (Reproduced after fresh install)
Issue repro in both Playstore build and GH apk build
Screen_Recording_20260819_221622_Expensify.2.mp4
2026-08-19.9.32.13.PM.2.mp4
jakubstec commentedon Aug 21, 2026
PR with a fix is here: #99069, not reproducible (#99069 (comment))
m-natarajan commentedon Aug 25, 2026
Not repro, Samsung Galaxy S25 FE / Android 16 (Ad-hoc build)
Screen_Recording_20260825_122753_Expensify.Adhoc.mp4
jakubstec commentedon Aug 25, 2026
#99069 - PR with a fix has been merged!
[-][Due for payment 2026-08-21] Android - Expensify Card - "Your data is" is shown instead of "Your data is secure"[/-][+][Due for payment 2026-09-02] Android - Expensify Card - "Your data is" is shown instead of "Your data is secure"[/+]melvin-bot commentedon Aug 26, 2026
@NicolasBonet / @mountiny / @roryabraham @jakubstec
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.4.61-4 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
If no regressions arise, payment will be issued on 2026-09-02. 🎊
The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the Contributor+ Checklist from here into a new comment on this GH and complete it. If you have the K2 extension, you can simply click: [this button]. If no checklist is needed for this issue, you can click: [no checklist button]
mountiny commentedon Aug 30, 2026
No payment here it looks like