Files
Edu/docs/architecture/issues/worklines/teacher-portal_workline.md
SpecialX 0066afc55e feat(teacher-portal): v2 下游核查 + push-gateway 接入 + 测试扩展至 87 + ui-components 12/12
v2 核查结论:

- iam/push-gateway/api-gateway 已就绪

- teacher-bff teacher 域仍是 P2 占位(56/61 operations 不可用)

- 5 个 gRPC target 留空走降级模式 B

- 保留 MSW mock,记录 12 项 teacher-bff 待补工作到 nextstep-v2.md

v2 完成工作:

- push-gateway WebSocket 接入(环境变量 + URL query token + Reconnect 协议)

- 单元测试扩展(usePermission 15 + useAuth 9,总计 87/87 passed)

- ui-components 剩余 3 组件(Chart/Calendar/RichTextEditor,12/12)

- 设计令牌完整迁移(无 hsl/hex 字面量)

- i18n 5/55 页面 + 26 模块 key

- 性能优化(size-limit 9 项 + 5 页面懒加载)

- useAuth 迁移阻塞核查(iam 未实现 Set-Cookie,修正 v1 假设)

文档:新增 nextstep-v2.md;workline.md §5.7 添加 v2 工作记录。

验证:typecheck + lint + 87/87 tests + arch:scan 全部通过。
2026-07-14 08:47:18 +08:00

31 KiB
Raw Blame History

teacher-portal 工作排期

负责人ai13 关联:workline.mdcoord.md §2 ARB-002contracts/teacher-portal_contract.md 模式:全并行(各 AI 一口气完成 P2-P6 全部代码,开发期间用 mock最后统一集成测试 依据president-final-rulings.md §3.5ai13 P2 功能范围)+ §7.13ai13 工作内容最终清单)+ 03-long-term-architecture.md §1.1 阶段能力累积矩阵


§1 总览

teacher-portal 是教学场景域微前端MF Shell全阶段目标P2 MF Shell + GraphQL client + 基础页面 → P3 考试/作业/成绩 → P4 知识图谱/学情 → P5 推送/AI → P6 可观测性硬化。

全并行模式ai13 一口气完成 P2-P6 全部代码,开发期间用 MSW mock 上游teacher-bff GraphQL / api-gateway HTTP / push-gateway WebSocket上游就绪后在 matrix.md §8 更新就绪信号,最后统一集成测试。


§2 全阶段甘特图P2-P6

gantt
    title ai13 teacher-portal 全阶段排期(全并行)
    dateFormat YYYY-MM-DD
    axisFormat %m-%d

    section P2 基础
    packages骨架(ui-tokens/ui-components/hooks) :crit, a13p0, 2026-07-09, 1d
    MF Shell配置(NextFederationPlugin) :crit, a13a, after a13p0, 2d
    GraphQLProvider+urql client单例 :crit, a13b, after a13a, 2d
    AppShell+路由骨架+设计令牌三层 :a13c, after a13b, 2d
    登录页+权限上下文+Token存储 :a13d, after a13c, 2d
    Dashboard框架+班级列表+学生列表+个人设置 :a13e, after a13d, 3d

    section P3 教学核心
    考试管理页面(列表/创建/详情) :a13f, after a13e, 3d
    作业管理页面(布置/批改) :a13g, after a13f, 3d
    成绩管理页面(录入/分析) :a13h, after a13g, 2d
    乐观更新+多Tab会话同步 :a13i, after a13h, 2d

    section P4 知识与学情
    知识图谱可视化页面 :a13j, after a13i, 3d
    学情分析仪表盘(宽表5s) :a13k, after a13j, 3d
    parent-portal Remote接入 :a13l, after a13k, 1d

    section P5 推送与AI
    WebSocket通知中心 :a13m, after a13l, 2d
    AI辅助出题(SSE流式) :a13n, after a13m, 3d
    AI生成教案/学情报告 :a13o, after a13n, 2d

    section P6 硬化
    Sentry+RUM+OTel browser :a13p, after a13o, 2d
    A11y审计(WCAG 2.2 AA) :a13q, after a13p, 2d
    性能优化+bundle门禁 :a13r, after a13q, 2d
    localStorage→httpOnly Cookie迁移 :a13s, after a13r, 1d

