{"record":{"id":"8f65f8d6b1dad11e","repo":"makeplane/plane","slug":"user-not-member-in-workspace","errorCode":null,"errorMessage":"User not member in workspace","messagePattern":"User not member in workspace","errorType":"exception","errorClass":"CommandError","httpStatus":null,"severity":"error","filePath":"apps/api/plane/db/management/commands/create_project_member.py","lineNumber":52,"sourceCode":"\n            project_id = options[\"project_id\"]\n            user_email = options[\"user_email\"]\n            role = options.get(\"role\", 20)\n\n            print(f\"Role: {role}\")\n\n            user = User.objects.filter(email=user_email).first()\n            if not user:\n                raise CommandError(\"User not found\")\n\n            # Check if the project exists\n            project = Project.objects.filter(pk=project_id).first()\n            if not project:\n                raise CommandError(\"Project not found\")\n\n            # Check if the user exists in the workspace\n            if not WorkspaceMember.objects.filter(workspace=project.workspace, member=user, is_active=True).exists():\n                raise CommandError(\"User not member in workspace\")\n\n\n            if ProjectMember.objects.filter(project=project, member=user).exists():\n                # Update the project member\n                ProjectMember.objects.filter(project=project, member=user).update(\n                    is_active=True, role=role\n                )\n            else:\n                # Create the project member\n                ProjectMember.objects.create(project=project, member=user, role=role)\n\n            # Issue Property\n            ProjectUserProperty.objects.get_or_create(user=user, project=project)\n\n            # Success message\n            self.stdout.write(self.style.SUCCESS(f\"User {user_email} added to project {project_id}\"))\n            return\n        except CommandError as e:","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/makeplane/plane/blob/1c8a60f858d8472aa56e29994ec1c7926da2c6ce/apps/api/plane/db/management/commands/create_project_member.py#L34-L70","documentation":"Raised by `create_project_member` when the user is not an ACTIVE member of the project's workspace: `WorkspaceMember.objects.filter(workspace=project.workspace, member=user, is_active=True).exists()` is False (lines 51-52). Project membership requires active workspace membership first. Swallowed by the command's `except CommandError`.","triggerScenarios":"The user was never added to the workspace, was removed (deactivated), or their WorkspaceMember row has `is_active=False`.","commonSituations":"Member was removed from the workspace but you try to re-add them to a project directly; user invited to workspace but never accepted; attempting to bypass workspace membership.","solutions":["Add/reactivate the workspace member first (see `reactivate_workspace_member` command, errors 95-99).","Verify membership: `python manage.py shell -c \"from plane.db.models import WorkspaceMember; print(WorkspaceMember.objects.filter(member__email='x@example.com', is_active=True).values('workspace__slug'))\"`","Ensure `is_active=True` on the WorkspaceMember row before re-running."],"exampleFix":"# before: user not an active workspace member\npython manage.py create_project_member --project_id <uuid> --user_email x@example.com\n# after: reactivate workspace membership first\npython manage.py reactivate_workspace_member <slug> x@example.com\npython manage.py create_project_member --project_id <uuid> --user_email x@example.com","handlingStrategy":"validation","validationCode":"python manage.py shell -c \"from plane.db.models import WorkspaceMember; import sys; sys.exit(0 if WorkspaceMember.objects.filter(member__email='x@example.com', is_active=True).exists() else 1)\"","typeGuard":"def is_active_workspace_member(slug: str, email: str) -> bool:\n    from plane.db.models import WorkspaceMember\n    return WorkspaceMember.objects.filter(workspace__slug=slug, member__email=email, is_active=True).exists()","tryCatchPattern":"# Command swallows CommandError; ensure active workspace membership first.\n# If inactive, run: reactivate_workspace_member <slug> <email>","preventionTips":["Ensure the user is an ACTIVE workspace member before adding to a project.","Reactivate removed members via reactivate_workspace_member first.","Pre-check is_active=True on the WorkspaceMember row."],"tags":["django","management-command","validation","membership","plane"],"backgroundTag":null,"analyzedSha":"1c8a60f858d8472aa56e29994ec1c7926da2c6ce","analyzedAt":"2026-08-12T14:44:31.636Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}