Revert "fix: block removing a workspace member who holds an active Expensify Card" - #97511
Conversation
…pensify Card" This reverts the merge of #96267 (commit 3433903) to unblock the 9.4.46 deploy. The Expensify Card removal guard is derived from workspace card data in Onyx that the Members flow never fetches. When that data is absent, getAllCardsForWorkspace returns an empty list and the guard evaluates to false, so it silently fails to block instead of showing the modal. Conflicts resolved in WorkspaceMembersPage and WorkspaceMemberDetailsPage to preserve the RuleBot guard and getReimburserEmail changes that landed after the reverted PR. Co-authored-by: Claude <claude@anthropic.com>
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
|
@eVoloshchak Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
…removal-guard Revert "fix: block removing a workspace member who holds an active Expensify Card" (cherry picked from commit 6bbb8a3) (cherry-picked to staging by marcaaron)
|
🚀 Cherry-picked to staging by https://github.com/marcaaron in version: 9.4.46-10 🚀
|
|
🚧 deetergp has triggered a test Expensify/App build. You can view the workflow run here. |
|
🤖 No help site changes required. This PR reverts #96267, which had added a guard blocking removal of a workspace member who holds an active Expensify Card. As the PR description notes, that guard never actually fired in production (the modal never showed), so reverting it restores the standard member-removal behavior — exactly what the help site already documents. The relevant article, The other changed files are language strings ( Since no docs are out of date, I did not create a draft help site PR. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
v9.4.46-10 bandicam.2026-07-31.13-45-34-386.mp4 |
|
Android and iOS passed as well, build v9.4.46-10 ecard.andro.mp4remove.member.ios.MP4 |
|
🚀 Deployed to production by https://github.com/marcaaron in version: 9.4.46-10 🚀
Bundle Size Analysis (Sentry): |
|
🚀 Cherry-picked to staging by https://github.com/marcaaron in version: 9.4.47-0 🚀
|
|
🤖 No help site changes required — no draft PR created. This PR reverts #96267, which had added a guard blocking removal of a workspace member who holds an active Expensify Card. Per the PR description, that guard never actually fired in production (the modal never showed), so reverting it restores the standard member-removal behavior — exactly what the help site already documents. I checked every article under
The remaining changed files — language strings ( Since no docs are out of date, there's nothing to write, so I did not create a draft help site PR. |
|
🚀 Deployed to production by https://github.com/marcaaron in version: 9.4.47-7 🚀
Bundle Size Analysis (Sentry): |
Explanation of Change
Reverts #96267 to unblock the 9.4.46 deploy.
The Expensify Card removal guard reads
WORKSPACE_CARDS_LISTfrom Onyx, but nothing in the Members flow fetches it — only the Expensify Card page and Workflows do. With no card data,hasActiveExpensifyCardAssignedreturnsfalseand the modal never shows. A People Admin has noEXPENSIFY_CARDpermission, so they can never load it at all.Rolling forward needs a backend change (return the flag on
OpenPolicyMemberProfilePage, or enforce onDELETE_MEMBERS_FROM_WORKSPACE), so reverting for now. This reopens #94622.Conflicts resolved to keep the RuleBot guard and
getReimburserEmailchanges that landed after #96267. NeedsCP Staging.Fixed Issues
$ #97500
PROPOSAL: N/A — revert.
Tests
Offline tests
QA Steps
Same as Tests.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)Avatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
N/A — revert, no new UI.