Files
gaokao-volunteer-system/.workbuddy/artifacts/SPRINT_5_S5_COMPONENTS.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

6.0 KiB
Raw Blame History

Sprint 5 任务拆解W8-9 · 12 人天 · 52 子任务)

主任务T-C-01 ~ T-C-13, T-D-01 ~ T-D-10 目标:部署架构 + 监控 + 文档 + 10 基础组件 闸门G518 组件 dark story 全覆盖)

0. Sprint 5 概览

任务 主任务 估时 子任务数
T-C-01 选部署平台 0.25d 2
T-C-02 DNS + 域名 0.5d 3
T-C-03 反代配置 1.0d 4
T-C-04 CORS 配置 0.25d 2
T-C-05 CSP / HSTS 1.0d 4
T-C-06 Sentry 前端 1.0d 4
T-C-07 Web Vitals 上报 0.5d 3
T-C-08 trace 透传 0.5d 3
T-C-09 告警规则 0d 2
T-C-10 部署文档 1.0d 2
T-C-11 运维 Runbook 1.0d 2
T-C-12 安全审计 1.0d 2
T-C-13 灰度发布流程 1.0d 2
T-D-01 ~ T-D-10 10 基础组件 4.0d 35
合计 23 任务 12d + 缓冲 0d = 12d 52

12d 紧凑,缓冲在 Sprint 6-8


C.1 部署架构5 任务 · 11 子任务 · 3d

T-C-01 · 选部署平台0.25d · 2 子任务)

  • ST-S5-C-01.1 决策CloudStudio / Vercel / 自托管0.125d
  • ST-S5-C-01.2 写 docs/DEPLOY_DECISION.md0.125d

T-C-02 · DNS + 域名0.5d · 3 子任务)

  • ST-S5-C-02.1 注册 web.gaokao.example.com0.125d
  • ST-S5-C-02.2 注册 api.gaokao.example.com0.125d
  • ST-S5-C-02.3 HTTPS 证书自动续签Let's Encrypt0.25d

