plandex-ai/plandex · error
error getting member role id: %v
Error message
error getting member role id: %v
What it means
cacheOrgMemberRoleId runs 'SELECT id FROM org_roles WHERE name = member' via Conn.Get; any failure (no matching row, dead connection, query error) is wrapped with this message and surfaces through GetOrgMemberRoleId and CacheOrgRoleIds. It is the low-level lookup for the member role id.
Source
Thrown at app/server/db/rbac_helpers.go:93
func cacheOrgOwnerRoleId() error {
var roleId string
err := Conn.Get(&roleId, "SELECT id FROM org_roles WHERE name = 'owner'")
if err != nil {
return fmt.Errorf("error getting owner role id: %v", err)
}
orgOwnerRoleId = roleId
return nil
}
func cacheOrgMemberRoleId() error {
var roleId string
err := Conn.Get(&roleId, "SELECT id FROM org_roles WHERE name = 'member'")
if err != nil {
return fmt.Errorf("error getting member role id: %v", err)
}
orgMemberRoleId = roleId
return nil
}
View on GitHub (pinned to e2d772072e)
Solutions
- Insert the 'member' row: INSERT INTO org_roles (name) VALUES ('member');
- Run pending migrations and seed both roles together
- Distinguish sql.ErrNoRows (data missing) from ping/connection errors in the wrapped error
- Ensure DB initialization ran before the first call
Example fix
// before
var roleId string
err := Conn.Get(&roleId, "SELECT id FROM org_roles WHERE name = 'member'")
// after
var roleId string
err := Conn.Get(&roleId, "SELECT id FROM org_roles WHERE name = 'member'")
if errors.Is(err, sql.ErrNoRows) {
return fmt.Errorf("org_roles 'member' row missing — run seed migrations")
} Defensive patterns
Strategy: retry
Validate before calling
var n int
err := db.QueryRow("SELECT count(*) FROM org_roles WHERE name = 'member'").Scan(&n)
if err != nil || n == 0 {
return fmt.Errorf("member role row missing")
} Type guard
func isNoRows(err error) bool {
return err != nil && (errors.Is(err, sql.ErrNoRows) || strings.Contains(err.Error(), "sql: no rows"))
} Try / catch
roleId, err := GetOrgMemberRoleId()
if err != nil {
if isNoRows(err) {
return fmt.Errorf("seed data missing: %w", err)
}
return retryWithBackoff(3, func() error { // transient connectivity
_, e := GetOrgMemberRoleId()
return e
})
} Prevention
- Distinguish sql.ErrNoRows from connection errors before deciding to retry
- Seed both roles atomically
- Warm caches at startup so failures surface early
When it happens
Trigger: First GetOrgMemberRoleId (via AddOrgDomainUsers) or CacheOrgRoleIds call when org_roles lacks a 'member' row, the table doesn't exist, or the DB is unreachable.
Common situations: Unseeded or partially seeded database; connection refused after DB restart; migrations not applied on a fresh environment.
Related errors
- error getting owner role id: %v
- error getting org owner role id: %v
- error getting org member role id: %v
- error getting org owners: %v
- error creating invite: %v
AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05).
Data as JSON: /api/errors/8017f138d3e1a138.
Report an issue: GitHub.