Skip to content

Wallet-After clicking BA row on confirmation and going back Add bank account unresponsive #103626

Description

@applause-bot

If you haven’t already, check out our contributing guidelines for onboarding. To join our Slack channel, fill out this form.


Version Number: 9.5.6-4
Reproducible in staging?: Yes
Reproducible in production?: Unable to validate in Prod - Provide reasoning.
If this was caught during regression testing, add the test name, ID and link from BrowserStack: #102944
Email or phone of affected tester (no customers): N/A
Issue reported by: Applause Internal Team
Bug source: Exploratory - Significant User Experience Deterioration
Device used: MacBook Air 26.6.2 Chrome, iPhone 15 iOS 26.6.1
App Component: Other

Action Performed:

  1. Sign in with a new gmail account, verify the account
  2. Go to Wallet, click Enable Wallet
  3. Click "Add bank account" green button
  4. Select Regions bank - Plaid Saving
  5. Enter a legal name and an address
  6. On the confirmation page click the bank account row
  7. Click back button
  8. Click "Add bank account" green button

Expected Result:

Clicking "Add bank account" green button opens the connecting bank account flow

Actual Result:

After clicking BA row on confirmation page, then clicking Back button "Add bank account" button is unresponsive

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome Safari

Screenshots/Videos

Bug7282344_1791563652216.Add_BA_in_Wallet.mp4

View all open jobs on GitHub

Applause Internal Information
Exported by: Svetlana Lazutkina
Bug ID: 7282344