§3 详细任务

P2MF Shell + GraphQL client + 基础页面

  • 负责人ai13
  • 裁决依据:总裁裁决 §3.5ai13 P2 功能范围)+ F9GraphQL P2 起)+ F12localStorage token+ §2.17MF GraphQL client 单例方案 A+ §2.18packages 批次 0.15
  • 交付物
    • packages 骨架ui-tokens/ui-components/hooks批次 0.15 已完成)
    • NextFederationPlugin 配置exposes AppShell + shared react/urql/graphql singleton无 remotes
    • GraphQLProvider + urql client 单例Shell 暴露Remote 复用§2.17 方案 A
    • AppShellLayout + 侧边栏 + 路由守卫 + ErrorBoundary + 设计令牌三层 primitive/semantic/tailwind-theme
    • 登录页POST /api/auth/login → JWT 存 localStorageF12
    • 权限上下文usePermission + useViewports权限点 <RESOURCE>_<ACTION> F7
    • Dashboard 框架teacherDashboard GraphQL query
    • 班级列表页myClasses GraphQL queryiam 数据)
    • 学生列表页classStudents GraphQL queryiam 数据)
    • 个人设置页currentUser + updateUser GraphQL query/mutation
  • 依赖teacher-bff GraphQL schema 第一版ai03 + coord 仲裁 ISSUE-037+ api-gateway 路由ai01
  • Mock 策略MSW 拦截 POST /api/v1/teacher/graphql + POST /api/auth/login见 contract.md §4.2,对齐 matrix.md §5 路径前缀)
  • 验收标准MF 配置不破坏单体 + GraphQL 拉取数据 + 登录→Dashboard→班级列表→学生列表链路通

P3考试/作业/成绩 + 乐观更新 + 多 Tab 同步

  • 负责人ai13
  • 审计状态2026-07-13~30% 完成。已实现 3 个只读列表页 + UpdateUser mutation 定义(未接入)。缺失 mutation/详情页/批改界面/乐观更新/多Tab同步。
  • 交付物
    • 考试管理页面classExams list / createExam mutation / examDetail list / mutation+详情
    • 作业管理页面classHomework list / assignHomework mutation / homeworkDetail / 批改界面) — list / mutation+详情+批改
    • 成绩管理页面studentGrades list / recordGrade mutation / 成绩分析图表) — list / mutation+图表
    • 乐观更新useMutation onMutate 回滚 + invalidateQueries见 03 §10.1 未实现
    • 多 Tab 会话同步BroadcastChannel('edu-session'),见 03 §2.5 未实现
  • 依赖teacher-bff 扩展 core-edu gRPC 调用ai03 P3core-edu ai08 P3 启用 gRPC
  • Mock 策略MSW 返回固定考试/作业/成绩数据
  • 验收标准教师创建考试→学生student-portal Remote作答→教师批改全链路mock+ 乐观更新回滚正确 + 多 Tab 登出同步

P4知识图谱 + 学情分析 + parent-portal Remote

  • 负责人ai13
  • 审计状态2026-07-130% 完成。全部待实现。
  • 交付物
    • 知识图谱可视化页面recharts/d3 节点图CSR + @next/dynamic 懒加载) — 未实现
    • 学情分析仪表盘(宽表 5s 返回ISR revalidate 60s + CSR 交互) — 未实现
    • parent-portal Remote 接入MF remotes 配置feature flag NEXT_PUBLIC_MF_ENABLED⚠️ 仅预留配置,未启用
  • 依赖teacher-bff 扩展 content/data-ana gRPC 调用ai03 P4content ai09 P4 / data-ana ai11 P4 启用 gRPC+ parent-portalai15 P4
  • Mock 策略MSW 返回固定知识图谱 + 学情宽表数据
  • 验收标准:教师查看知识图谱 + 学情宽表 5s 返回mock+ parent-portal Remote 在 Shell 内渲染

P5WebSocket 推送 + AI 辅助 + 通知中心

  • 负责人ai13
  • 审计状态2026-07-130% 完成。全部待实现。对比student-portal 已有 use-notifications-websocketparent-portal 已有 useWebSocket+useCrossTabSync
  • 交付物
    • WebSocket 通知中心ws://push-gateway:8081/ws实时通知 + BroadcastChannel 跨 Tab 未实现
    • AI 辅助出题SSE 流式generateQuestion subscription 未实现
    • AI 生成教案/学情报告generateLessonPlan / generateReport mutation 未实现
  • 依赖push-gateway WebSocketai02 P5+ ai 服务 gRPCai12 P5 启用 gRPC+ msg 服务ai10 P5
  • Mock 策略mock-socket 模拟 WS 推送 + MSW 返回固定 AI 响应SSE 用 ReadableStream mock
  • 验收标准全校广播实时到达mock+ AI 流式出题mock+ 通知中心实时更新

P6可观测性硬化 + A11y + 性能 + Token 迁移

  • 负责人ai13
  • 审计状态2026-07-130% 完成。全部待实现。对比student-portal/parent-portal/admin-portal 均已有 web-vitalsteacher-portal 是四端中唯一缺失 observability 的)
  • 交付物
    • Sentry 错误追踪 + Session ReplayNEXT_PUBLIC_SENTRY_DSN + beforeSend PII 过滤) — 未实现
    • Web Vitals RUMLCP/INP/CLS/TTFB → /api/v1/admin/web-vitals 未实现
    • OTel browser SDK自动埋点 fetch/XHR/document load → OTLP collector 未实现
    • A11y 审计WCAG 2.2 AAeslint-plugin-jsx-a11y + @axe-core/playwright + 对比度审计) — 未实现
    • 性能优化bundle analyzer + size-limit CI 门禁Shell <150KB / Remote <80KB / CSS <50KB 未实现
    • localStorage → httpOnly Cookie 迁移iam refresh cookie 端点就绪后 + CSRF 防护) — 未实现
  • 依赖全链路可观测就绪iam refresh cookie + Sentry DSN + OTel collector
  • 验收标准99.9% 可用 + WCAG 2.2 AA + LCP <2.5s / INP <200ms / CLS <0.1P75

§4 依赖与就绪信号

§4.1 我依赖的上游就绪标志

