plandex-ai/plandex · error
org member role id is empty
Error message
org member role id is empty
What it means
Fallback guard in GetOrgMemberRoleId: the member-role DB lookup reported success but the cached orgMemberRoleId is still empty, so the function returns this error instead of an invalid role id. Like error 481, it signals inconsistent cache state.
Source
Thrown at app/server/db/rbac_helpers.go:35
}
if orgOwnerRoleId == "" {
return "", fmt.Errorf("org owner role id is empty")
}
return orgOwnerRoleId, nil
}
func GetOrgMemberRoleId() (string, error) {
if orgMemberRoleId == "" {
err := cacheOrgMemberRoleId()
if err != nil {
return "", fmt.Errorf("error getting org member role id: %v", err)
}
}
if orgMemberRoleId == "" {
return "", fmt.Errorf("org member role id is empty")
}
return orgMemberRoleId, nil
}
func GetOrgOwners(orgId string) ([]*User, error) {
var users []*User
err := Conn.Select(&users, "SELECT * FROM users WHERE id IN (SELECT user_id FROM orgs_users WHERE org_id = $1 AND org_role_id = $2)", orgId, orgOwnerRoleId)
if err != nil {
return nil, fmt.Errorf("error getting org owners: %v", err)
}
return users, nil
}
func CacheOrgRoleIds() error {
err := cacheOrgOwnerRoleId()View on GitHub (pinned to e2d772072e)
Solutions
- Initialize via CacheOrgRoleIds() during startup and abort on failure
- Protect cache population with sync.Once or a mutex
- Retry the lookup once inside this branch before returning the error
- Audit for code that resets orgMemberRoleId at runtime
Example fix
// before
if orgMemberRoleId == "" {
return "", fmt.Errorf("org member role id is empty")
}
// after
if orgMemberRoleId == "" {
if err := cacheOrgMemberRoleId(); err != nil {
return "", fmt.Errorf("org member role id is empty: %v", err)
}
} Defensive patterns
Strategy: validation
Validate before calling
if orgMemberRoleId == "" {
if err := CacheOrgRoleIds(); err != nil {
return fmt.Errorf("cannot resolve member role id: %w", err)
}
}
role, err := GetOrgMemberRoleId() Type guard
func memberRoleCacheReady() bool {
return orgMemberRoleId != ""
} Prevention
- Fail fast at startup if CacheOrgRoleIds leaves either global empty
- Guard the globals with sync.Once/mutex to avoid reset races
- Retry the cache fill inside the getter before failing
When it happens
Trigger: cacheOrgMemberRoleId returned nil but did not populate the global (corrupted caching logic), or the global was cleared concurrently after caching.
Common situations: Concurrent initialization races; manual edits to package globals; schema where the 'member' row id is an empty string.
Related errors
- org owner role id is empty
- error getting org owner role id: %v
- error getting org member role id: %v
- error getting org owners: %v
- error getting owner role id: %v
AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05).
Data as JSON: /api/errors/ea4a401cfbb37c23.
Report an issue: GitHub.