makeplane/plane · error · Error
Member not found
Error message
Member not found
What it means
Workspace-level analogue of [6]: updateMember in the workspace member store throws when getWorkspaceMemberDetails(userId) is falsy. The check protects the optimistic role update and the subsequent updateWorkspaceMember REST call which needs memberDetails.id.
Solutions
- Fetch workspace members for the slug before enabling the role dropdown.
- Confirm the userId is part of workspaceMemberMap[workspaceSlug]; re-fetch if not.
- Verify the workspaceSlug in scope matches the member's actual workspace.
- Guard the action at the call site and show a loading/disabled state instead of throwing.
Example fix
// before
const memberDetails = this.getWorkspaceMemberDetails(userId);
if (!memberDetails) throw new Error("Member not found");
// after
const memberDetails = this.getWorkspaceMemberDetails(userId);
if (!memberDetails) { await this.fetchWorkspaceMembers(workspaceSlug); return; } Defensive patterns
Strategy: validation
Validate before calling
const member = workspaceMemberStore.getWorkspaceMemberDetails(userId);
if (!member) {
await workspaceMemberStore.fetchWorkspaceMembers(workspaceSlug);
return;
} Type guard
const hasWorkspaceMember = (m: unknown): m is { id: string } =>
typeof m === 'object' && m !== null && typeof (m as any).id === 'string'; Try / catch
try { await updateMember(workspaceSlug, userId, { role }); }
catch (e) { showRoleUpdateError(); } Prevention
- Fetch workspace members before enabling role changes.
- Verify the userId belongs to the active workspaceSlug.
- Surface a UI error instead of letting the throw propagate.
When it happens
Trigger: Changing a workspace member's role before workspaceMemberMap[workspaceSlug][userId] is loaded; the userId is not a workspace member; the member record exists but lacks the fields getWorkspaceMemberDetails expects.
Common situations: Workspace settings page opened via deep link before the members list resolves; member removed concurrently in another tab; cross-workspace confusion (userId valid in workspace A but action fired against workspace B).
Related errors
AI-assisted analysis of makeplane/plane@1c8a60f858 (2026-08-12).
Data as JSON: /api/errors/4f28a577bee4d661.
Report an issue: GitHub.
Appendix: source
Thrown at apps/web/core/store/member/workspace/workspace-member.store.ts:259
id: member.id,
member: member.member.id,
role: member.role,
is_active: member.is_active,
});
});
});
return response;
});
/**
* @description update the role of a workspace member
* @param workspaceSlug
* @param userId
* @param data
*/
updateMember = async (workspaceSlug: string, userId: string, data: { role: EUserPermissions }) => {
const memberDetails = this.getWorkspaceMemberDetails(userId);
if (!memberDetails) throw new Error("Member not found");
// original data to revert back in case of error
const originalProjectMemberData = { ...this.workspaceMemberMap?.[workspaceSlug]?.[userId] };
try {
runInAction(() => {
set(this.workspaceMemberMap, [workspaceSlug, userId, "role"], data.role);
});
await this.workspaceService.updateWorkspaceMember(workspaceSlug, memberDetails.id, data);
} catch (error) {
// revert back to original members in case of error
runInAction(() => {
set(this.workspaceMemberMap, [workspaceSlug, userId], originalProjectMemberData);
});
throw error;
}
};
/**
* @description remove a member from workspaceView on GitHub (pinned to 1c8a60f858)