Files
Edu/docs/architecture/issues/objections/iam_issue.md
SpecialX c179af64a6 docs(docs): coord 完成 15 模块 issue 仲裁与基础设施同步
coord.md 新增 ARB-019/020/021 三章仲裁章节,修正 ARB-001。

- coord.md: 新增 ARB-019/020/021(student/parent/admin-portal 24 项)
- coord.md: 修正 ARB-001(admin P2 预留/schema 文件名/classes 数据源)
- 004 §4: 依赖图加 PBFF→DataAna+Msg
- 004 §7.2: push-gateway→Redis 软失败标注
- 004 §11.4: 错误码前缀矩阵(11 服务+i18n key)
- 004 §11.5: ActionState 信封规范(降级模式方案 B)
- matrix §1: 依赖矩阵加 PBFF 边
- matrix §2: 移除 api-gateway 为 iam gRPC 消费方
- matrix §4: admin-portal→teacher-bff
- matrix §5: 移除 /sse+鉴权头统一
- matrix §6: 错误码表补 i18n key 列
- 15 个 issue.md: 仲裁结论回写
- push-gateway_contract: 移除 /sse+鉴权头改 X-Internal-Token
- packages/contracts: 新建包 ADMIN_* 权限点常量

AI: coord
2026-07-10 16:30:51 +08:00

16 KiB
Raw Blame History

iam 问题记录

负责人ai06 关联:coord.mdcontracts/iam_contract.md 规则AI 遇到问题时在此追加条目coord 仲裁后更新状态


§1 已有仲裁核查

对已生效的仲裁coord-final-decisions I1-I8、president-final-rulings 相关条款、coord.md ARB-001/ARB-002逐条核查落地情况。

1.1 coord-final-decisions I1-I8iam 专项)核查

裁决 内容摘要 核查结论 证据
I1 P2 即启用 gRPC server 50052REST + gRPC 并存 ⚠️ 02 文档未回写02-architecture-design.md §1/§7.1/§8.1 决策点 5 仍写"P2 仅 RESTP3 随 core-edu 引入 gRPC"iam.proto 仅 4 RPC 未补全 iam.proto 仅 4 RPC02 文档 §8.1 决策点 5
I2 直接建 shared-ts Outbox 工具包iam 首次实现即用 工具包已建立packages/shared-ts/src/outbox/ 存在 outbox.service.ts + outbox.module.ts⚠️ 02 文档 §8.1 决策点 4 仍写"iam 自建轻量 Outbox",未回写 shared-ts/outbox
I3 首次实现即 DB 驱动 + Redis 缓存,废弃本地 map 源码未改造permission.guard.ts 第 30-39 行仍用硬编码 ROLE_PERMISSIONS mapadmin/teacher02 文档 §8.1 决策点 9 描述为"待改造" permission.guard.ts
I4 首次实现即注册 AuthMiddlewareController 用 @Req() 注入 源码未注册app.module.ts 仅注册 PermissionGuard 为 APP_GUARD未在 configure() 消费 AuthMiddleware02 文档 §1.1/§1.2/§8.1 决策点 10 仍写"P2 仍不注册" app.module.ts
I5 P2 本地文件 IAM_PRIVATE_KEY_PATH / IAM_PUBLIC_KEY_PATH ⚠️ 源码未实现iam.service.ts 第 170-186 行仍用 env.JWT_SECRETHS256 单密钥02 文档 §8.1 决策点 1 已对齐本地文件→P6 Vault但未落地 iam.service.ts
I6 P2 即补全 iam_student_guardians 表 + GetChildrenByParent RPC + GET /iam/children 02 文档表名错误02 文档 §3.1.2iam_parent_student_relations,裁决表名为 iam_student_guardians;源码未实现 02 文档 §3.1.2
I7 采用 /iam/v1/* 前缀Gateway 透传 02 文档未回写02 文档 §4.1 REST API 清单全部用 /iam/*/v1 前缀;源码 Controller 用 @Controller("iam") 无版本前缀 iam.controller.tsrbac.controller.ts
I8 统一 GET /iam/permissions/effective 源码已对齐rbac.controller.ts 第 33 行用 @Get("permissions/effective") rbac.controller.ts

1.2 president-final-rulings 相关条款核查