T-C-03 · 反代配置1.0d · 4 子任务)

  • ST-S5-C-03.1 nginx / caddy 配置0.5d
  • ST-S5-C-03.2 web → Next.js 静态产物0.125d
  • ST-S5-C-03.3 api → FastAPI0.125d
  • ST-S5-C-03.4 /api/* 转发0.25d
  • 验收
    • 单一域名访问前端,浏览器无 CORS 报错

T-C-04 · CORS 配置0.25d · 2 子任务)

  • ST-S5-C-04.1 CORSMiddleware 白名单0.125d
  • ST-S5-C-04.2 OPTIONS 预检验证0.125d

T-C-05 · CSP / HSTS1.0d · 4 子任务)

  • ST-S5-C-05.1 HSTS 配置0.25d
  • ST-S5-C-05.2 X-Content-Type-Options0.125d
  • ST-S5-C-05.3 X-Frame-Options DENY0.125d
  • ST-S5-C-05.4 CSP 策略0.5d
    • default-src 'self'
    • img-src 'self' data:
    • style-src 'self' 'unsafe-inline'
    • script-src 'self'
    • Referrer-Policy: strict-origin-when-cross-origin

C.2 监控4 任务 · 12 子任务 · 2d

T-C-06 · Sentry 前端1.0d · 4 子任务)

  • ST-S5-C-06.1 @sentry/nextjs 集成0.25d
  • ST-S5-C-06.2 错误 100% 上报0.25d
  • ST-S5-C-06.3 Performance trace路由切换0.25d
  • ST-S5-C-06.4 PII 脱敏用户消息过滤0.25d

T-C-07 · Web Vitals 上报0.5d · 3 子任务)

  • ST-S5-C-07.1 next/web-vitals 接入0.125d
  • ST-S5-C-07.2 自托管 endpoint0.125d
  • ST-S5-C-07.3 Prometheus 75 分位存储0.25d

T-C-08 · trace 透传0.5d · 3 子任务)

  • ST-S5-C-08.1 x-trace-id header 前端发送0.125d
  • ST-S5-C-08.2 FastAPI 中间件接收0.125d
  • ST-S5-C-08.3 Sentry 关联0.25d

T-C-09 · 告警规则0d · 2 子任务)

  • ST-S5-C-09.1 错误率 > 1% 告警0d
  • ST-S5-C-09.2 API P95 > 1s 告警0d
  • ST-S5-C-09.3 Web Vitals P75 跌破告警0d
  • 验收
    • Slack / 钉钉 webhook 接收

C.3 文档 + 收口4 任务 · 8 子任务 · 4d

T-C-10 · 部署文档1.0d · 2 子任务)

  • ST-S5-C-10.1 写 docs/DEPLOY.md0.75d
  • ST-S5-C-10.2 3 路径说明CloudStudio / 自托管 / Vercel0.25d

T-C-11 · 运维 Runbook1.0d · 2 子任务)

  • ST-S5-C-11.1 写 docs/RUNBOOK.md0.75d
  • ST-S5-C-11.2 10 常见故障处理0.25d

T-C-12 · 安全审计1.0d · 2 子任务)

  • ST-S5-C-12.1 OWASP top 10 自查0.75d
  • ST-S5-C-12.2 写 docs/SECURITY_AUDIT_2026-XX.md0.25d

T-C-13 · 灰度发布流程1.0d · 2 子任务)

  • ST-S5-C-13.1 5% → 20% → 100% 三步0.75d
  • ST-S5-C-13.2 自动化脚本0.25d

D.1 基础组件补齐10 任务 · 35 子任务 · 4d

通用模式:每组件 3-4 子任务props/渲染/单测/Storybook

T-D-01 · Dialog0.5d · 3 子任务)

  • ST-S5-D-01.1 portal 渲染 + 焦点陷阱 + ESC + 点击外部0.25d
  • ST-S5-D-01.2 单测0.125d
  • ST-S5-D-01.3 Storybook 2 故事0.125d

T-D-02 · Toast0.5d · 4 子任务)

  • ST-S5-D-02.1 4 种类型 + 自动消失0.125d
  • ST-S5-D-02.2 队列管理0.125d
  • ST-S5-D-02.3 单测0.125d
  • ST-S5-D-02.4 Storybook 4 故事0.125d

T-D-03 · Tooltip0.25d · 2 子任务)

  • ST-S5-D-03.1 hover 200ms 显示 + 3s 自动消失0.125d
  • ST-S5-D-03.2 单测 + Storybook0.125d

T-D-04 · Dropdown0.5d · 3 子任务)

  • ST-S5-D-04.1 Sidebar 头像菜单用0.25d
  • ST-S5-D-04.2 键盘导航0.125d
  • ST-S5-D-04.3 单测 + Storybook0.125d

T-D-05 · Avatar0.25d · 2 子任务)

  • ST-S5-D-05.1 3 套AI / User / 群组0.125d
  • ST-S5-D-05.2 单测 + Storybook0.125d

T-D-06 · Skeleton0.25d · 2 子任务)

  • ST-S5-D-06.1 4 种形状text/card/circle/avatar0.125d
  • ST-S5-D-06.2 单测 + Storybook0.125d

T-D-07 · ProgressBar0.25d · 2 子任务)

  • ST-S5-D-07.1 通用(区别于 InfoCollectionProgress0.125d
  • ST-S5-D-07.2 单测 + Storybook0.125d

T-D-08 · Switch0.25d · 2 子任务)

  • ST-S5-D-08.1 偏好设置用0.125d
  • ST-S5-D-08.2 单测 + Storybook0.125d

T-D-09 · Checkbox0.5d · 3 子任务)

  • ST-S5-D-09.1 FormCard 选科用0.25d
  • ST-S5-D-09.2 受控/非受控0.125d
  • ST-S5-D-09.3 单测 + Storybook0.125d

T-D-10 · Radio0.5d · 3 子任务)

  • ST-S5-D-10.1 FormCard 单选用0.25d
  • ST-S5-D-10.2 与 Checkbox 区分0.125d
  • ST-S5-D-10.3 单测 + Storybook0.125d

Sprint 5 收口验收

  • 23 主任务 / 52 子任务全部完成
  • G5 通过18 组件 dark story 全覆盖
  • 反代 / CSP / Sentry 跑通
  • 进入 Sprint 6 前 commit<feat(s5): deploy+monitoring+10 components>