Activity

  1. applause-bot commented on Oct 9, 2026

    @applause-bot
    Author

    While Applause doesn't embed attachments for this bug, here are the links for quick view:
    https://platform.applause.com/services/links/v1/external/029fbffabf56eac168d5799029d9df2e1eafd609f07cb216049aa9bce8bfbdba

  2. added
    DeployBlockerCashThis issue or pull request should block deployment
    BugSomething is broken. Auto assigns a BugZero manager.
    on Oct 9, 2026
  3. melvin-bot commented on Oct 9, 2026

    @melvin-bot

    You have been assigned to this deploy blocker because you recently merged this PR: #102944

  4. melvin-bot commented on Oct 9, 2026

    @melvin-bot

    @marcochavezf @huult you have been assigned to this deploy blocker because you reviewed the offending PR: #102944

  5. melvin-bot commented on Oct 9, 2026

    @melvin-bot

    💬 A slack conversation has been started in #expensify-open-source

  6. github-actions commented on Oct 9, 2026

    @github-actions
    Contributor

    👋 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:

    1. Identify the pull request that introduced this issue and revert it.
    2. Find someone who can quickly fix the issue.
    3. Fix the issue yourself.
  7. MelvinBot commented on Oct 9, 2026

    @MelvinBot
    Contributor

    ⚠️ Preliminary analysis (low confidence) — treat as a starting point, not a conclusion.

    I don't think Collect legal name and address before creating a wallet deposit account. caused this, so reverting it likely won't fix the bug. It's the only PR in Deploy Checklist: New Expensify 2026-10-08 that touches this flow. However, the code this repro runs through looks unchanged from production, so this is probably an existing bug.

    Recommendation: Keep the blocker until someone checks production. If the bug reproduces there, demote it and fix it as a normal bug.

    Likely mechanism
    1. Each sub-page is pushed as its own screen. On web, lower screens stay mounted. Clicking the bank row calls onMove(ACCOUNT_NUMBERS) (ConfirmationStep.tsx:55-57). That pushes a second Plaid screen in edit mode (useSubPage/index.tsx:98-105).
    2. Back on that screen hits the pageIndex === 0 branch. That branch has no edit-mode check, so it calls clearPersonalBankAccount() (AddBankAccount.tsx:171-175). This clears the Plaid data and setupType, so every screen in the stack shows the setup view.
    3. "Add bank account" sets setupType back to Plaid (BankAccounts.ts:228-235). The hidden Plaid screen at the bottom of the stack then mounts unfocused, with no Plaid accounts. Its effect immediately clears setupType again (PlaidStep.tsx:49-55). The page drops back to the setup view, so the button looks unresponsive.

    #102944 adds the Legal name and Address pages, changes submit, and adds new confirmation rows. It doesn't change the back handler, the bank-row handler, PlaidStep, SetupMethod, or useSubPage. Production goes through the same steps, with a shorter stack: plaid → confirmation → plaid (edit). I didn't reproduce this in the app, and QA couldn't validate production.

    Suggested fix (either way):

    • In handleBackButtonPress (AddBankAccount.tsx:159-177), return to confirmation when isEditing instead of clearing the draft. PersonalInfo.tsx:95-98 already does this. This change also fixes Back from the new Legal name and Address edit pages, which currently go back toward Plaid.
    • Harden PlaidStep so it only clears setupType when the screen changes from focused to unfocused, not when a hidden screen mounts.

    Next Steps: Reply with @MelvinBot <your feedback> to refine this analysis.


    view run

  8. marcochavezf commented on Oct 9, 2026

    @marcochavezf
    Contributor

    @MelvinBot, can you double-check the code and the PRs in the deploy checklist again? What makes you think this is an existing bug?

  9. MelvinBot commented on Oct 9, 2026

    @MelvinBot
    Contributor

    I re-checked every production vs. staging change and still found no staging-only cause. Every step that breaks the button runs on code that is identical on production. I couldn't reproduce it myself, so the next step is a production check.

    Why I think it's pre-existing

    The failure needs these four steps. Each one exists unchanged on production (8991d02):

    1. Clicking the bank row on the confirmation page opens the Plaid page in edit mode (ConfirmationStep.tsx:44). On production the stack is plaid → confirmation → plaid (edit).
    2. Back on that page hits pageIndex === 0 and calls clearPersonalBankAccount() (AddBankAccount.tsx:112-115). That empties the Plaid accounts and clears setupType (BankAccounts.ts:382).
    3. "Add bank account" sets setupType back to Plaid (BankAccounts.ts:227).
    4. The hidden Plaid screen at the bottom of the stack remounts unfocused with no accounts. Its effect clears setupType again (PlaidStep.tsx:49-55). This effect hasn't changed since June.
    Checklist PRs I re-checked
    • Collect legal name and address before creating a wallet deposit account.: It adds the Legal name and Address pages to the middle of the stack. Neither page writes the bank account draft or setupType. skipPages only affects next/previous navigation, and Back returns before that code runs. The submit change only runs on the final Confirm, which isn't part of the repro.
    • The "Add bank account" button is a Button in SetupMethod.tsx. Neither file changed.
    • useSubPage, linkTo, and PlaidStep didn't change. BankAccounts.ts only adds updateBankAccountName.
    • Navigation changes are limited to onboarding, validate-login, and new screen registrations. None of them affect pushing or going back in the right-hand panel.
    • The MenuItem changes only touch accessibility labels and styles. The bank row still opens the Plaid page in the repro.
    • WalletPage only adds an "Edit nickname" entry. CollectDepositAccount only swaps its loading indicator.

    The only evidence for a regression is circumstantial: Collect legal name and address before creating a wallet deposit account. edits this flow, and the repro's "enter legal name and address" step only exists on staging.

    To confirm on production: Wallet → Enable wallet → Add bank account → connect a bank → confirmation → click the bank row → Back → Add bank account. Based on the code, the button should do nothing there too.

    I tried to reproduce this in my test environment. The account's "Validate your account" email-code step blocked me before I reached Plaid.

    Fix (same either way): in handleBackButtonPress, return to the confirmation page when isEditing is true instead of clearing the draft. PersonalInfo.tsx already does this. Also, only let PlaidStep clear setupType when the screen loses focus, not when a hidden screen mounts.

  10. marcochavezf commented on Oct 9, 2026

    @marcochavezf
    Contributor

    @MelvinBot let's create a PR with the fix

  11. MelvinBot commented on Oct 9, 2026

    @MelvinBot
    Contributor

    🤖 Draft PR created: Return to the confirmation when going back from a wallet bank account edit page
    Please mark it as "Ready for review" or ask me to do that for you when it is ready for review.

    What it changes: Back on any edit page opened from the confirmation page now returns to the confirmation page. Before, Back cleared the draft. The edit pages are the bank account, legal name, and address pages. The fix is one guard in handleBackButtonPress in AddBankAccount.tsx. It matches how PersonalInfo handles Back. The draft is no longer cleared, so the hidden Plaid screen can't reset the flow and freeze the "Add bank account" button.

    Testing: Typecheck, lint, the React Compiler check, and 61 related Jest tests pass. I couldn't run the repro in a browser because the test session showed a blank page before sign-in finished. Please run the issue's steps before marking the PR ready.

    I didn't include the optional PlaidStep hardening, so the PR stays minimal.


    view run · no recording available

  12. puneetlath commented on Oct 9, 2026

    @puneetlath
    Contributor

    Seems like it's niche and on production, so I'm going to demote.

  13. m-natarajan commented on Oct 10, 2026

    @m-natarajan

    Chrome / v9.5.6-5 PR:103643
    Original issue not reproduced, but there is another one. When click on Back button on Choose bank account tab, tab blink and not navigate to previous step. Need to click Back button three times

    bandicam.2026-10-10.21-47-57-568.mp4
  14. marcochavezf commented on Oct 11, 2026

    @marcochavezf
    Contributor

    Chrome / v9.5.6-5 PR:103643
    Original issue not reproduced, but there is another one. When click on Back button on Choose bank account tab, tab blink and not navigate to previous step. Need to click Back button three times

    bandicam.2026-10-10.21-47-57-568.mp4

    @MelvinBot please check if the new issue was introduced in the new changes in the pr

  15. MelvinBot commented on Oct 11, 2026

    @MelvinBot
    Contributor

    Partly. The PR adds one of the three Back clicks: Back from the edit "Choose bank account" page now goes to the confirmation page first. The other two clicks come from code that's already on main. The "blink" is most likely the original "Choose bank account" page reappearing. It looks the same as the edit page QA just left.

    QA wrote "original issue not reproduced", so I assumed they followed the original steps: confirmation → click the bank row → Back. On that path:

    Back click Without the PR (main) With the PR
    1 Clears the draft and shows the setup page. "Add bank account" is then frozen (the original bug). Returns to the confirmation page (AddBankAccount.tsx:173-176)
    2 — Skips Legal name and Address and jumps back to the first "Choose bank account" page. It looks unchanged, so the page seems to blink.
    3 — Clears the draft and shows the setup page. "Add bank account" works.
    Why click 2 lands on an identical-looking page
    • Each sub-page is its own screen in the stack. Each screen takes a snapshot of skipPages when it mounts (AddBankAccount.tsx:118-133).
    • The confirmation screen mounts after the user has entered a legal name and address. So its snapshot skips both pages, and its prevPage goes straight back to the first Plaid screen (useSubPage/index.tsx:46-69). This behavior was already on main before the PR.
    • The Plaid data isn't cleared on this path, so that screen still shows the same account list.

    Caveats:

    • I couldn't play the video or reproduce the steps; the test browser session stayed blank.
    • If QA reached "Choose bank account" fresh, without going through the confirmation page, the PR changes nothing on that path. Back goes to the setup page in one click there, and I found no cause for a blink.

    Options:

    1. Keep the PR. Going from the edit page → confirmation → Choose bank account → setup is normal step-by-step Back behavior. It only looks broken because the two Plaid pages look identical.
    2. Make it one click. When isEditing && pageIndex === 0, go back to the bottom Plaid screen, then call clearPersonalBankAccount() after the transition. Keep the go-back-to-confirmation behavior for the Legal name and Address edit pages. No hidden Plaid screen is left in the stack, so the original freeze stays fixed.

    Can you confirm what QA sees after the first Back click? If it's the confirmation page, this explanation holds.


    Next Steps: Reply with @MelvinBot apply option 2 to update the PR, or @MelvinBot <your feedback> to refine this.


    view run · no recording available

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

Metadata

Metadata

Labels

BugSomething is broken. Auto assigns a BugZero manager.DailyKSv2Engineering

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions