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-11-03] Members - Error shows up on one of the member rows after bulk changing role to Approve-only #104912
Version Number: 9.5.20-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:#102933 Email or phone of affected tester (no customers):jsnoidjosinjdiosj2@gmail.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:
Go to staging.new.expensify.com
Create a Control workspace.
Go to workspace settings > Members.
Invite two new users to the workspace.
Bulk select both invited members.
Click Change role.
Select Approve-only > Save.
Expected Result:
No error will show up on any of the member row.
Actual Result:
Error shows up on one of the member rows after bulk changing role to Approve-only.
👋 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: A bulk role change sends one request for all selected members. If the server refuses an Approve-only change, the failure data puts an error on every selected row (Member.ts:651-669). The new modal hook from this PR then clears the error for one email only (useApproveOnlyRoleBlockedModal.ts:50-59). So one row keeps its error.
Recommended fix: Clear the role error for every member in the refused request, not just blockedRoleChange.email. Another option is to skip the generic failure error when the refusal is a blocked role change. If a fix can't merge in this deploy window, revert the PR. The feature isn't in production yet, so a revert costs users nothing.
Investigation details
Why this PR: It's the only PR in the 9.5.20-0 checklist that adds the Approve-only role, the blocked-role-change modal, and the row-error clearing. It merged 2026-10-23, the same day as the report. Bulk role changes to other roles already worked in earlier releases.
Single-member assumption: The BlockedRoleChange type holds one email (BlockedRoleChange.ts). The PR's test steps only cover changing one member from the member details page.
Why only one row: If the request had failed for a generic reason, both rows would show the error. An error on exactly one row only fits the single-email clear.
Timing risk: The hook waits one microtask before it clears the error, assuming the failure data lands first. Because it runs from a React effect, that order isn't guaranteed. The cleared error could return even for a single member.
Not verified: I couldn't see the server's refusal payload. The server seems to refuse Approve-only for brand-new invitees, possibly because of the default-workspace rule. Whether that refusal is intended is a separate backend question. Either way, the App gives inconsistent feedback for bulk changes.
Next Steps: Reply with @MelvinBot implement this to create a draft PR, or @MelvinBot <your feedback> to refine this analysis.
changed the title [-]Members - Error shows up on one of the member rows after bulk changing role to Approve-only[/-][+][Due for payment 2026-11-03] Members - Error shows up on one of the member rows after bulk changing role to Approve-only[/+]on Oct 27, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.23-3 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-11-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]
Activity
applause-bot commentedon Oct 23, 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/6f842866e8d7f7e09b8b064b5f6b4914d226f2f831cf395e46e423c1dfd0865f
melvin-bot commentedon Oct 23, 2026
You have been assigned to this deploy blocker because you recently merged this PR: #102933
melvin-bot commentedon Oct 23, 2026
@flodnv @Pujan92 you have been assigned to this deploy blocker because you reviewed the offending PR: #102933
melvin-bot commentedon Oct 23, 2026
@ShridharGoel you have been assigned to this deploy blocker because you authored the offending PR: #102933
melvin-bot commentedon Oct 23, 2026
💬 A slack conversation has been started in #expensify-open-source
github-actions commentedon Oct 23, 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:
MelvinBot commentedon Oct 23, 2026
Deploy Blocker Analysis
Causing PR: [Payment due @Pujan92] Add approve-only workspace role (
Expensify/App#102933). It's a frontend bug.Root cause: A bulk role change sends one request for all selected members. If the server refuses an Approve-only change, the failure data puts an error on every selected row (Member.ts:651-669). The new modal hook from this PR then clears the error for one email only (useApproveOnlyRoleBlockedModal.ts:50-59). So one row keeps its error.
Recommended fix: Clear the role error for every member in the refused request, not just
blockedRoleChange.email. Another option is to skip the generic failure error when the refusal is a blocked role change. If a fix can't merge in this deploy window, revert the PR. The feature isn't in production yet, so a revert costs users nothing.Investigation details
updateWorkspaceMembersRoleonce with all selected logins. That makes a singleAPI.write(Member.ts:737).BlockedRoleChangetype holds oneemail(BlockedRoleChange.ts). The PR's test steps only cover changing one member from the member details page.Next Steps: Reply with
@MelvinBot implement thisto create a draft PR, or@MelvinBot <your feedback>to refine this analysis.view run
m-natarajan commentedon Oct 26, 2026
Mac 26.6 / Chrome
v9.5.20-5
"Approve-only" button is no longer available
Grabando.174.mp4
[-]Members - Error shows up on one of the member rows after bulk changing role to Approve-only[/-][+][Due for payment 2026-11-03] Members - Error shows up on one of the member rows after bulk changing role to Approve-only[/+]melvin-bot commentedon Oct 27, 2026
@Pujan92
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.23-3 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-11-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]
melvin-bot commentedon Oct 29, 2026
@Pujan92 Whoops! This issue is 2 days overdue. Let's get this updated quick!