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-06-16] [$250] Pending deleted report field data is counted in confirmation page of duplicate WS #89716
Version Number: v9.3.67-3 Reproducible in staging?: Yes Reproducible in production?: Yes If this was caught during regression testing, add the test name, ID and link from BrowserStack:#87737 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, Samsung Galaxy A52 / Android 14, iPhone 13 / iOS 26.5 App Component: Workspace Settings
Action Performed:
Preconditions
Logged in to any user
Create a workspace with distance rates, merchant rules, taxes, categories, members, report fields data
Steps:
Go offline
Delete a rule, a member, a tax, a category, a distance rate, a report field
Duplicate the workspace
Observe the pending deleted data confirmation page -> note that here the report field is counted as 1
Tap "continue"
Tap the duplicate workspace
Open "Reports" in the workspace setting
Expected Result:
In step 4, the pending deleted report field data shouldn't be counted. It should match what appears when opening the report in the duplicated workspace, where there are no report fields.
Actual Result:
in step 4, the pending deleted report field data is counted in confirmation page of duplicate WS
👋 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.
Classification: Frontend bug Causing PR: #87737 - "fix: Offline deleted rules reappear after reconnecting until cache is cleared v2" by @nkdengineer (High confidence) Related Issues: #83130
Recommendation: REVERT
PR #87737 was intended to fix offline-deleted items reappearing and to exclude pending-delete items from the workspace duplication confirmation page count, but the fix is incomplete for report fields — pending-deleted report fields are still counted. The PR is in the current staging release and should be reverted so the incomplete fix does not ship.
Assigned: @nkdengineer (PR author), @JS00001 (approving reviewer), @sobitneupane (approving reviewer) from highest-confidence causing PR only Labels: No label changes made — DeployBlockerCash is correct (this is a Frontend/App bug requiring a fix in Expensify/App). No DeployBlocker label is present.
The PR modifies WorkspaceDuplicateSelectFeaturesForm.tsx (the confirmation page) specifically to fix the count of pending-deleted items, but the report fields case remains broken.
PR fix: Offline deleted rules reappear after reconnecting until cache is cleared v2 #87737 also modifies src/libs/ReportUtils.ts (changes the return type of getReportFieldsByPolicyID from Record<string, PolicyReportField> to Policy['fieldList']) and src/libs/actions/Policy/Policy.ts (adds buildOptimisticDuplicatePolicy with filterPendingDeleteData for fieldList).
Root Cause
In WorkspaceDuplicateSelectFeaturesForm.tsx line 49, the PR attempts to filter out pending-deleted report fields:
For other item types (taxes, categories, coding rules, tags, distance rates), the filter works correctly because those data structures are read from Onyx collections where pendingAction is populated. However, getReportFieldsByPolicyID reads policy.fieldList from the in-memory Onyx policy cache. The fieldList items are of type OnyxValueWithOfflineFeedback<PolicyReportField>, which should include pendingAction, but when a report field is deleted offline, the pendingAction on the fieldList entry may not be set to DELETE at the point where this count is computed — meaning the filter condition is ineffective and the pending-deleted report field is still counted. The fix in buildOptimisticDuplicatePolicy correctly uses filterPendingDeleteData for the actual duplication, but the count shown in the confirmation page UI still does not reflect the correct number.
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.4.0-7 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
@sobitneupane The PR fixing this issue has been merged! The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the BugZero 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]
[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.
[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: N/A
[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.
[BugZero Assignee] Create a GH issue for creating/updating the regression test once above steps have been agreed upon.
If there are posts on the PR or issue that reference a regression or deploy blocker, C+ posts on the issue and confirms regression (which will reduce pay by 50%) or provides reasoning why they shouldn’t be considered. If the C+ doesn’t update the issue, the contributor manager making the payment will assume any mention of a regression or deploy blockers reduces the issue amount.
It appears you reviewed the PR responsible for this regression. If so, you wouldn't be due payment, correct?
Thx Sobit, please post about deploy blockers/regressions around the time payment is due, I can't read all comments on all issues I pay to determine if the amount should be reduced. Thx
Activity
melvin-bot commentedon May 6, 2026
You have been assigned to this deploy blocker because you recently merged this PR: #87737
melvin-bot commentedon May 6, 2026
💬 A slack conversation has been started in #expensify-open-source
github-actions commentedon May 6, 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:
OSBotify commentedon May 6, 2026
Investigation Summary
Classification: Frontend bug
Causing PR: #87737 - "fix: Offline deleted rules reappear after reconnecting until cache is cleared v2" by @nkdengineer (High confidence)
Related Issues: #83130
Recommendation: REVERT
PR #87737 was intended to fix offline-deleted items reappearing and to exclude pending-delete items from the workspace duplication confirmation page count, but the fix is incomplete for report fields — pending-deleted report fields are still counted. The PR is in the current staging release and should be reverted so the incomplete fix does not ship.
Assigned: @nkdengineer (PR author), @JS00001 (approving reviewer), @sobitneupane (approving reviewer) from highest-confidence causing PR only
Labels: No label changes made —
DeployBlockerCashis correct (this is a Frontend/App bug requiring a fix inExpensify/App). NoDeployBlockerlabel is present.Detailed Analysis
Evidence
https://github.com/Expensify/App/pull/87737).WorkspaceDuplicateSelectFeaturesForm.tsx(the confirmation page) specifically to fix the count of pending-deleted items, but the report fields case remains broken.Verification
src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx, which is directly modified by PR fix: Offline deleted rules reappear after reconnecting until cache is cleared v2 #87737.src/libs/ReportUtils.ts(changes the return type ofgetReportFieldsByPolicyIDfromRecord<string, PolicyReportField>toPolicy['fieldList']) andsrc/libs/actions/Policy/Policy.ts(addsbuildOptimisticDuplicatePolicywithfilterPendingDeleteDataforfieldList).Root Cause
In
WorkspaceDuplicateSelectFeaturesForm.tsxline 49, the PR attempts to filter out pending-deleted report fields:For other item types (taxes, categories, coding rules, tags, distance rates), the filter works correctly because those data structures are read from Onyx collections where
pendingActionis populated. However,getReportFieldsByPolicyIDreadspolicy.fieldListfrom the in-memory Onyx policy cache. ThefieldListitems are of typeOnyxValueWithOfflineFeedback<PolicyReportField>, which should includependingAction, but when a report field is deleted offline, thependingActionon thefieldListentry may not be set toDELETEat the point where this count is computed — meaning the filter condition is ineffective and the pending-deleted report field is still counted. The fix inbuildOptimisticDuplicatePolicycorrectly usesfilterPendingDeleteDatafor the actual duplication, but the count shown in the confirmation page UI still does not reflect the correct number.61 remaining items
melvin-bot commentedon Jun 9, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.4.0-7 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-06-16. 🎊
For reference, here are some details about the assignees on this issue:
melvin-bot commentedon Jun 9, 2026
@sobitneupane The PR fixing this issue has been merged! The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the BugZero 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]
melvin-bot commentedon Jun 12, 2026
@sobitneupane Uh oh! This issue is overdue by 2 days. Don't forget to update your issues!
melvin-bot commentedon Jun 15, 2026
Triggered auto assignment to @mallenexpensify (
Awaiting Payment)melvin-bot commentedon Jun 15, 2026
Payment Summary
Upwork Job
BugZero Checklist (@mallenexpensify)
sobitneupane commentedon Jun 16, 2026
BugZero 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: Duplicate workspace #69146 (comment)
Link to the comment on the Issue: [Due for payment 2025-09-19] [Due for payment 2025-09-04] Implement Duplicate Workspace feature #67289 (comment)
[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: N/A
[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.
[BugZero Assignee] Create a GH issue for creating/updating the regression test once above steps have been agreed upon.
Link to issue: https://github.com/Expensify/Expensify/issues/649797
Regression Test Proposal
Test:
Do we agree 👍 or 👎
Zapier Logs
Run ID: 00040eee-25c5-ab5e-e4c7-d6fecc2fab04mallenexpensify commentedon Jun 17, 2026
@sobitneupane from the C+ doc
It appears you reviewed the PR responsible for this regression. If so, you wouldn't be due payment, correct?
sobitneupane commentedon Jun 18, 2026
@mallenexpensify The issue was already reproducible in production (#89716 (comment)). This is not a regression.
mallenexpensify commentedon Jun 18, 2026
Payment Summary
Contributor+: @sobitneupane due $250 via NewDot
Thx Sobit, please post about deploy blockers/regressions around the time payment is due, I can't read all comments on all issues I pay to determine if the amount should be reduced. Thx
JmillsExpensify commentedon Jul 28, 2026
$250 approved for @sobitneupane