plandex-ai/plandex · error
error getting org member role id: %v
Error message
error getting org member role id: %v
What it means
GetOrgMemberRoleId memoizes the 'member' org_roles id. If the cached global orgMemberRoleId is empty, it calls cacheOrgMemberRoleId; a failure of that DB lookup (missing row, dead connection, query error) is wrapped with this message. AddOrgDomainUsers therefore cannot resolve the role to assign to users.
Source
Thrown at app/server/db/rbac_helpers.go:30
if orgOwnerRoleId == "" {
err := cacheOrgOwnerRoleId()
if err != nil {
return "", fmt.Errorf("error getting org owner role id: %v", err)
}
}
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)
}
View on GitHub (pinned to e2d772072e)
Solutions
- Ensure seed data inserts the 'member' row into org_roles
- Run CacheOrgRoleIds()/MustInitDb at startup so failures surface early
- Verify connectivity: SELECT id FROM org_roles WHERE name = 'member';
- Read the wrapped inner error to distinguish sql.ErrNoRows from connection failures
Example fix
// before
memberRoleId, err := GetOrgMemberRoleId()
if err != nil { return err }
// after
if err := CacheOrgRoleIds(); err != nil {
return fmt.Errorf("role cache unavailable: %w", err)
}
memberRoleId, err := GetOrgMemberRoleId() Defensive patterns
Strategy: try-catch
Validate before calling
// before AddOrgDomainUsers
var n int
db.QueryRow("SELECT count(*) FROM org_roles WHERE name = 'member'").Scan(&n)
if n == 0 {
return fmt.Errorf("org_roles 'member' row missing; run seed migrations")
} Type guard
func hasMemberRole(ctx context.Context, db *sql.DB) bool {
var n int
if err := db.QueryRowContext(ctx, "SELECT count(*) FROM org_roles WHERE name = 'member'").Scan(&n); err != nil {
return false
}
return n > 0
} Try / catch
memberRoleId, err := GetOrgMemberRoleId()
if err != nil {
if errors.Is(err, sql.ErrNoRows) || strings.Contains(err.Error(), "no rows") {
return fmt.Errorf("seed data missing: %w", err)
}
return fmt.Errorf("database unavailable: %w", err)
} Prevention
- Seed owner and member rows together in a single migration
- Warm both caches at startup with CacheOrgRoleIds()
- Add a readiness probe that verifies both role ids resolve
When it happens
Trigger: Calling AddOrgDomainUsers when the org_roles table lacks a 'member' row, the database is unreachable, or Conn is nil/not initialized.
Common situations: Database seeded with only some roles; migration partially applied; environment pointing at wrong database; DB restarted and connections dropped.
Related errors
- error getting org owner role id: %v
- org owner role id is empty
- org member role id is empty
- 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/560f4e49c86546c2.
Report an issue: GitHub.