条款 内容摘要 核查结论
§2.15 /iam/v1/* 版本化规则Controller 加 v1 前缀) 同 I7未落地
§2.16 gRPC 与 REST 双入口策略gateway HTTP 透传 + BFF gRPC 调用) ⚠️ 02 文档未体现双入口设计,仅描述 REST 单入口contract.md §1.2 写"无对外 HTTP 端点,仅 gRPC"与此冲突
§3.2 iam P2 拆分 P2.18 RPC 核心)+ P2.2(扩展) ⚠️ workline.md 仅粗略列出 P2.1P2.2-P6 未细化(见 worklines/iam_workline.md
§5.5 审计日志归 iamAuditEvent + edu.iam.audit.created topic + user_audit_log 表) 02 文档未包含审计日志设计events.proto 未定义 AuditEvent message
§5.1 events.proto 补全 UserEvent/RoleEvent events.proto 实际仅含 ClassEvent/ExamEvent/HomeworkEvent/GradeEvent缺 UserEvent/RoleEvent/AuditEventcoord-final-decisions §5.1 标注" 已补全"与实际不符)

1.3 coord.md ARB-001 / ARB-002 核查

仲裁 内容摘要 核查结论
ARB-001 teacher-bff GraphQL schema 第一版5 Query schema 中 me: User!viewports 依赖 iam与 iam GetUserInfo/GetViewports RPC 对齐,无冲突
ARB-002 MF Shell 暴露清单 不涉及 iam 直接交付物,无冲突

§2 新提请异议

ISSUE-001-ai0601/02 文档未回写 I1-I8 裁决,中间过渡方案残留

  • 提请方ai06
  • 日期2026-07-10
  • 类型:契约不明确 / 其他
  • 描述coord-final-decisions §0.1 强制覆盖声明要求各 AI 在 3 个工作日内回写 02 文档,删除所有"中间过渡方案"。president-final-rulings §3.4 也明确要求 ai06 回写 iam 02I1-I8§3.4)。但当前 01-understanding.md02-architecture-design.md 仍残留大量过渡方案:
    • 02 §1/§7.1/§8.1 决策点 5P2 仅 REST → P3 gRPC违反 I1
    • 02 §8.1 决策点 4iam 自建 Outbox违反 I2
    • 02 §8.1 决策点 9PermissionGuard 待改造(违反 I3
    • 02 §1.1/§1.2/§8.1 决策点 10AuthMiddleware P2 不注册(违反 I4
    • 02 §3.1.2:表名 iam_parent_student_relations违反 I6
    • 02 §4.1API 路径无 /v1 前缀(违反 I7
    • 01 §1teacher-bff HTTP 调用 iam违反 B2应 gRPC
  • 建议方案ai06 立即回写 01/02 文档,删除全部中间过渡方案描述,对齐 I1-I8 + §2.15/§2.16/§5.5 最终方案。
  • 状态:待 coord 仲裁(确认回写范围与验收标准)

ISSUE-002-ai06events.proto 缺少 UserEvent/RoleEvent/AuditEvent message

  • 提请方ai06
  • 日期2026-07-10
  • 类型:前置依赖缺失
  • 描述coord-final-decisions §5.1 标注"events.proto 已补全UserEvent/RoleEvent/NotificationEvent/MasteryEvent/AIUsageEvent/KnowledgePointEvent/QuestionEvent"president §5.5 也要求"events.proto 补 AuditEvent 在批次 0.10 完成"。但实际 events.proto 仅定义 ClassEvent/ExamEvent/HomeworkEvent/GradeEvent 4 个 message完全缺少 UserEvent/RoleEvent/AuditEvent 等 iam 依赖的事件契约。这直接阻塞 iam Outbox 事件发布iam 无法写入未定义 schema 的事件)。
  • 建议方案coord 立即补全 events.proto至少新增 UserEvent、RoleEvent、AuditEvent 三个 message按 02 文档 §5.2 和 president §5.5 的字段定义)。
  • 状态:待 coord 仲裁

ISSUE-003-ai06Topic 命名三方不一致edu.identity.* vs edu.iam.*

  • 提请方ai06
  • 日期2026-07-10
  • 类型:契约不明确
  • 描述iam 事件 Topic 命名存在三方不一致:
    • 004 §7.2 行 620-621edu.identity.user.created / edu.identity.user.updated(用 identity 域名)
    • matrix.md §4 / iam_contract.md §1.4edu.iam.user.events / edu.iam.role.events / edu.iam.audit.created(用 iam 域名)
    • president §5.5edu.iam.audit.created(用 iam 域名)
    • coord-final-decisions G16 规则:edu.<domain>.<aggregate>.<action>
  • 建议方案:统一用 edu.iam.*(服务名为 iam非 identitycoord 同步修正 004 §7.2 的 edu.identity.*edu.iam.*。同时明确 Topic 粒度matrix.md 用聚合 topicedu.iam.user.events 含多 action004 §7.2 用具体动作 topicedu.iam.user.created),需统一为一种风格。
  • 状态:待 coord 仲裁

ISSUE-004-ai06DataScope 枚举三方不一致

  • 提请方ai06
  • 日期2026-07-10
  • 类型:契约不明确
  • 描述DataScope 6 级枚举存在三方不一致:
    • 004 §5.3 表 行 463-470SELF/CLASS/GRADE/SCHOOL/DISTRICT/ALL
    • 004 §5.3 行 505all/grade_managed/class_taught/children/owned + 自定义(语义命名,与表不同)
    • president §3.2 P2.2ALL/SCHOOL/GRADE/CLASS/SUBJECT/SELFSUBJECT 替代 DISTRICT
    • 源码 iam.schema.ts 第 16-25 行self/class/grade/school/district/all与 004 表一致,与 president 不一致)
  • 建议方案coord 统一裁定最终枚举值。若采用 president 的 SUBJECT学科级数据范围K12 场景更实用),需同步修改源码 schema + 004 §5.3 表 + 02 文档;若保留 DISTRICT需修正 president §3.2。同时修正 004 行 505 的语义命名使其与枚举表一致。
  • 状态:待 coord 仲裁

ISSUE-005-ai06iam.proto 仅 4 RPC未补全至 12 RPC

  • 提请方ai06
  • 日期2026-07-10
  • 类型:前置依赖缺失
  • 描述coord-final-decisions §5.1 要求 iam.proto 在"P2 启动前"补全 8 个新 RPCGetViewports / GetEffectivePermissions / GetEffectiveAccess / Logout / GetPublicKey / BatchGetUsers / GetEffectiveDataScope / GetChildrenByParentpresident §6 批次 0 任务 0.3 也明确"coord 补全 iam.proto 8 RPC"。但实际 iam.proto 仍仅 4 RPCRegister/Login/RefreshToken/GetUserInfo未补全。这阻塞 iam P2.1 的 8 RPC 实现proto 是契约先行前提)。
  • 建议方案coord 立即补全 iam.proto 至 12 RPC含对应 message 定义),对齐 iam_contract.md §1.1 的 12 RPC 清单。
  • 状态:待 coord 仲裁

ISSUE-006-ai0601/02 文档 AI 身份署名错误

  • 提请方ai06
  • 日期2026-07-10
  • 类型:其他
  • 描述01-understanding.md02-architecture-design.md 署名"AIai02TS / 身份认证)"、"AI Agent: ai02 (iam-module)"。但 coord-final-decisions §3.1、president §3.2、matrix.mdworkline.mdiam_workline.mdiam_contract.md 全部指明 iam 由 ai06 负责。ai02 实际负责 push-gatewaycoord-final-decisions §3.7)。文档署名错误会导致多 AI 协作时身份混淆。
  • 建议方案:回写时将 01/02 文档署名从 ai02 改为 ai06。
  • 状态:待 coord 仲裁

ISSUE-007-ai06contract.md §1.2 与双入口策略冲突

  • 提请方ai06
  • 日期2026-07-10
  • 类型:契约不明确
  • 描述iam_contract.md §1.2 写"无对外 HTTP 端点,仅 gRPC"。但 president §2.16 裁决双入口策略REST 供 gateway 透传 + gRPC 供 BFF 聚合调用,"gateway 保持 HTTP 透传"。若 iam 不暴露 HTTP 端点gateway 无法透传gateway 不改为 gRPC 客户端)。
  • 建议方案:修正 contract.md §1.2,补充 REST 端点清单(/iam/v1/* 系列),标明"REST 供 gateway 透传 + admin-portal 直连gRPC 供 BFF 聚合调用"。
  • 状态:待 coord 仲裁

问题列表

见上方 §2 新提请异议ISSUE-001 ~ ISSUE-007


§3 仲裁结论2026-07-10 coord

详见 coord.md §3 ARB-003

ISSUE 仲裁结论 执行方
001 支持 ai063 工作日内回写 01/02删除全部过渡方案对齐 contract.md v1.0 ai06
002 coord 批次 0 补全 events.protoARB-006 coord
003 统一 edu.iam.* 域名 + 聚合 topic 风格 coord
004 DataScope 采用 ALL/SCHOOL/GRADE/CLASS/SUBJECT/SELFSUBJECT 替代 DISTRICT coord + ai06
005 coord 批次 0 补全 iam.proto 至 12 RPCARB-007 coord
006 与 ISSUE-001 一并回写,署名改 ai06 ai06
007 contract.md 已修正双入口ai06 回写 02 文档对齐 ai06