Files
Edu/docs/architecture/issues/objections/parent-portal_issue.md
SpecialX c6362f4b04
Some checks failed
CI / quality-ts (push) Failing after 53s
CI / quality-go (push) Failing after 7s
CI / quality-proto (push) Failing after 3s
CI / deploy (push) Has been skipped
docs(docs): 更新 issue 仲裁状态 + 生成集成测试阶段规划
- 14 个 issue.md 状态字段更新为"已裁决"
  - 对应 coord.md ARB-001~022 章节
  - 共 104 处状态字段更新
- 新增 integration-test-phase.md
  - 集成测试与部署验证阶段(P7)规划
  - 6 个批次任务分解
  - 8 条核心 E2E 链路定义
  - 验收标准和退出标准

Coord-AI
2026-07-10 22:05:37 +08:00

14 KiB
Raw Blame History

parent-portal 问题记录

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


§0 已有仲裁核查ai15 复核 ARB-001 / ARB-002 落地情况)

ai15 接管 parent-portal 后,核查 coord 已发布的两项仲裁ARB-001 teacher-bff GraphQL schema、ARB-002 MF Shell 暴露清单)在 parent-portal 文档中的落地情况。

0.1 ARB-001teacher-bff GraphQL schema 第一版)核查

核查项 ARB-001 结论 parent-portal 落地情况 状态
BFF 用 GraphQL非 REST 已裁决 GraphQL 01-understanding §3.1 + 02-architecture-design §4.1 全部描述为 REST 消费 未落地
ActionState 信封 已裁决 01 §3.2 已对齐
错误码前缀路由 已裁决 01 §3.2 + 02 §6.2 已对齐

结论ARB-001 的核心裁决BFF = GraphQL在 parent-portal 的 01/02 文档中未落地01 §3.1 与 02 §4.1 仍按 REST 编写,与 parent-bff_contract.md §1.3GraphQL 端点 :3010matrix.md §3parent-bff GraphQL直接冲突。提请 ISSUE-001。

0.2 ARB-002MF Shell 暴露清单)核查

核查项 ARB-002 结论 parent-portal 落地情况 状态
Shell 暴露 GraphQLProvider 已裁决 01 §4 技术栈未列 urql/GraphQL client02 §4.1 用 useApi()REST ApiClient而非 useGraphQLClient() 未落地
MF shared 含 urql/graphql/@edu/* 已裁决 02 §1.2 shared 仅列 react/react-dom/@tanstack/react-query/zustand/nuqs缺 urql/graphql/@edu/ui-tokens/@edu/ui-components/@edu/hooks 未落地
Shell 暴露 AppShell 已裁决 01 §9.1 + 02 §7.1 已对齐
feature flag NEXT_PUBLIC_MF_ENABLED 已裁决 01/02 均未提及 未落地

结论ARB-002 关于 GraphQL client 与 MF shared 的裁决在 parent-portal 文档中部分未落地。提请 ISSUE-002。


问题列表

ISSUE-001-ai1501/02 文档 REST 消费 parent-bff 与 ARB-001 GraphQL 裁决冲突

  • 提请方ai15
  • 日期2026-07-10
  • 类型:契约不明确(文档与已裁决架构冲突)
  • 描述
    • 01-understanding.md §3.1 列出 parent-portal 经 REST 消费 parent-bffGET /parent/viewportsGET /parent/childrenPOST /parent/children/:childId/selectGET /parent/notificationsPUT /parent/notification-preferences
    • 02-architecture-design.md §4.1 useParentApi 实现全部基于 api.get()/api.post() REST 调用
    • 但 ARB-001coord.md §1已裁决 BFF 用 GraphQLparent-bff_contract.md §1.3 明确 parent-bff 提供 POST /graphql:3010matrix.md §3 确认 parent-bff = GraphQL
    • parent-portal 自己的 contract.md §2.3-2.4 也写明消费 GraphQLPOST /api/parent/graphqlQuery 域currentUser/myChildren/childSummary/childGrades 等)
    • 文档内部自相矛盾01/02 用 RESTcontract.md 用 GraphQL
  • 建议方案
    1. coord 确认 parent-portal 消费 parent-bff 统一用 GraphQL(与 ARB-001、parent-bff contract、matrix.md 一致)
    2. ai15 据此修订 01 §3.1(改为 GraphQL Query/Mutation 域、§3.1.1X-Fields 字段裁剪改为 GraphQL query 字段选择、02 §4.1useParentApi 改为 GraphQL hooks、§4.2TanStack Query 约定配合 GraphQL operations、§11.3 未决设计决策 #2移除已裁决
    3. 若 coord 另有裁决(如 parent-portal 特殊走 REST以 coord 裁决为准
  • 状态:已裁决(见 coord.md §22

ISSUE-002-ai15MF shared 配置缺 urql/graphql/@edu/* 与 ARB-002 冲突

  • 提请方ai15
  • 日期2026-07-10
  • 类型:契约不明确(文档与已裁决 MF 配置冲突)
  • 描述
    • 02-architecture-design.md §1.2 MF shared 配置仅列:reactreact-dom@tanstack/react-queryzustandnuqs
    • ARB-002coord.md §2裁决的 shared 应包含:reactreact-domurqlgraphql@edu/ui-tokens@edu/ui-components@edu/hooks
    • 缺失 urql/graphql 会导致 Remote 与 Shell 各加载一份 GraphQL client 实例,破坏单例,引发缓存不一致与重复请求
    • 缺失 @edu/* 会导致设计令牌/UI 组件/Hooks 各加载一份
    • 同时 01 §4 技术栈表未列 GraphQL clienturql与 ARB-002 Shell 暴露 GraphQLProvider 矛盾
  • 建议方案
    1. coord 确认 parent-portal MF shared 必须包含 ARB-002 全部 7 项react/react-dom/urql/graphql/@edu/ui-tokens/@edu/ui-components/@edu/hooks
    2. ai15 修订 02 §1.2 shared 配置 + 01 §4 技术栈表(新增 urql + GraphQL client 行)
    3. 02 §4.1 useParentApi 改为从 Shell 暴露的 useGraphQLClient() 获取 urql client不再用 REST ApiClient
  • 状态:已裁决(见 coord.md §22

ISSUE-003-ai15switch-child 端点在 01/02 文档间不一致

  • 提请方ai15
  • 日期2026-07-10
  • 类型:契约不明确(文档内部不一致)
  • 描述
    • 01-understanding.md §3.1 列 POST /parent/children/:childId/select
    • 02-architecture-design.md §2.2 + §4.1 用 POST /api/v1/parent/switch-childbody 携带 childId
    • 两处路径与语义均不一致URL param vs body param
    • parent-bff contract.md 未列 switch-child其 §1.3 仅列 Query/Mutation 域,未细到 switch-child
  • 建议方案
    1. 若走 GraphQL依 ISSUE-001 裁决switch-child 应为 mutation switchChild(childId: ID!): SwitchChildPayload!,不存在 REST 路径
    2. 若走 REST统一为 POST /api/v1/parent/switch-childbody 携带 childId与 02 一致),修订 01 §3.1
    3. 请 coord 一并明确 parent-bff GraphQL schema 是否包含 switchChild Mutation当前 parent-bff contract.md 未列)
  • 状态:已裁决(见 coord.md §22

ISSUE-004-ai15登录端点在 01 / contract.md / matrix.md 间三方不一致

  • 提请方ai15
  • 日期2026-07-10
  • 类型:契约不明确(跨文档不一致)
  • 描述
    • 01-understanding.md §3.1 列 POST /iam/login
    • parent-portal_contract.md §2.3 列 POST /api/auth/login
    • matrix.md §5 规范 iam 经 api-gateway 代理路径为 /api/v1/iam/*
    • 三处不一致,且 contract.md 的 /api/auth/login 路径在 matrix.md 中不存在
  • 建议方案
    1. 统一为 POST /api/v1/iam/login(与 matrix.md §5 + 01 §3.1 的 /api/v1/iam/* 前缀一致)
    2. ai15 修订 contract.md §2.3 路径
    3. 注意:登录是 parent-portal 唯一可能走 REST非 GraphQL的端点因登录前无 JWTGraphQL endpoint 需鉴权。请 coord 确认登录是否走 REST /api/v1/iam/login,其余走 GraphQL
  • 状态:已裁决(见 coord.md §22

ISSUE-005-ai1502 §11.3 未决设计决策 #2 "GraphQL vs REST" 已由 ARB-001 裁决,应移除

  • 提请方ai15
  • 日期2026-07-10
  • 类型:其他(文档过时)
  • 描述
    • 02-architecture-design.md §11.3 第 2 项将 "GraphQL vs REST" 列为未决设计决策,建议 "P4 用 REST后续若 BFF 切 GraphQL 再引入 urql"
    • 但 ARB-001coord.md §1已于 2026-07-09 裁决 BFF 用 GraphQL且 parent-bff contract.md 确认 GraphQL
    • 此项已过时,会误导后续开发
  • 建议方案
    1. coord 确认 ARB-001 适用于 parent-portal即 parent-portal P4 起必须用 GraphQL 消费 parent-bff
    2. ai15 移除 02 §11.3 第 2 项,改为 "已裁决:见 ARB-001parent-portal 用 GraphQL 消费 parent-bff"
  • 状态:已裁决(见 coord.md §22

ISSUE-006-ai15contract.md §1.2 将前端页面路由误标为 HTTP 端点

  • 提请方ai15
  • 日期2026-07-10
  • 类型:其他(文档分类错误)
  • 描述
    • parent-portal_contract.md §1.2 "HTTP 端点" 列出:GET /GET /childrenGET /child/:id/summaryGET /child/:id/grades
    • 但 parent-portal 是 Next.js 前端应用,这些是前端页面路由SSR/CSR 路由),不是对外 HTTP API 端点
    • 将页面路由放在 "HTTP 端点" 表中会误导下游消费方以为这些是 REST API
    • 且这些路由与 01 §8 L2 路由表(/parent/dashboard/parent/children路径还不一致contract 用 /children01 用 /parent/children
  • 建议方案
    1. coord 确认 parent-portal 作为前端 Remote不对外提供 HTTP API 端点§1.2 应为"无"
    2. ai15 将 contract.md §1.2 改为 "无parent-portal 是前端 Remote不对外提供 HTTP API",页面路由信息保留在 01 §8 L2 路由表中,不进 contract.md
    3. 若需保留 MF 暴露信息,归入 §1.6 微前端架构(已有)
  • 状态:已裁决(见 coord.md §22

ISSUE-007-ai15contract.md §1.6 module-federation.config.ts 与 02 next.config.js 不一致

  • 提请方ai15
  • 日期2026-07-10
  • 类型:其他(文档内部不一致)
  • 描述
    • parent-portal_contract.md §1.6 列 MF 配置文件为 apps/parent-portal/module-federation.config.ts
    • 02-architecture-design.md §1.2 MF 配置写在 next.config.js 中(用 NextFederationPlugin
    • 两处文件名与位置不一致
  • 建议方案
    1. 统一为 apps/parent-portal/next.config.js(与 02 + teacher-portal Shell 一致Next.js 项目 MF 配置应在 next.config.js
    2. ai15 修订 contract.md §1.6
  • 状态:已裁决(见 coord.md §22

ISSUE-008-ai15contract.md §2.3 GraphQL 路径前缀与 matrix.md 不一致

  • 提请方ai15
  • 日期2026-07-10
  • 类型:契约不明确(跨文档不一致)
  • 描述
    • parent-portal_contract.md §2.3 列 POST /api/parent/graphql
    • matrix.md §5 规范 api-gateway 代理 parent-bff 路径为 /api/v1/parent/*
    • v1 版本号
  • 建议方案
    1. 统一为 POST /api/v1/parent/graphql(与 matrix.md §5 一致)
    2. ai15 修订 contract.md §2.3 + §2.4
  • 状态:已裁决(见 coord.md §22

ISSUE-009-ai15parent-bff GraphQL schema 是否包含 switchChild Mutation 未明确

  • 提请方ai15
  • 日期2026-07-10
  • 类型:前置依赖缺失(上游契约不全)
  • 描述
    • parent-bff_contract.md §1.3 列出的 Query/Mutation 域未包含 "switchChild"(切换当前选中子女)
    • 01-understanding.md §2.2 + 02 §2.2 描述 parent-portal 需调用 POST /parent/switch-child 切换子女
    • 若走 GraphQL依 ISSUE-001parent-bff 需提供 mutation switchChild(childId: ID!): SwitchChildPayload!
    • 但 parent-bff contract 未列此 Mutation且 iam.GetChildrenByParent 已返回子女列表,切换子女是否需后端记录(还是纯前端 localStorage需明确
  • 建议方案
    1. 请 coord 协调 ai05parent-bff确认switchChild 是 GraphQL Mutation 还是纯前端状态localStorage + Zustand
    2. 若纯前端01/02 移除 POST /parent/switch-child 调用,改为 useChildSwitcher 直接写 Zustand + localStorage
    3. 若需后端记录:请 ai05 在 parent-bff contract.md §1.3 补充 switchChild Mutation
  • 状态:已裁决(见 coord.md §22

ISSUE-010-ai15iam GetChildrenByParent 接口缺失P0 阻塞,跨模块)

  • 提请方ai15
  • 日期2026-07-10
  • 类型:前置依赖缺失(跨模块,承自 parent-bff §7.1
  • 描述
    • 01-understanding.md §3.1 注明iam 缺失 "家长-学生关联查询" 接口(GetChildrenByParent proto + GET /iam/children REST + iam_student_guardians 表三缺失)
    • parent-bff_contract.md §2.1 也标注 "核心依赖 I3/ISSUE-047 裁决"
    • parent-bff_contract.md §3.1 标注 "iam gRPC 50052 启用ai06—— 核心依赖 GetChildrenByParentI3/ISSUE-047 裁决)"
    • 此为 parent-portal 多子女场景的 P0 阻塞项ai06iam需在 P3 收尾前补全
    • ai15 在此提请,请 coord 跟踪 ai06 进度并确认补全时间点
  • 建议方案
    1. coord 确认 ai06 补全 GetChildrenByParent 的时间点(应在 P4 启动前)
    2. 在补全前parent-portal 用 mock固定 2 个子女开发mock 数据与 parent-bff mock 一致student-001 + student-002
  • 状态:已裁决(见 coord.md §22

§1 已裁决问题

(暂无已裁决问题)