Files
Agent-System/.doc/ops/lessons/2026-09-28-standard-role-reseed.md
T

1.5 KiB

lesson_id, lesson_state, owner, reviewer, last_reviewed, reviewed_revision, source_issues, keywords
lesson_id lesson_state owner reviewer last_reviewed reviewed_revision source_issues keywords
LESSON-20260928-standard-role-reseed validated Cursor Cursor(自审) 2026-09-28 4ba60c2c9d
ISSUE-20260928-register-internal
auth
register
role-guest
system_roles
is_system
23503
23505
INTERNAL

代码硬编码的标准角色必须可自愈且不可删

  • 触发条件:注册、管理员建号或种子用户写入固定 role_id,而该角色只在历史 goose 种子里出现一次。
  • 机制与来源:Register 固定写 role-guest。00015 仅 role-admin 为 is_system。角色一旦被删,goose 不重跑、BootstrapIAM 只补用户,user_role_bindings 外键失败被脱敏成 INTERNAL。证据日期 2026-09-28,见 任务。
  • 开发检查:硬编码角色 id 须在迁移里 ON CONFLICT DO UPDATE 补种,并标 is_system。用户名一类唯一冲突返回领域错误,不要包进 insert user: 这类会被当成 500 的前缀。
  • 验证方式:缺角色的库补种后注册返回 200;重复用户名返回 400 且 error 为「用户名已存在」。
  • 适用边界:适用于 IAM 标准角色。业务自定义角色仍允许删除(无人引用时)。
  • 防护落实:migration 00077 + DeleteRole 既有系统角色拒绝。未新增 lint。
  • 修订与失效:若注册不再绑定 role-guest,本条对那个写入点失效,保留历史。