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
This commit is contained in:
@@ -12,33 +12,33 @@
|
||||
|
||||
### 1.1 coord-final-decisions I1-I8(iam 专项)核查
|
||||
|
||||
| 裁决 | 内容摘要 | 核查结论 | 证据 |
|
||||
| ---- | -------- | -------- | ---- |
|
||||
| I1 | P2 即启用 gRPC server 50052,REST + gRPC 并存 | ⚠️ **02 文档未回写**:[02-architecture-design.md](../../../services/iam/docs/02-architecture-design.md) §1/§7.1/§8.1 决策点 5 仍写"P2 仅 REST,P3 随 core-edu 引入 gRPC";iam.proto 仅 4 RPC 未补全 | [iam.proto](../../../packages/shared-proto/proto/iam.proto) 仅 4 RPC;[02 文档 §8.1](../../../services/iam/docs/02-architecture-design.md) 决策点 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](../../../packages/shared-ts/src/outbox/) |
|
||||
| I3 | 首次实现即 DB 驱动 + Redis 缓存,废弃本地 map | ❌ **源码未改造**:[permission.guard.ts](../../../services/iam/src/middleware/permission.guard.ts) 第 30-39 行仍用硬编码 `ROLE_PERMISSIONS` map(admin/teacher);02 文档 §8.1 决策点 9 描述为"待改造" | [permission.guard.ts](../../../services/iam/src/middleware/permission.guard.ts) |
|
||||
| I4 | 首次实现即注册 AuthMiddleware,Controller 用 @Req() 注入 | ❌ **源码未注册**:[app.module.ts](../../../services/iam/src/app.module.ts) 仅注册 PermissionGuard 为 APP_GUARD,未在 configure() 消费 AuthMiddleware;02 文档 §1.1/§1.2/§8.1 决策点 10 仍写"P2 仍不注册" | [app.module.ts](../../../services/iam/src/app.module.ts) |
|
||||
| I5 | P2 本地文件 IAM_PRIVATE_KEY_PATH / IAM_PUBLIC_KEY_PATH | ⚠️ **源码未实现**:[iam.service.ts](../../../services/iam/src/iam/iam.service.ts) 第 170-186 行仍用 `env.JWT_SECRET`(HS256 单密钥);02 文档 §8.1 决策点 1 已对齐(本地文件→P6 Vault)但未落地 | [iam.service.ts](../../../services/iam/src/iam/iam.service.ts) |
|
||||
| I6 | P2 即补全 iam_student_guardians 表 + GetChildrenByParent RPC + GET /iam/children | ❌ **02 文档表名错误**:[02 文档 §3.1.2](../../../services/iam/docs/02-architecture-design.md) 用 `iam_parent_student_relations`,裁决表名为 `iam_student_guardians`;源码未实现 | 02 文档 §3.1.2 |
|
||||
| I7 | 采用 /iam/v1/* 前缀,Gateway 透传 | ❌ **02 文档未回写**:[02 文档 §4.1](../../../services/iam/docs/02-architecture-design.md) REST API 清单全部用 `/iam/*` 无 `/v1` 前缀;源码 Controller 用 `@Controller("iam")` 无版本前缀 | [iam.controller.ts](../../../services/iam/src/iam/iam.controller.ts)、[rbac.controller.ts](../../../services/iam/src/iam/rbac.controller.ts) |
|
||||
| I8 | 统一 GET /iam/permissions/effective | ✅ **源码已对齐**:[rbac.controller.ts](../../../services/iam/src/iam/rbac.controller.ts) 第 33 行用 `@Get("permissions/effective")` | [rbac.controller.ts](../../../services/iam/src/iam/rbac.controller.ts) |
|
||||
| 裁决 | 内容摘要 | 核查结论 | 证据 |
|
||||
| ---- | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| I1 | P2 即启用 gRPC server 50052,REST + gRPC 并存 | ⚠️ **02 文档未回写**:[02-architecture-design.md](../../../services/iam/docs/02-architecture-design.md) §1/§7.1/§8.1 决策点 5 仍写"P2 仅 REST,P3 随 core-edu 引入 gRPC";iam.proto 仅 4 RPC 未补全 | [iam.proto](../../../packages/shared-proto/proto/iam.proto) 仅 4 RPC;[02 文档 §8.1](../../../services/iam/docs/02-architecture-design.md) 决策点 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](../../../packages/shared-ts/src/outbox/) |
|
||||
| I3 | 首次实现即 DB 驱动 + Redis 缓存,废弃本地 map | ❌ **源码未改造**:[permission.guard.ts](../../../services/iam/src/middleware/permission.guard.ts) 第 30-39 行仍用硬编码 `ROLE_PERMISSIONS` map(admin/teacher);02 文档 §8.1 决策点 9 描述为"待改造" | [permission.guard.ts](../../../services/iam/src/middleware/permission.guard.ts) |
|
||||
| I4 | 首次实现即注册 AuthMiddleware,Controller 用 @Req() 注入 | ❌ **源码未注册**:[app.module.ts](../../../services/iam/src/app.module.ts) 仅注册 PermissionGuard 为 APP_GUARD,未在 configure() 消费 AuthMiddleware;02 文档 §1.1/§1.2/§8.1 决策点 10 仍写"P2 仍不注册" | [app.module.ts](../../../services/iam/src/app.module.ts) |
|
||||
| I5 | P2 本地文件 IAM_PRIVATE_KEY_PATH / IAM_PUBLIC_KEY_PATH | ⚠️ **源码未实现**:[iam.service.ts](../../../services/iam/src/iam/iam.service.ts) 第 170-186 行仍用 `env.JWT_SECRET`(HS256 单密钥);02 文档 §8.1 决策点 1 已对齐(本地文件→P6 Vault)但未落地 | [iam.service.ts](../../../services/iam/src/iam/iam.service.ts) |
|
||||
| I6 | P2 即补全 iam_student_guardians 表 + GetChildrenByParent RPC + GET /iam/children | ❌ **02 文档表名错误**:[02 文档 §3.1.2](../../../services/iam/docs/02-architecture-design.md) 用 `iam_parent_student_relations`,裁决表名为 `iam_student_guardians`;源码未实现 | 02 文档 §3.1.2 |
|
||||
| I7 | 采用 /iam/v1/* 前缀,Gateway 透传 | ❌ **02 文档未回写**:[02 文档 §4.1](../../../services/iam/docs/02-architecture-design.md) REST API 清单全部用 `/iam/*` 无 `/v1` 前缀;源码 Controller 用 `@Controller("iam")` 无版本前缀 | [iam.controller.ts](../../../services/iam/src/iam/iam.controller.ts)、[rbac.controller.ts](../../../services/iam/src/iam/rbac.controller.ts) |
|
||||
| I8 | 统一 GET /iam/permissions/effective | ✅ **源码已对齐**:[rbac.controller.ts](../../../services/iam/src/iam/rbac.controller.ts) 第 33 行用 `@Get("permissions/effective")` | [rbac.controller.ts](../../../services/iam/src/iam/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.1(8 RPC 核心)+ P2.2(扩展) | ⚠️ workline.md 仅粗略列出 P2.1,P2.2-P6 未细化(见 worklines/iam_workline.md) |
|
||||
| §5.5 | 审计日志归 iam(AuditEvent + 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/AuditEvent(coord-final-decisions §5.1 标注"✅ 已补全"与实际不符) |
|
||||
| 条款 | 内容摘要 | 核查结论 |
|
||||
| ----- | ------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| §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.1(8 RPC 核心)+ P2.2(扩展) | ⚠️ workline.md 仅粗略列出 P2.1,P2.2-P6 未细化(见 worklines/iam_workline.md) |
|
||||
| §5.5 | 审计日志归 iam(AuditEvent + 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/AuditEvent(coord-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 直接交付物,无冲突 |
|
||||
| ARB-002 | MF Shell 暴露清单 | ✅ 不涉及 iam 直接交付物,无冲突 |
|
||||
|
||||
---
|
||||
|
||||
@@ -140,3 +140,19 @@
|
||||
-->
|
||||
|
||||
见上方 §2 新提请异议(ISSUE-001 ~ ISSUE-007)。
|
||||
|
||||
---
|
||||
|
||||
## §3 仲裁结论(2026-07-10 coord)
|
||||
|
||||
> 详见 [coord.md §3 ARB-003](../coord.md#3-arb-003iam-模块-7-项-issue-仲裁)
|
||||
|
||||
| ISSUE | 仲裁结论 | 执行方 |
|
||||
| ----- | ------------------------------------------------------------------------------ | ------------ |
|
||||
| 001 | ✅ 支持 ai06:3 工作日内回写 01/02,删除全部过渡方案,对齐 contract.md v1.0 | ai06 |
|
||||
| 002 | ✅ coord 批次 0 补全 events.proto(ARB-006) | coord |
|
||||
| 003 | ✅ 统一 `edu.iam.*` 域名 + 聚合 topic 风格 | coord |
|
||||
| 004 | ✅ DataScope 采用 ALL/SCHOOL/GRADE/CLASS/SUBJECT/SELF(SUBJECT 替代 DISTRICT) | coord + ai06 |
|
||||
| 005 | ✅ coord 批次 0 补全 iam.proto 至 12 RPC(ARB-007) | coord |
|
||||
| 006 | ✅ 与 ISSUE-001 一并回写,署名改 ai06 | ai06 |
|
||||
| 007 | ✅ contract.md 已修正双入口,ai06 回写 02 文档对齐 | ai06 |
|
||||
|
||||
Reference in New Issue
Block a user