Skip to content

[Due for payment 2026-10-13] [Verify account] Connect existing business bank account > Add bank account shows Not Found for unvalidated admins #101749

Closed

Description

@MelvinBot

Follow-up to the audit in issue 72980.

Problem

As an unvalidated workspace admin with an eligible business bank account, going to Workflows > Payments > Add bank account and then clicking Add bank account on the "Choose an existing bank account to pay expenses or add a new one." screen shows the Not Found page instead of the verify account page.

The button handler at PaymentMethodList.tsx:639-646 is correct:

const onPressItem = () => {
    if (!isUserValidated && !shouldSkipDefaultAccountValidation) {
        Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.ADD_BANK_ACCOUNT_VERIFY_ACCOUNT.path));
        return;
    }
    onAddBankAccountPress();
};

The allowlist is not. createDynamicRoute appends the suffix onto the current active route, which is SCREENS.CONNECT_EXISTING_BUSINESS_BANK_ACCOUNT_ROOT (rendered by ConnectExistingBusinessBankAccountPage.tsx:134-145). That screen is missing from ROUTES.ts:166-186:

ADD_BANK_ACCOUNT_VERIFY_ACCOUNT: {
    path: 'add-bank-account/verify-account',
    entryScreens: [
        SCREENS.SETTINGS.WALLET.ROOT,
        SCREENS.HOME,
        SCREENS.RIGHT_MODAL.SEARCH_REPORT,
        SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
        SCREENS.REPORT,
        SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
        SCREENS.SEARCH.ROOT,
    ],

So the entryScreens check at getStateFromPath.ts:49 fails, resolution falls through to the plain React Navigation resolver at getStateFromPath.ts:75, no static pattern matches add-bank-account/verify-account, and the catch-all config.ts:40 ([SCREENS.NOT_FOUND]: '*') wins.

Solution

Register the screen as a valid entry point for the dynamic route. No change is needed in PaymentMethodList or ConnectExistingBusinessBankAccountPage.

Action Items

  1. Add the entry screen: add SCREENS.CONNECT_EXISTING_BUSINESS_BANK_ACCOUNT_ROOT to the entryScreens array of DYNAMIC_ROUTES.ADD_BANK_ACCOUNT_VERIFY_ACCOUNT in ROUTES.ts:168-176.
  2. Check for the same gap elsewhere: PaymentMethodList is rendered from several places. Confirm every screen that renders it with shouldSkipDefaultAccountValidation unset is in the allowlist, so this doesn't get filed a third time.
  3. Consider a guard: a test or lint that fails when a screen renders PaymentMethodList without being registered would stop this class of bug. Worth scoping, not required for this fix.
  4. Verify: as an unvalidated admin with an eligible business bank account, Workflows > Payments > Add bank account > Add bank account, and confirm the verify account page opens and the flow continues after the magic code.

Specific Component to Migrate

DYNAMIC_ROUTES.ADD_BANK_ACCOUNT_VERIFY_ACCOUNT entry screens

  • Current files: src/ROUTES.ts
  • Context: src/pages/settings/Wallet/PaymentMethodList.tsx, src/pages/workspace/ConnectExistingBusinessBankAccountPage.tsx

Note

This one needs an account with an eligible business bank account already visible on that screen, so it is harder to reproduce than the other two.

Issue OwnerCurrent Issue Owner: @mallenexpensify

Activity

  1. added
    ReviewingHas a PR in review
    and removed
    ReviewingHas a PR in review
    on Oct 1, 2026
  2. changed the title [-][Verify account] Connect existing business bank account > Add bank account shows Not Found for unvalidated admins[/-] [+][Due for payment 2026-10-13] [Verify account] Connect existing business bank account > Add bank account shows Not Found for unvalidated admins[/+] on Oct 6, 2026
  3. melvin-bot commented on Oct 6, 2026

    @melvin-bot

    @aimane-chnaif

    The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.3-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-10-13. 🎊

    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]

  4. aimane-chnaif commented on Oct 11, 2026

    @aimane-chnaif
    Contributor

    Contributor+ Checklist:

    • [Contributor] The offending PR and associated issue have been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake.

      Link to the comment on the PR:
      Link to the comment on the Issue:

    • [Contributor] If the regression was CRITICAL (e.g. interrupts a core flow) A discussion in #expensify-open-source has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner.

      Link to discussion:

    • [Contributor] If it was decided to create a regression test for the bug, please propose the regression test steps using the template below to ensure the same bug will not reach production again.

    Regression Test Proposal

    Precondition:

    Make sure that one of the workspaces have bank account added already

    Test:

    1. Open the app
    2. Navigate to Workspace > Workflows > Payments > Add bank account
    3. Verify that the "Choose an existing bank account…" screen lists the account
    4. Click "Add bank account"
    5. Verify that the verify account (magic code) page opens instead of Not Found
    6. Enter the magic code
    7. Verify that the bank account purpose page opens

    Do we agree 👍 or 👎


    This is sub-issue of project #72980 which was before Sep 19, so the payment will be $250

  5. melvin-bot commented on Oct 12, 2026

    @melvin-bot

    Triggered auto assignment to @mallenexpensify (Awaiting Payment)

  6. melvin-bot commented on Oct 12, 2026

    @melvin-bot

    Payment Summary

    Resolving PRs:

    BugZero Checklist (@mallenexpensify)

    • I have confirmed assignees, roles, and Upwork contracts look correct
    • I have paid out Upwork contracts / manual NewDot requests
    • [BugZero Assignee] I have created a GH issue for creating/updating the regression test once above steps have been agreed upon
  7. mallenexpensify commented on Oct 15, 2026

    @mallenexpensify
    Contributor

    Payment Summary

    Contributor+: @aimane-chnaif due $250 via NewDot

    Updated price on 2026-10-18 cuz of

    Follow-up to the audit in #72980 (comment).

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

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionTaskWeeklyKSv2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions