# parent-bff 问题记录

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

---

## §0 已有仲裁核查结论（ai05 复审，2026-07-10）

> 对 parent-bff 相关的已仲裁决策（用户 U1-U4 + coord C1-C6 + coord-final-decisions I6）逐项核查执行情况。

### 0.1 核查通过项（已正确执行）

| 仲裁 | 主题                                                   | 核查结论                                                              |
| ---- | ------------------------------------------------------ | --------------------------------------------------------------------- |
| U2   | push-gateway 豁免 gRPC，HTTP /internal/push            | ✅ 02 §5.3/§7.1 已执行 HTTP 调用 push-gateway                         |
| C2   | 端口 3010，不暴露 gRPC                                 | ✅ 02 §7.2 + matrix.md §3 已执行                                      |
| C3   | core-edu 错误码 CORE_EDU_*                             | ✅ 02 §6.2 已执行                                                     |
| C5   | Kafka topic edu.notification.sent/read/recalled/failed | ✅ 02 §5.2 已执行（004 §7.2 同步属 coord 待办 #7，不阻塞 parent-bff） |

### 0.2 核查发现的问题（仲裁已裁决但文档未同步/执行有偏差）

以下问题均为"仲裁结论正确，但相关文档未同步"或"文档内部不一致"，提请 coord 确认处理方式。

---

## 问题列表

### ISSUE-001-ai05：01-understanding.md 未同步 ai05 接手与多项仲裁

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：文档同步缺失
- **描述**：01-understanding.md 头部仍标 "AI 标识：ai04"、"状态：待 coord 审核"，未反映 ai05 已正式接手（ai-allocation.md §3.2）。同时以下仲裁已裁决但 01 未同步：
  - U3（GraphQL P2 引入）：01 §4.1 仍建议"P4 先对齐 teacher-bff REST 现状"，与 U3 仲裁冲突
  - U4（BFF 豁免 @RequirePermission）：01 §6 表格"权限装饰器"行标"⚠️ 不对齐"，未引用 U4 仲裁
  - C1（错误码前缀 BFF_PARENT_）：01 §3.3 仍用 `PARENT_BFF_` 旧前缀
- **建议方案**：01-understanding.md 头部更新为 ai05 复审版，同步 U3/U4/C1 仲裁结论；或由 coord 确认 01 作为"阶段 1 历史快照"保留原样，以 02 为准
- **状态**：待 coord 仲裁

### ISSUE-002-ai05：02 文档内部 ChildGuard 缓存 TTL 不一致

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：文档内部不一致
- **描述**：02-architecture-design.md 内部 ChildGuard 绑定列表缓存 TTL 三处不一致：
  - §3.1.1 Redis 缓存 Schema 表：写 "60s"（coord 推断原值）
  - §9 #2 ai05 review 结论：调整为 "30s + 主动失效"
  - §13 #7 黄金模板对齐表：写 "30s"
    §3.1.1 表格未同步 §9 的调整，导致同一文档内 60s 与 30s 并存。
- **建议方案**：§3.1.1 表格 ChildGuard 行 TTL 改为 "30s"，与 §9 #2 + §13 #7 一致
- **状态**：待 coord 仲裁（ai05 建议直接修正，属于文档勘误）

### ISSUE-003-ai05：contract.md 仲裁引用编号错误（I3 → I6）

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：契约引用错误
- **描述**：contracts/parent-bff_contract.md §2.1 表格 + §3.1 引用 "I3/ISSUE-047 裁决" 作为 GetChildrenByParent 的仲裁依据。但核查 coord-final-decisions.md 发现：
  - I3 是 "PermissionGuard 本地 map → DB 驱动" 裁决，与家长-学生关联无关
  - I6 才是 "家长-学生关联：P2 即补全 iam_student_guardians 表 + GetChildrenByParent RPC" 裁决
  - 全仓库未检索到 "ISSUE-047" 编号（grep 无结果），疑为虚构编号
- **建议方案**：contract.md 将 "I3/ISSUE-047 裁决" 修正为 "I6 裁决（coord-final-decisions.md §1）"
- **状态**：待 coord 仲裁（ai05 建议直接修正，属于引用勘误）

### ISSUE-004-ai05：004 §4 服务依赖图与 matrix.md §1 未同步 C6 仲裁

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：架构图未同步
- **描述**：C6 仲裁将 parent-bff 依赖扩展为 iam + core-edu + data-ana + msg，但：
  - 004_architecture_impact_map.md §4 服务依赖图（line 376-377）仍只画 `PBFF --> IAM` + `PBFF --> CoreEdu`，未加 DataAna + Msg
  - matrix.md §1 服务依赖矩阵（line 64-65）同样只画 `PBFF --> IAM` + `PBFF --> CORE`
  - 02 §0.1 C6 行已标注 "004 §4 待 coord 同步更新"，但至今未同步
    此差异导致新接手的 AI 看 004/matrix 会误以为 parent-bff 不依赖 data-ana/msg，与 02 设计冲突。
- **建议方案**：coord 在 004 §4 服务依赖图补 `PBFF --> DataAna` + `PBFF --> Msg`，matrix.md §1 同步；更新 004 时按 project_rules §1 "改码必同步图" 执行
- **状态**：待 coord 仲裁

### ISSUE-005-ai05：parent-portal 01 文档与 parent-bff GraphQL 决策跨模块冲突

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：跨模块契约冲突
- **描述**：U3 仲裁决定 parent-bff P4 直接用 GraphQL（02 §4 已执行），但 parent-portal 01-understanding.md §3.1 仍按 REST 设计消费 parent-bff：
  - parent-portal §3.1 列 `GET /parent/viewports`、`GET /parent/dashboard`、`GET /parent/children` 等 REST 端点
  - parent-bff 02 §4.1 明确 "不实现 REST 业务端点（仅保留 /healthz /readyz /metrics）"
  - parent-portal §3.1 还引用 `GET /iam/effective-permissions`（C4 仲裁已改为 `/iam/permissions/effective`）
  - parent-portal §3.1 标 "BFF 对接：parent-bff（ai04 设计）"，ai04 已过时（现 ai05）
    此冲突若不解决，parent-portal（ai15）会按 REST 实现 frontend client，与 parent-bff GraphQL 端点不兼容。
- **建议方案**：coord 协调 ai15 将 parent-portal 01/02 文档的 parent-bff 消费契约从 REST 改为 GraphQL（`POST /api/v1/parent/graphql`），同步 C4 iam 路径仲裁；此属跨模块契约，按 project_rules §14.4 跨模块变更顺序处理
- **状态**：待 coord 仲裁

### ISSUE-006-ai05：proto 包名引用不一致（缺失 next_edu_cloud 前缀）

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：契约引用错误
- **描述**：02-architecture-design.md §3.3 DTO 映射表引用 proto message 为 `iam.v1.UserInfo`、`core_edu.v1.Grade[]`、`analytics.v1.StudentWeakness`、`msg.v1.Notification[]`。但实际 proto 文件包名均带 `next_edu_cloud.` 前缀：
  - iam.proto: `package next_edu_cloud.iam.v1;`
  - core_edu.proto: `package next_edu_cloud.core_edu.v1;`
  - analytics.proto: `package next_edu_cloud.analytics.v1;`
  - msg.proto: `package next_edu_cloud.msg.v1;`
    引用不一致会导致 gRPC client 代码生成时 package 路径错误。
- **建议方案**：02 §3.3 DTO 映射表 proto message 列全部补 `next_edu_cloud.` 前缀；或确认是否统一去掉前缀（需 buf.yaml 配置一致）
- **状态**：待 coord 仲裁

### ISSUE-007-ai05：GraphQL Notification.childId 字段在 msg.proto 缺失

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：契约缺口
- **描述**：02 §4.2 GraphQL schema 定义 `Notification` type 含 `childId: ID` 字段（家长场景需知道通知关联哪个孩子）。但 msg.proto 的 Notification message 无 childId 字段：
  ```proto
  message Notification {
    string id = 1;
    string user_id = 2;
    string type = 3;
    string title = 4;
    string content = 5;
    string channel = 6;
    bool is_read = 7;
    int64 created_at = 8;
  }
  ```
  parent-bff 无法从 msg 服务获取通知关联的孩子 ID，影响"按孩子过滤通知"场景。
- **建议方案**：coord 协调 ai10 在 msg.proto Notification message 补 `string child_id = 9;` 字段（可选，非家长通知为空）；或 parent-bff 从 notification.content 解析（脆弱，不推荐）
- **状态**：待 coord 仲裁

### ISSUE-008-ai05：core_edu.proto 缺 ClassService，02 §7.1 列为已有

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：契约缺口
- **描述**：02 §7.1 交互矩阵列 `core-edu ClassService.GetClass`（查孩子班级信息）状态为 "✅ 已有"。但核查 core_edu.proto 实际只有 ExamService / HomeworkService / GradeService 三个 service，无 ClassService。matrix.md §2 却声称 core-edu 有 "ClassService + ExamService + HomeworkService + GradeService + AttendanceService" 共 22 RPC。proto 与 matrix.md 不一致，且 02 错误标注为"已有"。
  另：core_edu.proto 的 Grade.score 是 string 类型，02 GraphQL Grade.score 是 Float!，string→Float 转换规则未在 §3.3 说明。
- **建议方案**：
  1. coord 确认 ClassService 归属（core-edu 还是 classes 服务），补 proto
  2. 02 §7.1 ClassService.GetClass 状态从 "✅ 已有" 改为 "❌ 待补"
  3. 02 §3.3 补 Grade.score string→Float 转换规则说明
