6.2 KiB
6.2 KiB
Sprint 4 阶段进度报告 (V10 选项 B · 15/16 任务)
日期:2026-07-05(e2e i18n 回归修复后) 真实状态:⏳ PARTIAL — 已完成 15/16 任务,T-C-44 配置/CI 已落地但本地 Docker 构建待环境验证 不能宣称"Sprint 4 完成" ❌ 下一步:剩余阻塞项为 T-C-44 Poster CLI Docker 本地构建验证
⚠️ 重要的更正
原 SPRINT_4_CLOSEOUT_2026-07-03.md 文件标题用了"收口报告"和"G3 闸门全部通过",但实际:
- Sprint 4 任务表共 16 任务 / 53 子任务 / 10 人天
- 本次完成 5 任务 / 15 子任务
- G3 闸门定义包含:"8 e2e spec 全绿 + 真实后端 5 模块 200 + Lighthouse P/A/B/S ≥ 90"
- 已通过的 G3 子项:typecheck / lint / vitest / playwright(Chromium + WebKit + mobile-chrome)/ build
- 待环境复验的 G3 子项:Lighthouse / 真实后端回归(当前本机无 Docker,pytest 环境未作为本轮复验前置)
- 待环境验证的 G4 子项:Poster CLI Docker 镜像本地构建
正确标签应该是"Sprint 4 阶段 1 完成",而不是"Sprint 4 完成"。
✅ 实际完成(15 任务 · 47 子任务,截至 T-B-27 真实后端回归验证)
| ID | 任务 | 子任务 | 状态 | Commit |
|---|---|---|---|---|
| T-B-18 | 错误码映射 | 3/3 | ✅ | 86296bd |
| T-B-19 | ErrorBoundary | 3/3 | ✅ | ad261d7 |
| T-B-20 | 离线检测 | 4/4 | ✅ | c4f12ca |
| T-B-21 | SubmitButton 守卫 | 3/3 | ✅ | 411f225 |
| T-B-22 | Query 持久化 | 3/3 | ✅ | f5e40a4 |
| T-B-23 | e2e 真实化(8 spec) | 8/8 | ✅ | 1a49439 |
| T-B-24 | Lighthouse CI | 4/4 | ✅ | 61ba0ca |
| T-B-25 | Bundle 优化验证 | 3/3 | ✅ | bf5ad4a |
| T-B-26 | 路由级 prefetch | 2/2 | ✅ | 97cd431 |
| T-B-27 | 真实后端回归 | 2/2 | ✅ | 06a0f47 |
| T-B-40 | Share Link 状态面板 | 3/3 | ✅ | fecdb67 |
| T-B-41 | ShareLink 失败降级 | 3/3 | ✅ | c955459 |
| T-B-42 | LLM 增强进度轮询 | 3/3 | ✅ | c7f1dd4 |
| T-B-43 | Poster 异步生成 + 轮询 | 3/3 | ✅ | 45e6719 |
| T-C-45 | 集成测试套件 | 2/2 | ✅ | 45e6719 |
⏳ 剩余 / 阻塞(1 任务 · 4 子任务)
T-B-23 · e2e 真实化(2.0d · 8 子任务) ✅ DONE
8 个真实业务流 e2e:theme-switch / chat-send-receive / form-submit-validation / plan-create-view / data-query-search / review-flow-approve / poster-generate-download
修复 3 类 e2e bug:
- Playwright 多 handler 同时匹配:fallback
**/api/**覆盖精细 mock → 改用(url) => url.pathname.startsWith('/api/') && !includes(精确路径) - ReadableStream 不被
route.fulfill接受 → 用Buffer.from(sse, 'utf-8') - Mobile viewport 下 fixed nav 拦截 click → 用 Enter 键 +
{force: true}+ 验证 disabled
2026-07-05 复验:i18n 迁移导致的 e2e selector 回归已在 2194f89 修复。
当前可验证结果:
- Targeted 回归 spec:8/8 passed
- Chromium 全量:29/29 passed
- Chromium + WebKit + mobile-chrome:87/87 passed
- Firefox:本机 Playwright 环境触发
browserContext.newPage异常,需环境修复后单独复验;不再计入本轮 i18n selector 回归。
T-B-24 · Lighthouse CI 集成(1.5d · 4 子任务) ✅ DONE
- 装
@lhci/cliv0.14 apps/web/lighthouserc.cjs: desktop preset, 3 runs, P/A/B/S ≥ 90 断言- GitHub Action
treosh/lighthouse-ci-action@v12+ temporaryPublicStorage - 本地实测:P=100 / a11y=95 / best=96 / seo=91
T-B-25 · Bundle 优化验证(0.5d · 3 子任务) ✅ DONE
vite.config.ts: production sourcemap=false(build time 17.89s → 6.89s)scripts/bundle-report.cjs: 总 500KB / 单 chunk 150KB budget- 8 vendor manualChunks 保持 + lazy page chunks 新增
T-B-26 · 路由级 prefetch(0.5d · 2 子任务) ✅ DONE
usePrefetchLazyRoutehook:lazy route loaders 注册表RouteFallbackSuspense fallback(48px min-height)SidebarNavLink onMouseEnter/onFocus 触发 prefetch- 2026-07-05 最新构建:main chunk 146.74 KB gzip,total 393.60 KB gzip;仍低于单 chunk 150 KB / total 500 KB 预算,但不再沿用 81.30 KB 旧口径。
T-C-44 · Poster CLI Docker(1.0d · 4 子任务)
- ✅
Dockerfile.poster已补 - ✅
docker-compose.yml已添加gaokao-posterprofile 服务 - ✅ CI 已添加 Poster CLI Docker 合同测试与
docker build -f Dockerfile.poster - ⏳ 本地 Docker 构建验证未跑:当前环境未安装
docker
🔍 当前 G 闸门真实状态(2026-07-03 深夜)
| 闸门 | 定义 | 实测 | 状态 |
|---|---|---|---|
| typecheck | tsc --noEmit 0 error |
0 error | ✅ |
| lint | eslint . 0 error 0 warning |
0 error 0 warning | ✅ |
| vitest | 单测全过 | 69/69 (17 文件) | ✅ |
| e2e | 8+ spec 全绿 | Chromium 29/29;Chromium + WebKit + mobile-chrome 87/87;Firefox 待本机环境修复后复验 | ⚠️ |
| build | bundle 主 chunk < 150KB gzip | main 146.74 KB · total 393.60 KB | ✅ |
| Lighthouse | P/A/B/S ≥ 90(desktop) | 历史 P=100, a11y=95, best=96, seo=91;本轮未复跑 | ⏳ |
| 真实后端 | 5 模块 200 | 历史报告 reports/sprint4-real-backend-regression.json 存在;本轮未复跑 |
⏳ |
| G4 Poster CLI | Docker 镜像本地构建 | Dockerfile/compose/CI 已落地;本地构建待 Docker 环境 | ⏳ |
🛡 防止再"虚假完成"
上一版本 Sprint 4 closeout 文档把"5/16 任务完成"包装成"全部通过 G3 + Sprint 4 完成"。这是用户已知的问题。新规则:
- 任务表 vs 状态表:每篇 closeout 必须用任务表的真实状态(完成 5/16),而不是"全部通过"
- 闸门 vs 子任务:G3 闸门定义要拆成可独立标记的子项
- 阶段完成 ≠ Sprint 完成:5 任务完成是"Sprint 4 阶段 1 完成",不是"Sprint 4 完成"
- 真实命令输出 ≠ 真实实现:每个 commit 都要看实际文件
下一步
建议继续:
- 选项 A:安装/启用 Docker 后,跑 T-C-44 Poster CLI Docker 本地构建验证
- 选项 B:在可用 Python 后端环境中补跑后端 pytest 契约测试