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
Scan - Try again is missing from error row of a failed scan #104239
Version Number: v9.5.13-0 Reproducible in staging?: Yes Reproducible in production?: N/A - new feature, doesn't exist in prod If this was caught during regression testing, add the test name, ID and link from BrowserStack:#103487 Email or phone of affected tester (no customers): N/A Issue reported by: Applause Internal Team Bug source: Pull Request QA execution Device used: Windows 11/ Chrome App Component: User Settings
Action Performed:
Sign in to staging.new.expensify.com
Navigate to Settings > Troubleshoot and turn on Simulate failing network requests.
Go to your self-DM, press + > Create expense > Scan, and choose a receipt from the gallery.
👋 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.
Recommendation: Demote. This is expected behavior, not a regression. No revert is needed.
"Try again" works only on native iOS and Android, by design. On web it never appears for any receipt-retry flow. This bug was reported on Windows Chrome, where the row correctly shows only "Save."
Source of the web behavior:Add retry button and logic, which is already on production. Its description says: "Try again is native only (iOS and Android). It never appears on Web or mWeb."
Next step: Re-run the #103487 QA steps on iOS or Android native. If "Try again" shows there, close this issue and remove DeployBlockerCash.
Investigation details
Why web shows only "Save"
isRetrySupported.ts:1-2 sets isRetrySupported = false on web. On web the receipt is only a blob URL that is gone after a reload, so nothing can be resent.
Web also shows the matching save-only message, Upload failed. Save your receipt to keep it. (en.ts:1808).
Native path (code trace only, not run on a device)
The track-expense failure data writes the receipt error with TRACK_EXPENSE params (TrackExpense.ts:579-631).
The self-DM resolves to one participant, so the retry payload can be built and "Try again" should show.
Why QA flagged it
The QA steps in #103487 say "Same as Tests" and don't mention that the feature is native only. Testers ran them on Windows Chrome. Adding "Native (iOS/Android) only" to the QA steps of future retry PRs would prevent this.
No code defect was found, so no code review rule is suggested.
Try again is native only by design. On web the receipt only exists as a blob URL, so there's nothing to resend (isRetrySupported is false there). Showing only Save on web is expected and this isn't a bug.
The confusion came from my PR description, the QA steps didn't say they're for iOS and Android only
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/43ccc122d47c266675ce95083ceb6c0d05c0d400d99419719eb3eace8e9b2024
melvin-bot commentedon Oct 16, 2026
@mountiny recently merged #103487, but they are OOO right now, so I'll auto-assign someone else.
melvin-bot commentedon Oct 16, 2026
Triggered auto assignment to @rlinoz (
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
@mountiny @brunovjk you have been assigned to this deploy blocker because you reviewed the offending PR: #103487
melvin-bot commentedon Oct 16, 2026
@rinej you have been assigned to this deploy blocker because you authored the offending PR: #103487
melvin-bot commentedon Oct 16, 2026
💬 A slack conversation has been started in #expensify-open-source
MelvinBot commentedon Oct 16, 2026
🔍 Deploy Blocker Investigation
Recommendation: Demote. This is expected behavior, not a regression. No revert is needed.
"Try again" works only on native iOS and Android, by design. On web it never appears for any receipt-retry flow. This bug was reported on Windows Chrome, where the row correctly shows only "Save."
Next step: Re-run the #103487 QA steps on iOS or Android native. If "Try again" shows there, close this issue and remove
DeployBlockerCash.Investigation details
Why web shows only "Save"
isRetrySupported.ts:1-2setsisRetrySupported = falseon web. On web the receipt is only a blob URL that is gone after a reload, so nothing can be resent.isRetrySupported.native.ts:2sets it totrueon native.buildRetryPayload.ts:25-29:isRetryableFlowreturnsfalseright away whenisRetrySupportedis false.TRACK_EXPENSEflow inindex.ts:45-65. Its check,buildTrackExpenseRetryPayload.ts:16-22, requiresisRetryableFlow, so it is always false on web.MoneyRequestReceiptView.tsx:478and L758 pass no retry handler when the check is false, so the button isn't rendered.Upload failed. Save your receipt to keep it.(en.ts:1808).Native path (code trace only, not run on a device)
TRACK_EXPENSEparams (TrackExpense.ts:579-631).Why QA flagged it
The QA steps in #103487 say "Same as Tests" and don't mention that the feature is native only. Testers ran them on Windows Chrome. Adding "Native (iOS/Android) only" to the QA steps of future retry PRs would prevent this.
No code defect was found, so no code review rule is suggested.
view run
brunovjk commentedon Oct 16, 2026
Correct me if I’m wrong, but shouldn’t the
try againbutton appear in thewebview? Only on native. Thanks.cc: @rinej @mountiny
rinej commentedon Oct 18, 2026
Try again is native only by design. On web the receipt only exists as a blob URL, so there's nothing to resend (isRetrySupported is false there). Showing only Save on web is expected and this isn't a bug.
The confusion came from my PR description, the QA steps didn't say they're for iOS and Android only
grgia commentedon Oct 19, 2026
@rinej @brunovjk @mountiny can this be demoted?
rinej commentedon Oct 19, 2026
On my end we can demote it. @brunovjk, could you please confirm?
brunovjk commentedon Oct 19, 2026
Sure. Thanks.