Repository navigation
[Due for payment 2026-09-03] Spend - Unreported expense shown on arrow navigation on "Reports" as an empty report. #99627
Description
Activity
- addedDeployBlockerCashThis issue or pull request should block deploymentThis issue or pull request should block deployment
on Aug 27, 2026 - addedBugSomething is broken. Auto assigns a BugZero manager.Something is broken. Auto assigns a BugZero manager.
on Aug 27, 2026 You have been assigned to this deploy blocker because you recently merged this PR: #98611
@JS00001 @ShridharGoel you have been assigned to this deploy blocker because you reviewed the offending PR: #98611
@thelullabyy you have been assigned to this deploy blocker because you authored the offending PR: #98611
💬 A slack conversation has been started in #expensify-open-source
github-actions commented
on Aug 27, 2026 on Aug 27, 2026 – with GitHub ActionsContributorMore actions👋 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.
- Find someone who can quickly fix the issue.
- Fix the issue yourself.
🔍 Deploy Blocker Analysis
Causing PR: Expensify/App#98611 — "Standardize Expense Report and Expense header with predictable button placement and carousel counter" (author
thelullabyy, reviewersJS00001/ShridharGoel) — High confidenceRecommendation: 🟢 ROLL FORWARD with a targeted fix — do NOT revert.
The stale carousel written from the flat Expenses view (which legitimately contains
[workspace expense, unreported Self‑DM expense]) is never cleared when the user switches to the Reports view and opens a report. The Reports view inherits that 2‑item carousel, showsX of 2, and arrowing to the second (unreported) entry lands on an empty report.Root cause
The counter is rendered from the Onyx key
TRANSACTION_THREAD_NAVIGATION_TRANSACTION_IDSatMoneyRequestReportTransactionsNavigation.tsx:357(total: transactionIDsList.length, sourced at L82). PR #98611 added the code that writes those IDs from the Search list, but the write/clear logic is not scoped to the active Spend sub‑view.Evidence chain
carouselSiblingTransactionIDsis derived from the flatfilteredDatafiltered toisTransactionListItemType—Search/index.tsx:563-570. In the flat Expenses view this correctly includes ALL expenses, including the unreported Self‑DM one.- In the grouped Reports view,
filteredDataisTransactionGroupListItemType[](report groups, not transaction items), socarouselSiblingTransactionIDsis empty. - The write guard bails out and does NOT clear whenever the candidate list is empty —
shouldWriteActiveTransactionIDsForSearchreturnsfalsewhensearchTransactionIDs.length === 0, consumed atSearch/index.tsx:766-776. onSelectRowonly clears the carousel when a transaction row is tapped (isTransactionItem); tapping a report group in the Reports view skips both the set and the clear branches —Search/index.tsx:584-590.
Net effect: the carousel written from the Expenses view persists in Onyx and is never cleared/overwritten when moving to Reports. Because these IDs persist across sessions, the bug reproduces even going straight to Spend > Reports after a prior Expenses‑view interaction.
Why not revert: #98611 is a 34‑file PR that also standardized the report/expense headers and bundled fixes for #96563, #96545, #96548, #96566, #96575. It's item #20 in the open StagingDeployCash checklist (#99596). A revert would reintroduce those as regressions; a scoped fix is safer and simpler.
Recommended fix
Scope carousel seeding to the active view instead of leaking stale IDs. Either (or both):
- Make the empty‑candidate case in
shouldWriteActiveTransactionIDsForSearch(or theuseEffectatSearch/index.tsx:766-776) clear the active IDs rather than early‑returnfalsewhen the current view is grouped / has no flat transaction items. - In
onSelectRow, callclearActiveTransactionIDs()when opening a report group (!isTransactionItem) so grouped Reports navigation is seeded by the report's own transactions, not the previous flat list.
Assignees
thelullabyy(author),JS00001andShridharGoel(reviewers) — already auto‑assigned.Label note: this is a frontend/App bug —
DeployBlockerCashshould stay; noDeployBlocker(web) label needed.
Next Steps: Reply with
@MelvinBot implement thisto create a draft PR, or@MelvinBot <your feedback>to refine this analysis.
Not repro on Mac 26.5.1 Safari, v9.4.62-4
Recording.2858.mp4
- removedDeployBlockerCashThis issue or pull request should block deploymentThis issue or pull request should block deploymentHourlyKSv2KSv2
on Aug 27, 2026 - changed the title
[-]Spend - Unreported expense shown on arrow navigation on "Reports" as an empty report.[/-][+][Due for payment 2026-09-03] Spend - Unreported expense shown on arrow navigation on "Reports" as an empty report.[/+]on Aug 27, 2026 The solution for this issue has been 🚀 deployed to production 🚀 in version 9.4.62-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-09-03. 🎊
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]
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!
Version Number: 9.4.62-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: #98611
Email or phone of affected tester (no customers): ibellicotest+2766@gmail.com
Issue reported by: Applause Internal Team
Bug source: Exploratory - Significant User Experience Deterioration
Device used: Motorola MotoG60 / Android 12 (Hybrid app) - Windows 11 / Chrome
App Component: Search
Action Performed:
Prerequisite: Account has Self DM
Prerequisite 2: Account has at least one workspace.
Prerequisite 3: Have one manual expense created on Self DM and another one on workspace chat.
Expected Result:
User shouldn´t be able to navigate to an unreported expense via arrows while on "Reports" section.
Actual Result:
Unreported expense is counted on arrow navigation while on "Reports" section and navigating to it leads to an empty report.
Workaround:
Unknown
Platforms:
Screenshots/Videos
Video.mp4
View all open jobs on GitHub
Issue Owner
Current Issue Owner: @thelullabyy