- **状态**：待 coord 仲裁

### ISSUE-009-ai05：ai-allocation iam 责任方与 01/02 文档不一致

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：责任方引用过时
- **描述**：01-understanding.md §7.1/§7.3 多处提"推动 ai02 在 iam 补接口"，02 §8.1 P0 阻塞项 + §14.1 P0-1 也标 iam 责任方为 "ai06（iam 现归属）" 但 §7.3 #1 仍标 ai02。实际 ai-allocation.md §3.2 确认 iam 归属 ai06。01 文档未同步。
- **建议方案**：01 §7.1/§7.3 将 "ai02" 改为 "ai06"；02 §7.3 #1 同步
- **状态**：待 coord 仲裁（ai05 建议直接修正，属于引用勘误）

### ISSUE-010-ai05：02 缺少 ADR / NFR / 容量规划 / 威胁建模（业界规范差距）

- **提请方**：ai05
- **日期**：2026-07-10
- **类型**：架构文档规范缺失
- **描述**：对照业界通用架构文档规范（如 C4 model + ADR + NFR），02-architecture-design.md 存在以下规范差距：
  1. **ADR 缺失**：虽有"已仲裁决策"表，但未按 ADR 格式（Context/Decision/Consequences）记录关键决策（如 GraphQL vs REST、ChildGuard 位置、多子女切换方案）。建议补 ADR 索引章节。
  2. **NFR 未量化**：§10.4 P6 提"SLO 监控"，但文档前部未明确非功能性需求（P95 延迟、可用性、吞吐量目标）。业界规范要求架构文档开头列 NFR。
  3. **容量规划缺失**：未估算家长端 QPS、并发数、数据量（家长数 × 孩子数 × 成绩数），无法指导 HPA 副本数和 Redis 容量规划。
  4. **安全威胁建模缺失**：§6.2 列错误码但未做威胁建模（STRIDE）。家长场景涉及未成年人数据（COPPA/FERPA/PIPL），应补威胁模型。
  5. **数据流图（DFD）缺失**：§1.2 只有 Dashboard 时序图，缺少 DFD 展示数据跨信任边界流动。
- **建议方案**：coord 确认是否在 02 补全上述章节，或作为 P6 硬化阶段补全；当前不阻塞 P4 实施
- **状态**：待 coord 仲裁

---

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

> 详见 [coord.md](../coord.md) §20 ARB-018

| ISSUE                                | 仲裁结论                                                                                           | 状态                  |
| ------------------------------------ | -------------------------------------------------------------------------------------------------- | --------------------- |
| 001（01 文档未同步）                 | ✅ 01 作为阶段 1 历史快照保留原样，以 02 为准（02 已执行 U3/U4/C1）                                | 已裁决（§20 ARB-018） |
| 002（ChildGuard TTL 不一致）         | ✅ 统一为 30s（§3.1.1 表格改为 30s，对齐 §9 #2 + §13 #7）                                          | 已裁决（§20 ARB-018） |
| 003（引用 I3 → I6 错误）             | ✅ 修正为 I6 裁决（coord-final-decisions §1 I6：家长-学生关联）                                    | 已裁决（§20 ARB-018） |
| 004（004 §4 依赖图未同步 C6）        | ✅ coord 补全 004 §4 服务依赖图 + matrix.md §1 依赖矩阵（加 PBFF → DataAna + PBFF → Msg）          | 已裁决（§20 ARB-018） |
| 005（parent-portal REST vs GraphQL） | ✅ coord 协调 ai15 将 parent-portal 01/02 改为 GraphQL 消费（POST /api/v1/parent/v1/graphql）      | 已裁决（§20 ARB-018） |
| 006（proto 包名缺前缀）              | ✅ 统一补 next_edu_cloud. 前缀（ARB-011 已裁决）                                                   | 已裁决（§20 ARB-018） |
| 007（Notification.childId 缺失）     | ✅ coord 协调 ai10 在 msg.proto Notification 补 child_id = 9 字段（可选）                          | 已裁决（§20 ARB-018） |
| 008（ClassService 缺失）             | ✅ coord 已在 ARB-007 补全 ClassService 4 RPC；02 §7.1 状态改 ✅ 已有；Grade.score 转换规则补 §3.3 | 已裁决（§20 ARB-018） |
| 009（ai02→ai06 责任方过时）          | ✅ 修正为 ai06（iam 现归属 ai06，ai-allocation §3.2 确认）                                         | 已裁决（§20 ARB-018） |
| 010（02 缺 ADR/NFR）                 | ✅ P6 硬化阶段补全（当前不阻塞 P4 实施）                                                           | 已裁决（§20 ARB-018） |

---

<!--
追加条目格式：

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

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