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-16] Expensify Card - Card limit field reverts to original amount when confirmation pop-up appears #103127
Version Number: 9.5.3-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:#100567 Email or phone of affected tester (no customers):applausetester+ssndjois2jd1@applause.expensifail.com Issue reported by: Applause Internal Team Bug source: Exploratory - Significant User Experience Deterioration Device used: Mac 26.5 / Chrome App Component: Workspace Settings
Action Performed:
Precondition:
Enable Expensify Card.
Assign a card to yourself.
Go to staging.new.expensify.com
Go to workspace settings > Expensify Card.
Inline edit card limit.
Enter 0 and press Enter.
Expected Result:
Card limit field will show 0 when confirmation pop-up appears.
Actual Result:
Card limit field reverts to the original amount when confirmation pop-up appears.
👋 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: When you press Enter, the inline cell closes and resets to the saved limit right away. The card limit page then opens a confirmation modal for a limit of 0, and only saves after you confirm. Until then, the cell shows the old saved value.
Recommendation: fix forward, don't revert. The PR adds inline editing to 7 tables across 84 files. The saved data is correct: Confirm saves 0 and Cancel keeps the old limit. Only the display while the modal is open is wrong.
Suggested fix: Have changeCardLimit and changeCardLimitType return the showConfirmModal(...).then(...) promise. In the edit hooks, if onSave returns a promise, keep showing the typed value until it settles. Fix the limit-type cell too, since it has the same problem.
Investigation details
useInlineEditState.ts:29-44: save calls onSave(localValue), then always runs setLocalValue(value) and setIsEditing(false). This assumes onSave updates Onyx right away.
WorkspaceExpensifyCardListPage.tsx:204-234: changeCardLimit returns without saving when the new available spend is 0 or less, which is always true for a limit of 0. It calls persistLimit() only after Confirm.
usePopoverEditState.ts:85-93: handleSave closes right away too. changeCardLimitType (L170-L202) also waits for a confirmation, so the old limit type shows behind its modal.
Implementation outline:
In src/components/EditableCell/types.ts, change the onSave type to (value: T) => void | Promise<unknown>.
In useInlineEditState and usePopoverEditState, track a pendingValue. Set it when onSave returns a promise, and clear it in .finally().
In InlineNumberEditCell and the limit-type cell, show the formatted pendingValue instead of displayText while it is set.
Add a case to tests/unit/inlineEditing/editableCellHooks.test.ts with an onSave that returns a promise.
You could instead keep the input in edit mode until the promise settles. That conflicts with focus and blur handling when the modal opens, so the pending-value approach is safer.
The cited files are unchanged since the PR's merge commit, d37f0eeb.
Next Steps: Reply with @MelvinBot implement this to create a draft PR, or @MelvinBot <your feedback> to refine this analysis.
changed the title [-]Expensify Card - Card limit field reverts to original amount when confirmation pop-up appears[/-][+][Due for payment 2026-10-16] Expensify Card - Card limit field reverts to original amount when confirmation pop-up appears[/+]on Oct 9, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.6-6 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-16. 🎊
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 6, 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/131d0271f9becac35f97f6938e6a03225ee45e4696d46e880df72d2057140f5e
melvin-bot commentedon Oct 6, 2026
You have been assigned to this deploy blocker because you recently merged this PR: #100567
github-actions commentedon Oct 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:
melvin-bot commentedon Oct 6, 2026
@JS00001 @Krishna2323 you have been assigned to this deploy blocker because you reviewed the offending PR: #100567
melvin-bot commentedon Oct 6, 2026
@ahmedGaber93 you have been assigned to this deploy blocker because you authored the offending PR: #100567
melvin-bot commentedon Oct 6, 2026
💬 A slack conversation has been started in #expensify-open-source
MelvinBot commentedon Oct 6, 2026
Deploy Blocker Investigation
Causing PR: feat: support inline editing for workspace settings tables. The auto-assignment is correct. Confidence: high, based on code reading. I did not reproduce it in a browser.
Root cause: When you press Enter, the inline cell closes and resets to the saved limit right away. The card limit page then opens a confirmation modal for a limit of 0, and only saves after you confirm. Until then, the cell shows the old saved value.
Recommendation: fix forward, don't revert. The PR adds inline editing to 7 tables across 84 files. The saved data is correct: Confirm saves 0 and Cancel keeps the old limit. Only the display while the modal is open is wrong.
Suggested fix: Have
changeCardLimitandchangeCardLimitTypereturn theshowConfirmModal(...).then(...)promise. In the edit hooks, ifonSavereturns a promise, keep showing the typed value until it settles. Fix the limit-type cell too, since it has the same problem.Investigation details
useInlineEditState.ts:29-44:savecallsonSave(localValue), then always runssetLocalValue(value)andsetIsEditing(false). This assumesonSaveupdates Onyx right away.WorkspaceExpensifyCardLimitCell.tsx:23-30: the cell'svalueanddisplayTextboth come from the saved limit.WorkspaceExpensifyCardListPage.tsx:204-234:changeCardLimitreturns without saving when the new available spend is 0 or less, which is always true for a limit of 0. It callspersistLimit()only after Confirm.usePopoverEditState.ts:85-93:handleSavecloses right away too.changeCardLimitType(L170-L202) also waits for a confirmation, so the old limit type shows behind its modal.Implementation outline:
src/components/EditableCell/types.ts, change theonSavetype to(value: T) => void | Promise<unknown>.useInlineEditStateandusePopoverEditState, track apendingValue. Set it whenonSavereturns a promise, and clear it in.finally().InlineNumberEditCelland the limit-type cell, show the formattedpendingValueinstead ofdisplayTextwhile it is set.tests/unit/inlineEditing/editableCellHooks.test.tswith anonSavethat returns a promise.You could instead keep the input in edit mode until the promise settles. That conflicts with focus and blur handling when the modal opens, so the pending-value approach is safer.
The cited files are unchanged since the PR's merge commit,
d37f0eeb.Next Steps: Reply with
@MelvinBot implement thisto create a draft PR, or@MelvinBot <your feedback>to refine this analysis.view run
JS00001 commentedon Oct 6, 2026
Lets fix this one @ahmedGaber93
JS00001 commentedon Oct 6, 2026
demoting this one
[-]Expensify Card - Card limit field reverts to original amount when confirmation pop-up appears[/-][+][Due for payment 2026-10-16] Expensify Card - Card limit field reverts to original amount when confirmation pop-up appears[/+]melvin-bot commentedon Oct 9, 2026
@ahmedGaber93 / @Krishna2323
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.6-6 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-16. 🎊
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]
Krishna2323 commentedon Oct 11, 2026
Closing this one, fix is on prod.