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
[$175] Personal card-Not able to add Mock personal card second time #104286
Version Number: 9.5.13-1 Reproducible in staging?: Yes Reproducible in production?: No If this was caught during regression testing, add the test name, ID and link from BrowserStack:https://test-management.browserstack.com/tc/TC-414884 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.1 Chrome App Component: User Settings
Action Performed:
Sign up to ND with a new gmail account, selecting Something else purpose
Validate the account
Go to Wallet - Add personal card - US - Mock bank
Click Next, click Continue on the successful screen
Delete both cards
Repeat steps 3-4
Expected Result:
Successful screen appears, cards are added
Actual Result:
Successful screen does not appear, Mock bank personal cards are not added second time
👋 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.
Result: No causing App PR found. This most likely comes from the backend running on staging (medium confidence).
None of the App PRs in Deploy Checklist: New Expensify 2026-10-16 change the personal-card flow. Staging calls the staging API, so a backend change deployed only to staging would explain "staging: yes, production: no."
Recommended next step: On staging web, turn off Troubleshoot → Use staging server and repeat steps 3–6.
If the cards add normally, the backend on staging caused it. Swap DeployBlockerCash for DeployBlocker and ask an internal engineer to check recent backend changes to personal-card import and card deletion.
If it still fails, the App is involved. Reply here and I'll dig further.
Keep DeployBlockerCash on until that test is done.
Investigation details
How I ruled out App PRs
I compared origin/production (5c5d8a6) with origin/staging (d710f20). There are no changes in:
src/pages/settings/Wallet/
src/libs/actions/PersonalCards.ts
src/libs/actions/Card.ts
src/libs/actions/getCompanyCardBankConnection/
src/libs/CardUtils.ts
src/hooks/useImportPersonalPlaidAccounts.ts
No added or removed line in the diff mentions CARD_LIST, cardList, lastImportAttempt, ADD_NEW_PERSONAL_CARD, or Plaid. package.json changes only the version, so no dependency or Onyx bump.
The report says the cards aren't added at all, not just that the success screen is missing. That points to the second Mock bank import not recreating the cards after they were deleted.
Latent App weakness (unchanged since production, not a revert candidate)
useGetNewPersonalCard.ts:18-19 treats an empty previous cardList as "no baseline yet." After you delete every card, the first update that brings cards back becomes the baseline, so the success screen doesn't appear. If the backend now sends fewer CARD_LIST updates, this would hide the success screen even when the import works. Refreshing Wallet after the second attempt tells the two cases apart: missing cards mean the import failed; present cards mean only success detection failed.
Reproduction attempt
I tried to reproduce this on a local web build, but the test session never loaded, so I have no repro result.
Next Steps: Reply with @MelvinBot <your feedback> to refine this analysis.
The failure is caused by browser popup blocking. The app calls window.open() from a useEffect after navigating to the bank-connection step, rather than directly from the user’s Next click. Browsers may reject this delayed call, so the Mock Bank window never opens and no cards are added.
This is a frontend timing issue introduced with the original personal-card flow in PR #84042, not a backend failure.
changed the title [-]Personal card-Not able to add Mock personal card second time[/-][+][$175] Personal card-Not able to add Mock personal card second time[/+]on Oct 22, 2026
Activity
applause-bot commentedon Oct 16, 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/39b47868b8b8f55d68e870626ed6ca9d279319e737c44e043e8fdda2f3827837
melvin-bot commentedon Oct 16, 2026
Triggered auto assignment to @carlosmiceli (
DeployBlockerCash), see https://stackoverflowteams.com/c/expensify/questions/9980/ for more details.github-actions commentedon Oct 16, 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:
melvin-bot commentedon Oct 16, 2026
💬 A slack conversation has been started in #expensify-open-source
MelvinBot commentedon Oct 16, 2026
Deploy Blocker Analysis
Result: No causing App PR found. This most likely comes from the backend running on staging (medium confidence).
None of the App PRs in Deploy Checklist: New Expensify 2026-10-16 change the personal-card flow. Staging calls the staging API, so a backend change deployed only to staging would explain "staging: yes, production: no."
Recommended next step: On staging web, turn off Troubleshoot → Use staging server and repeat steps 3–6.
DeployBlockerCashforDeployBlockerand ask an internal engineer to check recent backend changes to personal-card import and card deletion.Keep
DeployBlockerCashon until that test is done.Investigation details
How I ruled out App PRs
I compared
origin/production(5c5d8a6) withorigin/staging(d710f20). There are no changes in:src/pages/settings/Wallet/src/libs/actions/PersonalCards.tssrc/libs/actions/Card.tssrc/libs/actions/getCompanyCardBankConnection/src/libs/CardUtils.tssrc/hooks/useImportPersonalPlaidAccounts.tsNo added or removed line in the diff mentions
CARD_LIST,cardList,lastImportAttempt,ADD_NEW_PERSONAL_CARD, or Plaid.package.jsonchanges only the version, so no dependency or Onyx bump.The PRs closest to this area don't apply:
appversionfrom the ReconnectApp startup prefetch body: the retry path only runs for native prefetch. This bug is web-only.Why the backend is the likely cause
The success screen appears only when a new card, or a changed
lastImportAttempt, arrives inCARD_LISTfrom the server:The report says the cards aren't added at all, not just that the success screen is missing. That points to the second Mock bank import not recreating the cards after they were deleted.
Latent App weakness (unchanged since production, not a revert candidate)
useGetNewPersonalCard.ts:18-19 treats an empty previous
cardListas "no baseline yet." After you delete every card, the first update that brings cards back becomes the baseline, so the success screen doesn't appear. If the backend now sends fewerCARD_LISTupdates, this would hide the success screen even when the import works. Refreshing Wallet after the second attempt tells the two cases apart: missing cards mean the import failed; present cards mean only success detection failed.Reproduction attempt
I tried to reproduce this on a local web build, but the test session never loaded, so I have no repro result.
Next Steps: Reply with
@MelvinBot <your feedback>to refine this analysis.view run · no recording available
grgia commentedon Oct 19, 2026
Demoting from blocker, it seems there's a problem and the browser skipped opening the popup. but it's intermittent.
Melvin's BE RCA is wrong
carlosmiceli commentedon Oct 22, 2026
RCA summary
The failure is caused by browser popup blocking. The app calls
window.open()from auseEffectafter navigating to the bank-connection step, rather than directly from the user’s Next click. Browsers may reject this delayed call, so the Mock Bank window never opens and no cards are added.This is a frontend timing issue introduced with the original personal-card flow in PR #84042, not a backend failure.
— Carlos’s AI agent
melvin-bot commentedon Oct 22, 2026
Triggered auto assignment to Contributor-plus team member for initial proposal review - @daledah (
External)[-]Personal card-Not able to add Mock personal card second time[/-][+][$175] Personal card-Not able to add Mock personal card second time[/+]melvin-bot commentedon Oct 22, 2026
Job added to Upwork: https://www.upwork.com/jobs/~022113400587760936043