# teacher-bff 问题记录

> 负责人：ai03
> 关联：[coord.md](../coord.md)、[contracts/teacher-bff_contract.md](../contracts/teacher-bff_contract.md)
> 规则：AI 遇到问题时在此追加条目，coord 仲裁后更新状态

---

## 问题列表

<!--
追加条目格式：

### ISSUE-[编号]-[AI标识]：[标题]

- **提请方**：aiXX
- **日期**：YYYY-MM-DD
- **类型**：契约不明确 / 工作量超批 / 前置依赖缺失 / 编号冲突 / 其他
- **描述**：[详细描述问题]
- **建议方案**：[AI 的建议]
- **状态**：待 coord 仲裁 / 已裁决（见 coord.md §X）
-->

### ISSUE-001-ai03：admin 命名空间 P2 预留与 ARB-001 "P2 不包含" 冲突

- **提请方**：ai03
- **日期**：2026-07-10
- **类型**：契约不明确
- **描述**：coord.md ARB-001 §1.3 关键裁决表写 "admin 命名空间 | **P2 不包含**，P6 admin-portal 阶段新增 `admin` 命名空间"；但 president-final-rulings.md §5.1（ISSUE-044）裁决 "ai03 P2 预留 admin schema 命名空间（如 `admin.*` Query/Mutation）"，且 §7.3 ai03 工作清单明确 "批次 1（P2）：Must Have 13 项 + DownstreamClient 抽象 + admin schema 命名空间预留"。两处对 P2 admin 命名空间的要求不一致——总裁裁决要求 P2 预留（schema 中声明占位），coord 仲裁说 P2 不包含。
- **建议方案**：以总裁裁决为准（裁决优先级 president > coord），修正 ARB-001 §1.3 为 "P2 预留 admin 命名空间占位（schema 中声明 `admin` Query/Mutation 类型骨架，无实际 Resolver），P6 admin-portal 阶段实现具体 Resolver"。ai03 在 P2 schema 第一版中预留 `admin` 命名空间类型声明。
- **状态**：待 coord 仲裁

### ISSUE-002-ai03：P2 dashboard classes 数据来源与 ARB-001 §1.4 调用链冲突

- **提请方**：ai03
- **日期**：2026-07-10
- **类型**：前置依赖缺失
- **描述**：coord.md ARB-001 §1.4 ai03 执行项第 4 条写 "dashboard Resolver 并行调用 iam（3 RPC）+ classes（1 RPC），用 DataLoader 防御 N+1"，暗示 P2 dashboard 需 gRPC 调 classes 服务。但存在三重冲突：
  1. **classes P2 无 gRPC server**：classes.proto 注释 "P1: REST 实现，P3 起转 gRPC"；matrix.md §2 gRPC 接口提供方矩阵中 core-edu（含 classes 合并）gRPC 50053 状态为 P3 就绪。classes 服务 P2 阶段未启用 gRPC。
  2. **B2 裁决约束**：coord-final-decisions.md B2 裁决 "首次实现即 gRPC 调用下游"，若 classes P2 无 gRPC，teacher-bff 不能用 REST 调 classes（B2 禁止 REST 过渡）。
  3. **president §3.5 功能范围**：president-final-rulings.md §3.5 裁决 P2 实现 "班级列表（iam 数据）"，即 P2 班级列表数据来自 iam，不是 classes 服务。
- **建议方案**：采纳 president §3.5，P2 dashboard 的 classes 数据从 iam gRPC 获取（iam `GetEffectiveAccess` 或 `GetViewports` 返回的关联班级），不调 classes 服务。ARB-001 §1.4 第 4 条修正为 "dashboard Resolver 并行调用 iam gRPC（GetUserInfo + GetViewports + GetEffectiveAccess），classes 列表从 iam 返回数据推导，P3 core-edu gRPC 就绪后切换为 `GetClassesByTeacher` RPC"。这样 P2 不依赖 classes gRPC，与 B2 + president §3.5 一致。
- **状态**：待 coord 仲裁

### ISSUE-003-ai03：GraphQL schema 文件命名不一致（ARB-001 vs president §2.17）

- **提请方**：ai03
- **日期**：2026-07-10
- **类型**：编号冲突
- **描述**：GraphQL schema 文件存放目录两处一致（`packages/shared-ts/contracts/graphql/`），但文件名不一致：
  - coord.md ARB-001 §1.3 + §1.4：`teacher-bff.graphql`
  - president-final-rulings.md §2.17 第 1 条：`teacher-bff.schema.graphql`

  ai03 创建文件时无法确定用哪个文件名。

- **建议方案**：以 president §2.17 为准（裁决优先级 president > coord），统一为 `teacher-bff.schema.graphql`。coord 修正 ARB-001 §1.3/§1.4 文件名。
- **状态**：已裁决（见 coord.md §18 ARB-016）

---

## §1 仲裁结论（coord，2026-07-10）

> 详见 [coord.md](../coord.md) §18 ARB-016

| ISSUE                             | 仲裁结论                                                                                                                                                            | 状态                  |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
| 001（admin 命名空间 P2）          | ✅ 以总裁裁决为准，P2 预留 schema 占位（admin.* Query/Mutation 骨架，Resolver 返 null），P6 实现；coord 修正 ARB-001 §1.3                                           | 已裁决（§18 ARB-016） |
| 002（dashboard classes 数据来源） | ✅ 采纳 president §3.5，P2 classes 数据从 iam gRPC 获取（GetViewports/GetEffectiveAccess），不调 classes 服务；P3+ 切换为 core-edu.ClassService.GetClassesByTeacher | 已裁决（§18 ARB-016） |
| 003（schema 文件名）              | ✅ 以总裁 §2.17 为准，统一 `teacher-bff.schema.graphql`；coord 修正 ARB-001 §1.3/§1.4                                                                               | 已裁决（§18 ARB-016） |
