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-10-12] Expense - Back button reopens expense after opening expense and tapping View on growl #102833
Version Number: 9.5.1-1 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:#100015 Email or phone of affected tester (no customers):[email protected] Issue reported by: Applause Internal Team Bug source: Exploratory - Significant User Experience Deterioration Device used: Samsung Galaxy S25 FE / Android 16 App Component: Money Requests
Action Performed:
Launch Expensify app.
Go to workspace chat.
Create an expense.
Go back to LHN.
Create an expense and submit it to workspace chat from FAB.
Quickly tap on the expense preview.
Tap View on the growl.
Tap app back button three times.
Expected Result:
App will return to LHN.
Actual Result:
App reopens the expense from Step 6.
This issue is not reproducible if the report contains only one expense (Step 3 is not performed).
👋 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.
Root cause: On narrow layouts, "View" tries to replace the expense open in the RHP. Instead, it pushes a new screen on top. The old expense stays in the back stack, so pressing back reopens it.
Recommendation: Fix forward in navigateToCreatedExpense.ts. Revert if a fix can't land quickly. Use one of these options:
When a report is open in the RHP, open the thread as SEARCH_REPORT with forceReplace. The non-inbox branch at lines 57-61 already does this.
Dismiss the RHP before navigating to REPORT_WITH_ID.
The narrow-layout branch navigates to REPORT_WITH_ID, a full-screen route in the tab navigator. linkTo sets REPLACE (linkTo/index.ts:222-224). It then overrides that to PUSH because the RHP, not the tab navigator, is on top (lines 245-251).
Why one expense doesn't reproduce it: With a single expense, the preview opens only the report and no RHP. The guard at line 46 then returns early.
Secondary issue: The growl and the preview resolve the thread ID in opposite order. The growl uses transactionThreadReportID ?? childReportID (ExpenseAddedGrowl.tsx:132). The preview uses the reverse (MoneyRequestReportPreview/index.tsx:246). Aligning them lets the guard catch "View" on the expense already open.
Other PRs ruled out: I diffed production against staging for navigation, report preview, growl, and inbox code. Only this PR changes the navigation or growl behavior involved.
Not verified: I didn't run the app on Android, so I haven't confirmed which back press brings the old expense back.
changed the title [-]Expense - Back button reopens expense after opening expense and tapping View on growl[/-][+][Due for payment 2026-10-12] Expense - Back button reopens expense after opening expense and tapping View on growl[/+]on Oct 5, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.1-9 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-12. 🎊
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 Oct 2, 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/2b9a2bc0735d14c49c119da8236d21cb5155e6aac82892f91ba6296953a8f561
melvin-bot commentedon Oct 2, 2026
You have been assigned to this deploy blocker because you recently merged this PR: #100015
melvin-bot commentedon Oct 2, 2026
@mountiny @situchan you have been assigned to this deploy blocker because you reviewed the offending PR: #100015
melvin-bot commentedon Oct 2, 2026
@mhawryluk you have been assigned to this deploy blocker because you authored the offending PR: #100015
github-actions commentedon Oct 2, 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 2, 2026
💬 A slack conversation has been started in #expensify-open-source
MelvinBot commentedon Oct 2, 2026
Deploy Blocker Analysis
Causing PR: Confirm new expenses with a “View” toast instead of scrolling to and highlighting the row v2 by
mhawryluk(high confidence). The auto-assignment is correct. This PR adds the growl, its "View" button, and the navigation it runs.Root cause: On narrow layouts, "View" tries to replace the expense open in the RHP. Instead, it pushes a new screen on top. The old expense stays in the back stack, so pressing back reopens it.
Recommendation: Fix forward in
navigateToCreatedExpense.ts. Revert if a fix can't land quickly. Use one of these options:SEARCH_REPORTwithforceReplace. The non-inbox branch at lines 57-61 already does this.REPORT_WITH_ID.Investigation details
Mechanism
TrackExpense.ts:2004-2006).MoneyRequestReportPreview/index.tsx:286-294).navigateToCreatedExpense.ts:46) doesn't fire, soforceReplacebecomestrue(line 54).REPORT_WITH_ID, a full-screen route in the tab navigator.linkTosets REPLACE (linkTo/index.ts:222-224). It then overrides that to PUSH because the RHP, not the tab navigator, is on top (lines 245-251).Why one expense doesn't reproduce it: With a single expense, the preview opens only the report and no RHP. The guard at line 46 then returns early.
Secondary issue: The growl and the preview resolve the thread ID in opposite order. The growl uses
transactionThreadReportID ?? childReportID(ExpenseAddedGrowl.tsx:132). The preview uses the reverse (MoneyRequestReportPreview/index.tsx:246). Aligning them lets the guard catch "View" on the expense already open.Other PRs ruled out: I diffed production against staging for navigation, report preview, growl, and inbox code. Only this PR changes the navigation or growl behavior involved.
Not verified: I didn't run the app on Android, so I haven't confirmed which back press brings the old expense back.
Related deploy blockers from the same PR:
view run
mhawryluk commentedon Oct 2, 2026
I will look into this
melvin-bot commentedon Oct 2, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
melvin-bot commentedon Oct 2, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
m-natarajan commentedon Oct 2, 2026
Not repro, Samsung S23FE/ Android 16, v9.5.1-5
102833.mp4
[-]Expense - Back button reopens expense after opening expense and tapping View on growl[/-][+][Due for payment 2026-10-12] Expense - Back button reopens expense after opening expense and tapping View on growl[/+]melvin-bot commentedon Oct 5, 2026
@situchan
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.1-9 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-12. 🎊
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]