Files
gaokao-volunteer-system/.workbuddy/artifacts/SPRINT_4_S4_PERF_OPS.md
Frontend Developer fa7c22e8ed chore(s1): monorepo skeleton + 30-file prototype first commit
Sprint 1 G0 闸门通过 (pnpm install / typecheck / lint / build / turbo 全部 exit 0)

实际完成:
- T-A-01 monorepo 根骨架: pnpm-workspace.yaml + turbo.json + 根 package.json
- T-A-02 收编原型: apps/web/ 30 个 src/ 文件 (4948 行) 首次入库
- T-A-03 lint/format: eslint flat config (根 + apps/web) + prettier
- T-A-23 web-ci.yml: GitHub Actions 4-step CI (typecheck/lint/build/bundle)

勘误 (前置假设错误):
- 原型 4948 行 (不是 4114 行)
- 原型含 33 个 any + 16 个未用变量 (Sprint 2 修)
- 原型从未 commit, 用 cp -r + git add, 不是 git mv

推迟到 Sprint 2+:
- T-A-04/05 tsconfig packages 抽离
- T-A-06/07/08 design tokens 抽离
- T-A-09~13 5 基础组件

依赖隔离:
- .gitignore 加 11 行 monorepo 规则
- apps/web/.gitignore 补 .npm-cache/next-dev.log
- 删除 apps/web 内嵌 .git/ (cp -r 复制时携带)

验证:
- pnpm install: 1m55s, 456 packages
- typecheck: 0 errors
- lint: 0 errors, 49 warnings (any + unused)
- next build: 8 routes compiled, 9/9 static pages
- turbo run build: 1 successful, 12.9s
2026-07-03 09:22:03 +08:00

7.7 KiB
Raw Blame History

Sprint 4 任务拆解W6-7 · 14 人天 · 50 子任务)

主任务T-B-18 ~ T-B-21, T-B-22 ~ T-B-27持久化/e2e/LH/bundle/prefetch/回归)+ T-B-40 ~ T-B-43 + T-C-44, T-C-45 目标:错误/兜底/离线/防重 + 性能优化 + 监控收口 闸门G3Lighthouse P75 ≥ 90+ G4Poster CLI Docker 镜像跑通)

0. Sprint 4 概览

任务 主任务 估时 子任务数
T-B-18 错误码 → 用户文案映射 0.5d 3
T-B-19 ErrorBoundary 兜底页 0.5d 3
T-B-20 离线检测 + 提示 1.0d 4
T-B-21 表单提交防重复 0.5d 3
T-B-22 TanStack Query 持久化 1.0d 3
T-B-23 e2e 真实化8 路径) 3.0d 8
T-B-24 Lighthouse CI 集成 1.5d 4
T-B-25 Bundle 优化 1.0d 4
T-B-26 路由级 prefetch 0.5d 2
T-B-27 真实后端回归 0.5d 2
T-B-40 Share Link 状态面板数据 0.5d 3
T-B-41 ShareLink 失败降级 0.5d 3
T-B-42 LLM 增强进度轮询 1.0d 4
T-B-43 Poster 异步生成 + 轮询 0.5d 3
T-C-44 Poster CLI 部署集成 1.0d 4
T-C-45 集成测试套件 0d 2
合计 16 任务 12d + 缓冲 2d = 14d 50

T-B-18 · 错误码 → 用户文案映射0.5d · 3 子任务)

ST-S4-B-18.1 写 packages/i18n/zh-CN/errors.json0.25d

  • 内容15 个错误码全覆盖
    • E03001 / E03002 / E03003
    • E04001 / E04002
    • E05001
    • +8 V2 错误码
  • 约束:沿用 admin/errors/registry.py 5 字段结构

ST-S4-B-18.2 写 api-client 拦截器0.125d

  • 验收
    • 拦截响应 → 查表 → 返回 i18n 文案

ST-S4-B-18.3 写单测0.125d

  • 覆盖15 错误码各 1 用例

T-B-19 · ErrorBoundary 兜底页0.5d · 3 子任务)

ST-S4-B-19.1 写 apps/web/app/error.tsx0.25d

  • Next 16 error boundary + 友好提示
  • 验收
    • 5xx 错误时显示兜底页

ST-S4-B-19.2 Sentry 上报0.125d

  • APISentry.captureException(error)

ST-S4-B-19.3 写单测0.125d

  • 覆盖throw 错误时显示兜底

T-B-20 · 离线检测 + 提示1.0d · 4 子任务)

ST-S4-B-20.1 写 useOnlineStatus hook0.25d

  • APInavigator.onLine + online / offline 事件

ST-S4-B-20.2 顶部黄条提示0.25d

  • 验收
    • offline → 顶部条
    • 写操作禁用

ST-S4-B-20.3 online 恢复自动重试0.25d

  • APIuseMutation 队列 + refetchOnReconnect

ST-S4-B-20.4 写单测 + e2e0.25d


T-B-21 · 表单提交防重复0.5d · 3 子任务)

ST-S4-B-21.1 mutation 加 isPending0.125d

  • 覆盖:所有 mutation

ST-S4-B-21.2 FormCard 提交按钮禁用0.25d

  • 验收
    • isPending 时禁用 + 旋转图标

ST-S4-B-21.3 ChatMessage 修复按钮单次点击禁用0.125d


T-B-22 · TanStack Query 持久化1.0d · 3 子任务)

ST-S4-B-22.1 接入 @tanstack/query-persist-client-core0.5d

  • 存储localStorage
  • 验收
    • 关闭浏览器再打开 → 历史消息立即可见

ST-S4-B-22.2 后台 revalidate0.25d

  • APIstaleTime: 5min + refetchOnMount: 'always'

ST-S4-B-22.3 写单测0.25d


T-B-23 · e2e 真实化8 路径3.0d · 8 子任务)

ST-S4-B-23.1 chat-send.spec.ts0.25d

  • 验收1s 用户气泡 + 3s AI 回复 + 失败场景

ST-S4-B-23.2 chat-history.spec.ts0.25d

ST-S4-B-23.3 plan-save.spec.ts0.5d

ST-S4-B-23.4 audit-upload.spec.ts0.5d

ST-S4-B-23.5 theme-persist.spec.ts0.25d

ST-S4-B-23.6 🆕 share-link.spec.ts0.5d

  • 覆盖:创建 / 撤销 / 分享 UI

ST-S4-B-23.7 🆕 data-query.spec.ts0.5d

  • 覆盖4 查询页

ST-S4-B-23.8 🆕 review-flow.spec.ts0.5d

  • 覆盖:复核全流程

验收

  • 8 spec 全绿
  • 每个 spec 含 1 失败场景

T-B-24 · Lighthouse CI 集成1.5d · 4 子任务)

ST-S4-B-24.1 写 lighthouserc.json0.5d

  • 预算
    • LCP < 2.5s / INP < 200ms / CLS < 0.1
    • Performance ≥ 90 / Accessibility ≥ 95 / Best Practices ≥ 95 / SEO ≥ 90

ST-S4-B-24.2 配 GitHub Action0.5d

  • 覆盖页面12 个):/ /consultations /plans /plans/compare /assessment /score-line-query /rank-estimator /majors-query /schools-query /review/start /admin/login /admin

ST-S4-B-24.3 PR 评论显示分数0.25d

ST-S4-B-24.4 验证 12 页 P750.25d

  • G3 闸门

T-B-25 · Bundle 优化1.0d · 4 子任务)

ST-S4-B-25.1 next/dynamic 异步加载0.25d

  • 目标组件PlanCard / AuditReportCard / CareerCard

ST-S4-B-25.2 react-markdown 异步 chunk0.25d

ST-S4-B-25.3 拆 vendor chunk0.25d

  • 验收
    • First load JS < 200KB
    • PlanCard chunk < 50KB

ST-S4-B-25.4 验证0.25d


T-B-26 · 路由级 prefetch0.5d · 2 子任务)

  • 目标/consultations /plans /assessment

ST-S4-B-26.2 验证 hover 100ms0.25d


T-B-27 · 真实后端回归0.5d · 2 子任务)

ST-S4-B-27.1 完整 e2e 套件0.25d

  • 验收
    • 15+ e2e spec 全绿

ST-S4-B-27.2 3 浏览器回归0.25d

  • 覆盖chromium / webkit / firefox

ST-S4-B-40.1 写 useShareStatusPanel(resourceId)0.25d

  • APIlatest + stats 双 query

ST-S4-B-40.2 30s 自动刷新0.125d

  • 依据test_share_status_panel.py 期望

ST-S4-B-40.3 写单测0.125d


ST-S4-B-41.1 navigator.share 不可用降级0.25d

  • 降级路径navigator.share → clipboard.writeText → <a download>

ST-S4-B-41.2 3 路径测试0.125d

ST-S4-B-41.3 用户明确提示0.125d


T-B-42 · LLM 增强进度轮询1.0d · 4 子任务)

ST-S4-B-42.1 useLLMEnhancement + SSE 优先0.25d

  • 依据commit 11fbb59

ST-S4-B-42.2 长任务进度条0.25d

  • 触发> 30s

ST-S4-B-42.3 失败降级到基础结果0.25d

  • 验收
    • 显示"AI 增强暂不可用,已展示基础结果"

ST-S4-B-42.4 SSE 断开重连 3 次0.25d


T-B-43 · Poster 异步生成 + 轮询0.5d · 3 子任务)

ST-S4-B-43.1 写 usePoster + 进度条0.25d

  • 验收
    • 5-10s 内完成

ST-S4-B-43.2 自动下载可选0.125d

ST-S4-B-43.3 失败可重试0.125d


T-C-44 · Poster CLI 部署集成1.0d · 4 子任务)

ST-S4-C-44.1 crontab 配置0.25d

  • 时间:每日 02:00
  • 验收
    • crontab 配置生效

ST-S4-C-44.2 产物上传 CDN0.25d

ST-S4-C-44.3 失败告警 Sentry0.25d

  • G4 闸门Docker 化验证

ST-S4-C-44.4 日志可查0.25d


T-C-45 · 集成测试套件0d · 2 子任务)

ST-S4-C-45.1 写 FastAPI + Next.js 双服务集成测试0d - 复用 S2 测试基础设施)

  • 场景5 关键场景
  • 依据commit a8b4927 integration_test.py

ST-S4-C-45.2 CI 卡点0d

  • 集成T-A-23 web-ci.yml

Sprint 4 收口验收

  • 16 主任务 / 50 子任务全部完成
  • G3 通过Lighthouse 12 页 P75 ≥ 90
  • G4 通过Poster CLI Docker 镜像跑通
  • Bundle < 200KB
  • 8 e2e spec 全绿
  • 进入 Sprint 5 前 commit<feat(s4): error+offline+perf+monitoring>