上游 就绪标志 阻塞阶段 状态
packages 骨架ai13 自建) ui-tokens/ui-components/hooks 可 import P2 启动 已就绪(批次 0.15
teacher-bff GraphQL schemaai03 + coord 仲裁 ISSUE-037 packages/shared-ts/contracts/graphql/ 第一版 P2 启动 待 coord 仲裁
api-gateway HTTP :8080ai01 /api/v1/teacher/graphql + /api/auth/login 路由可用 P2 启动 待 ai01
teacher-bff core-edu 扩展ai03 P3 classExams/classHomework/studentGrades query 可用 P3 启动 待 ai03 P3
teacher-bff content/data-ana 扩展ai03 P4 knowledgeGraph/studentAnalytics query 可用 P4 启动 待 ai03 P4
push-gateway WebSocket :8081/wsai02 P5 WS 连接可建立 + 推送可接收 P5 启动 待 ai02 P5
ai 服务 gRPCai12 P5 generateQuestion/generateLessonPlan 可调 P5 启动 已就绪2026-07-13
iam refresh cookie 端点ai06 P6 POST /iam/auth/refresh 返回 httpOnly cookie P6 启动 待 ai06 P6

§4.2 我的就绪信号(供下游消费)

信号 就绪标志 消费方 P2 状态
teacher-portal dev server :4000 next dev -p 4000 可访问 无(最前端) 已就绪
MF Shell 可加载 首页渲染 AppShell + 导航 student/parent/admin RemoteP3+ 已就绪
登录流程可用 POST /api/auth/login → JWT → Dashboard 无(最前端) 已就绪MSW mock
GraphQL 查询可执行 DashboardQuery/ClassesQuery/MeQuery/ViewportsQuery/ClassQuery 返回数据 无(最前端) 已就绪MSW mock
P3 扩展 Query 可执行 ClassStudents/ClassExams/ClassHomework/ExamGrades + UpdateUser Mutation 无(最前端) 已就绪MSW mock
parent-portal Remote 接入点 MF remotes 配置就绪 parent-portalai15 P4 P4 启用
/api/health + /api/ready k8s livenessProbe + readinessProbe 端点 infra部署 已就绪

§4.3 P2 交付物完成清单

  • packages 骨架ui-tokens/ui-components/hooks批次 0.15
  • NextFederationPlugin 配置exposes AppShell + GraphQLProvider + hooks + UI 组件shared react/urql/graphql/@edu/* singleton
  • GraphQLProvider + urql client 单例Shell 暴露Remote 复用§2.17 方案 A
  • AppShellLayout + 侧边栏 + 路由守卫 + ErrorBoundary + 设计令牌三层 + GraphQL ViewportsQuery + MeQuery + usePermission
  • 登录页POST /api/auth/login → JWT 存 localStorageF12
  • 权限上下文usePermission + buildPermissionContext权限点 <RESOURCE>_<ACTION> F7
  • Dashboard 框架GraphQL DashboardQuery + 统计卡片)
  • 班级列表页GraphQL ClassesQuery
  • 学生列表页GraphQL ClassStudentsQueryP3 扩展 MSW mock
  • 个人设置页GraphQL MeQuery 只读展示)
  • 考试/作业/成绩页面GraphQL ClassExams/ClassHomework/ExamGradesP3 扩展 MSW mock
  • MSW mock 层handlers + fixtures + browser/server + initMocks + providers 集成 + mockServiceWorker.js
  • /api/health + /api/ready 路由liveness + readiness
  • Dockerfile 端口 3000→4000 + 健康检查路径更新
  • .env.example 添加 teacher-portal 变量NEXT_PUBLIC_TEACHER_BFF_GRAPHQL_URL / NEXT_PUBLIC_API_MOCKING / NEXT_PUBLIC_MF_ENABLED / API_GATEWAY_URL
  • 质量校验通过lint + typecheck 零错误)
  • arch.db 已更新arch:scanTS 14 模块 / 343 符号 / Proto 138 契约)

§4.4 审核总结2026-07-13

审核结论teacher-portal 是四端 portal 中实现最不完整的模块。

审核时完成度(已通过并行实现全部补齐):

阶段 审核时 实现后 本次新增
P2 ~95% ~95%
P3 ~30% 100% 5 mutation/query + 4 新页面 + 批改界面 + 乐观更新 + 多Tab同步 + 成绩统计图表 + settings 编辑
P4 0% 100% 知识图谱SVG可视化 + 学情分析仪表盘 + 单生详情页 + parent-portal Remote 组件
P5 0% 100% WebSocket通知hook + 通知中心页 + AI出题(SSE模拟) + AI教案 + AI学情报告
P6 0% 100% Sentry + WebVitals + OTel + A11y审计 + 性能配置 + Cookie迁移准备 + ObservabilityProvider

本次实现新增文件清单30+ 文件):

  • P3: graphql.ts 扩展(5操作) + handlers.ts 扩展 + exams/[id] + exams/new + homework/[id] + homework/new + use-cross-tab-sync.ts + fixtures 扩展 + settings/grades 改造
  • P4: graphql-p4.ts + handlers-p4.ts + knowledge-graph/page.tsx + KnowledgeGraphView.tsx + analytics/page.tsx + TrendChart.tsx + analytics/[studentId]/page.tsx + ParentPortalRemote.tsx + fixtures(knowledge-graph/analytics)
  • P5: graphql-p5.ts + handlers-p5.ts + notifications/page.tsx + ai-assist/page.tsx + ai-lesson-plan/page.tsx + ai-report/page.tsx + use-notifications-websocket.ts + fixtures(notifications/ai) + browser.ts/server.ts 集成
  • P6: observability/(sentry/web-vitals/otel/a11y/performance/cookie-migration/env) + web-vitals-initializer.tsx + observability-provider.tsx + .eslintrc.a11y.js + size-limit.json + layout.tsx 集成 + package.json 依赖
  • 共享: viewports.ts 扩展(6 新导航项) + browser.ts/server.ts 集成 p4/p5 handlers

验证npx tsc --noEmit 零错误通过。

coord 仲裁状态无新待处理仲裁。ARB-001/002 已裁决ISSUE-036~042 全部闭合。上游 ai(ai12) 已就绪

仍需后续处理

  1. 单元测试vitest 配置 + 测试文件)
  2. 设计令牌硬编码修复globals.css/tailwind.config.js 的 hsl() 字面量)
  3. 字体名硬编码修复layout.tsx → var(--font-family-*)
  4. i18n 集成(中文硬编码 → next-intl
  5. packages/ui-components 扩展组件shadcn/ui 基础组件/Form/RichTextEditor/Chart
  6. 上游就绪后 MSW mock → 真实 API 切换

§5 P7 参考项目差距闭环2026-07-13

§5.1 参考项目分析

参考项目位置e:\Desktop\CICD\src\app\(dashboard)\teacher\(单体 Next_Edu 教育平台) 参考页面数50 个有效业务 page.tsx去重 4 个重定向),覆盖 16 个业务模块

§5.2 差距清单与实现状态

模块 参考页面数 实现前 实现后 新增页面
attendance考勤 4 0 4 list/sheet/stats/report
classes班级详情 4 1list 3 新增 [id]详情、schedule、students 已有)
course-plans课程计划 2 0 2 list、[id]详情
dashboard 1 已有
diagnostic诊断 3 0 2[studentId] 由 analytics 覆盖) list、class/[classId]
elective选修课 3 0 3 list、create、[id]/edit
error-book错题本 1 0 1 分析页7 widget
exams考试 9 3 4 新增 [id]/build、[id]/analytics、[id]/edit-rich、[id]/proctoring
grades成绩 5 1 4 新增 entry、stats、analytics、report-card
homework作业 7 3 3 新增 submissions、assignments/[id]/submissions、submissions/[submissionId]、submissions/[submissionId]/scan-grading
leave请假 1 0 1 审批列表
lesson-plans备课 6 0仅 ai-lesson-plan 5 list、new、[planId]/edit、library、calendar、heatmap
practice练习 1 0 1 分析页6 widget
questions题库 1 0 1 主页(六维筛选)
schedule-changes调课 1 0 1 申请列表
textbooks教材 2 0 2 list、[id]阅读器

总计:新增 35 个页面 + 修改 grades list增加录入/统计/分析/报告卡/导出/Excel 导入链接)

§5.3 新增文件清单(按批次)

P0-Agrades + homework 批改链路)— 11 个文件

  • src/lib/graphql-p7-grades.ts9 operations + 类型)
  • src/mocks/handlers-p7-grades.tssrc/mocks/fixtures/grades-extended.tshomework-submissions.ts
  • src/app/(app)/grades/entry/page.tsxgrades/stats/page.tsxgrades/analytics/page.tsxgrades/analytics/charts.tsx5 SVG 图表)、grades/report-card/page.tsx
  • src/app/(app)/homework/submissions/page.tsxhomework/assignments/[id]/submissions/page.tsxhomework/submissions/[submissionId]/page.tsx
  • 修改:grades/page.tsx(增加子模块导航 + CSV 导出 + Excel 导入)

P0-Bexams + questions + textbooks— 10 个文件

  • src/lib/graphql-p7-exams.ts11 operations + 类型)
  • src/mocks/handlers-p7-exams.tsfixtures/textbooks.tsquestions.tsexam-analytics.ts
  • src/app/(app)/exams/[id]/build/page.tsxexams/[id]/analytics/page.tsx
  • src/app/(app)/questions/page.tsx
  • src/app/(app)/textbooks/page.tsxtextbooks/[id]/page.tsx

P0-Cattendance + classes 详情 + leave + schedule-changes— 13 个文件

  • src/lib/graphql-p7-admin.ts11 operations + 类型)
  • src/mocks/handlers-p7-admin.tsfixtures/attendance.tsclasses-extended.tsleave-requests.ts
  • src/app/(app)/attendance/page.tsxattendance/sheet/page.tsxattendance/stats/page.tsxattendance/report/page.tsx
  • src/app/(app)/classes/[id]/page.tsxclasses/schedule/page.tsx
  • src/app/(app)/leave/page.tsx
  • src/app/(app)/schedule-changes/page.tsx

P0-Dlesson-plans + course-plans + diagnostic + error-book + practice— 18 个文件

  • src/lib/graphql-p7-insights.ts17 operations + 类型)
  • src/mocks/handlers-p7-insights.tsfixtures/lesson-plans.tscourse-plans.tsdiagnostic.tserror-book.tspractice.ts
  • src/app/(app)/lesson-plans/page.tsxlesson-plans/new/page.tsxlesson-plans/[planId]/edit/page.tsxlesson-plans/library/page.tsxlesson-plans/calendar/page.tsx
  • src/app/(app)/course-plans/page.tsxcourse-plans/[id]/page.tsx
  • src/app/(app)/diagnostic/page.tsxdiagnostic/class/[classId]/page.tsx
  • src/app/(app)/error-book/page.tsx
  • src/app/(app)/practice/page.tsx

P2-Eelective + 富文本编辑 + 监考 + 扫描批改 + 热力图)— 10 个文件

  • src/lib/graphql-p7-advanced.ts13 operations + 类型)
  • src/mocks/handlers-p7-advanced.tsfixtures/elective.tsproctoring.tsscan-grading.tslesson-plan-heatmap.ts
  • src/app/(app)/elective/page.tsxelective/create/page.tsxelective/[id]/edit/page.tsx
  • src/app/(app)/exams/[id]/edit-rich/page.tsxexams/[id]/proctoring/page.tsx
  • src/app/(app)/homework/submissions/[submissionId]/scan-grading/page.tsx
  • src/app/(app)/lesson-plans/heatmap/page.tsx

集成文件(修改)— 3 个

  • src/mocks/browser.ts(注册 5 个 p7 handlers
  • src/mocks/server.ts(同上)
  • src/mocks/fixtures/viewports.ts(新增 11 个导航项attendance/questions/textbooks/lesson-plans/course-plans/diagnostic/error-book/practice/elective/leave/schedule-changes

P7 累计61 个 GraphQL operations + 5 个 handlers 文件 + 13 个 fixtures + 35 个新页面 + 3 个修改文件

§5.4 验证

  • npx tsc --noEmit 零错误通过
  • 设计令牌:全部使用 Tailwind 语义类bg-paper/text-ink/border-rule/text-accent 等)或 hsl(var(--*)),无 #hex 硬编码
  • 字体:全部使用 font-serif/font-sans/font-mono Tailwind 类
  • noUncheckedIndexedAccess所有数组索引均做了 undefined 兜底
  • 文件大小:所有文件 ≤ 500 行(最大 charts.tsx 420 行)

§5.5 后续仍需处理(合并 P3-P6 + P7 后)

  1. 单元测试vitest 配置 + 测试文件)
  2. 设计令牌硬编码修复globals.css/tailwind.config.js 的 hsl() 字面量)
  3. 字体名硬编码修复layout.tsx → var(--font-family-*)
  4. i18n 集成(中文硬编码 → next-intl
  5. packages/ui-components 扩展组件shadcn/ui 基础组件/Form/RichTextEditor/Chart
  6. 上游就绪后 MSW mock → 真实 API 切换
  7. 教师工作台快速入口(基于 viewports 自动生成快捷卡片)
  8. 全局搜索(参考项目有 /search API
  9. 全局消息中心增强(参考项目有 /messages 页面)

§5.6 Docker Desktop 验证2026-07-13

构建

  • Dockerfile 切换为 Next.js output: "standalone" 模式(解决 pnpm symlink 在 runtime 下无法解析 react/jsx-runtime 的问题)
  • 修复 tsconfig.base.json 未 COPY 到 builder 阶段的问题
  • 基础镜像:node:20-alpine(本地测试可 retag node:22-alpine
  • 镜像大小1.32GB

容器运行

  • 启动时间Ready in 69ms
  • 健康检查:/api/health{"status":"ok","service":"teacher-portal"}
  • 首页HTTP 200length=5921登录页正常渲染

路由验证

类型 通过/总数 结果
静态路由 27/27 全部 HTTP 200
动态路由 11/11 全部 HTTP 200
GraphQL 端点 N/A 服务端代理到 api-gateway未启动时预期 500

已知限制

  • MSW mock 仅浏览器端生效SSR 阶段 GraphQL 请求走 next.config.js rewrites 到 api-gateway
  • 生产部署时必须先启动 api-gateway
  • 详细下游依赖清单见 apps/teacher-portal/nextstep.md

§5.7 v2 下游核查 + 剩余工作完成2026-07-14

触发条件:用户通知"所有下游服务已经完成 nextstep.md 工作",对 9 个下游服务teacher-bff / iam / push-gateway / api-gateway / core-edu / content / data-ana / msg / ai的 nextstep.md 进行核查。

§5.7.1 v2 核查结论

核心发现teacher-bff nextstep.md 声称完成 v2 扁平命名41 Query + 20 Mutation但实际核查发现

  1. schema 文件未更新packages/shared-ts/contracts/graphql/teacher-bff.schema.graphql 仍是 v1admin 命名空间19 Query + 5 Mutation
  2. teacher 域 P3+ 查询仍是 P2 占位teacher.resolver.ts 第 60-95 行 exams / homework / grades 仍抛 BusinessError("not available in P2")
  3. 5 个 gRPC target 留空走降级模式 Bcore-edu / content / data-ana / msg / ai 全部未对接
  4. 56/61 GraphQL operations 不可用:仅 5 个 P2 核心 Querydashboard / viewports / me / classes / class真实可用

决策:保留 MSW mock记录 12 项 teacher-bff 待补工作到 nextstep-v2.md §2.1。

§5.7.2 v2 完成工作清单

# 工作项 完成内容
1 useAuth 迁移核查 发现 iam REST 登录接口未实现 Set-Cookie修正 v1 的错误假设v1 假设 iam 已就绪。useAuth 迁移阻塞于 iam 后端实现 Set-Cookie
2 push-gateway WebSocket 接入 环境变量 NEXT_PUBLIC_PUSH_GATEWAY_WS_URL + URL query token + Reconnect 协议session_id + last_seq+ 兼容 push-gateway 事件格式
3 单元测试扩展 usePermission 15 tests + useAuth 9 tests总计 87/87 passed从 v1 的 63 扩展到 87
4 ui-components 剩余组件 ChartSVG bar/line/pie+ Calendar月视图 + 事件标记)+ RichTextEditorcontentEditable 轻量实现),总计 12/12 组件
5 设计令牌完整迁移 globals.css + tailwind.config.js 全部使用 var(--*),无 hsl/hex 字面量ESLint tokens + a11y flat config 就绪
6 i18n 扩展状态评估 已迁移 5/55 页面dashboard/grades/settings 等)+ 26 模块 key + LocaleSwitcher。剩余 50+ 页面待逐页替换
7 性能优化扩展 基本完成 size-limit 9 项性能预算 + 5 个重型页面懒加载lesson-plans/heatmap、grades/analytics、knowledge-graph、ParentPortalRemote、HeatmapMatrix
8 nextstep-v2.md 文档生成 完整记录 v2 核查结论 + 下游依赖 + 本模块待补工作 + 集成测试方案 + 已知问题

§5.7.3 验证结果

  • pnpm --filter @edu/teacher-portal typecheck 通过tsc --noEmit 零错误)
  • pnpm --filter @edu/teacher-portal lint 通过eslint src 零错误)
  • pnpm --filter @edu/teacher-portal test 通过Test Files 8 passed / Tests 87 passed
  • pnpm run arch:scan 完成TS 20 模块 / 3330 符号 + Go 2 模块 / 93 符号 + Python 2 模块 / 469 符号 + Protobuf 394 契约)

§5.7.4 v2 剩余阻塞项

阻塞项 依赖方 阻塞工作
teacher-bff teacher 域 P3+ 查询/mutation 实现 ai03 + ai07/08/10/11/12 MSW mock → 真实 API 切换56 operations
teacher-bff schema 文件同步为 v2 扁平命名 ai03 契约一致性
teacher-bff 5 个 gRPC target 配置 ai03 teacher 域扩展查询
iam REST 登录接口实现 Set-Cookie ai06 useAuth 迁移到 httpOnly cookieF12

无阻塞工作可任意时间推进i18n 扩展剩余 50+ 页面、图片优化next/image、字体优化next/font、CI size-limit 阻断集成。

详细 v2 文档见 apps/teacher-portal/nextstep-v2.md


§6 全并行开发说明

matrix.md §全并行模式:

  1. ai13 一口气完成 P2-P6 全部代码,开发期间用 MSW mock 上游
  2. 上游就绪后在 matrix.md §8 更新就绪信号
  3. 所有模块就绪后统一集成测试matrix.md §9 检查清单)
  4. Mock 切换NEXT_PUBLIC_API_MOCKING=enabled → disabled

AI Agent: ai13teacher-portal Branch: feat/teacher-portal-workline-ai13 Coordinator: coord-ai