Files
gaokao-volunteer-system/reports/REVIEW_REPORT_V10_FRONTEND_2026-07-05.md
2026-07-06 22:13:50 +08:00

145 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- 历史快照提示:本文件保留为历史审计材料,不再代表当前项目状态。 -->
> ⚠️ **历史快照(非当前真相源)**:本文件仅保留当时审查/收口结论。当前状态与执行顺序以 `docs/CURRENT_STATE.md`、`docs/ACTIVE_REMEDIATION_2026-07-05_REVIEW.md`、`docs/ACTIVE_EXECUTION_BOARD_2026-07-05_REVIEW_REMEDIATION.md`、`docs/plans/2026-07-05-review-remediation-systemic-fix-plan.md` 和 `reports/REVIEW_REPORT_2026-07-05_COMPREHENSIVE_PROJECT_REVIEW.md` 为准。
---
# V10 前端重构 · 真实状态复核报告
> **审查日期**2026-07-05
> **复核更新**2026-07-05已纳入 `2194f89 fix: stabilize e2e assertions after i18n migration` 与系统性二次 review
> **审查范围**Sprint 1 ~ Sprint 8 前端重构任务
> **结论**S1-S7 前端代码已落地i18n 迁移导致的 14 个 e2e 回归已修复;二次 review 又发现后台导航断链、Admin mock 登录未对接真实 JWT、CI/Lighthouse/Chromatic 配置风险;因此仍不能宣称 V10 全部完成。
---
## 一、当前结论
原始审查发现的主要代码级 blocker 是 Sprint 7 i18n 迁移后 e2e selector 未同步,导致 navigation、data-query、poster、admin mobile/a11y 等用例在多项目矩阵下失败。
该问题已在 `2194f89` 修复:
- e2e 断言改为兼容 i18n 后的可访问名称或结构化 role/cell 定位。
- poster e2e mock 已匹配当前 job/status 生成模型。
- mobile-chrome 下 Admin 布局补齐移动端横向导航,修复真实 UI 缺口。
---
## 二、闸门复验
| 闸门 | 最新复验结果 | 状态 |
|---|---:|---|
| build | `pnpm run build` 通过main 146.74 KB gziptotal 393.60 KB gzip | ✅ 通过 |
| lint | `pnpm run lint` 通过 | ✅ 通过 |
| typecheck | `pnpm run typecheck` 通过 | ✅ 通过 |
| vitest | 提权后 `pnpm run test` 通过85 files / 317 tests | ✅ 通过 |
| targeted e2e | data-query + navigation + poster8/8 passed | ✅ 通过 |
| Chromium e2e | 29/29 passed | ✅ 通过 |
| 非 Firefox e2e 矩阵 | Chromium + WebKit + mobile-chrome87/87 passed | ✅ 通过 |
| Firefox e2e | 本机 Playwright `browserContext.newPage` 环境异常 | ⏳ 待环境复验 |
| Lighthouse / LHCI | 本机 Chrome 临时目录 EPERM未复跑 | ⏳ 待 CI 或环境修复 |
| T-B-27 后端 regression | 本轮未复跑,需要真实后端 / pytest 环境 | ⏳ 待环境 |
| T-C-44 Poster Docker | 本机暂无 Docker | ⏳ 待环境 |
---
## 三、系统性二次 Review Findings
### F1 · 后台导航存在真实断链High
- `apps/web/src/layouts/AdminLayout.tsx` 暴露 `/admin/review` 导航项。
- `apps/web/src/router.tsx``/admin` 子路由没有 `review`只有订单、案例、share-links、posters、score-lines、rank-estimator、majors、schools、error 等子路由。
- 确定性脚本校验结果:`missing admin nav routes: /admin/review`
- 影响:后台用户点击“复核 / Review”会进入后台 NotFound而不是复核页面。
- 测试缺口:现有 `admin-portal.spec.ts` 只覆盖登录、订单、案例、错误页,没有遍历全部后台导航链接。
### F2 · React Admin 登录仍是前端 mockHigh
- `apps/web/src/pages/admin/LoginPage.tsx` 只接受验证码 `123456`,然后直接 `setUser(... role: 'admin')` 写入 Zustand/localStorage。
- `apps/web/src/lib/api-client.ts` 没有从 user store 或 auth store 注入 `Authorization: Bearer ...`
- 后端 admin API 依赖 `/api/auth/login` 返回 JWT并通过 `Authorization` 头访问受保护路由。
- 影响:真实后端环境中可能出现“前端显示已登录,但 admin API 请求 401/403”的集成失败。
### F3 · Lighthouse CI 启动配置存在口径不一致Medium
- `.github/workflows/web-ci.yml` 使用 `treosh/lighthouse-ci-action@v12`URL 指向 `http://127.0.0.1:8080/...`
- `apps/web/lighthouserc.cjs` 也使用 8080 URL但注释写“vite preview 启动8081”。
- workflow 未显式配置 `startServerCommand` / `startServerReadyPattern` / `staticDistDir`
- 影响LHCI 可能在 CI 中因服务未启动或端口口径不一致而假挂;也可能误以为 G3 Lighthouse 已真实复验。
### F4 · Chromatic token 缺失会阻塞 CIMedium
- `.github/workflows/web-ci.yml``chromatic` job 直接使用 `${{ secrets.CHROMATIC_TOKEN }}`,没有 secret 存在性条件。
- 当前项目状态仍把 Chromatic / Storybook baseline 视为外部 token 待配置项。
- 影响:未配置 token 的 push / PR 可能被 Chromatic job 阻断,与“外部 token 待配置”的文档口径不一致。
### F5 · 后端非 Docker 测试当前被本机 Python 环境阻塞Environment
- `python -m pytest ...` 失败:系统 Python 是 `C:\Python314\python.exe`,未安装 pytest。
- 项目 `.venv` 不存在。
- `uv run pytest ...` 失败:`uv trampoline failed to spawn Python child process`
- 结论:这不是业务断言失败,但当前本机无法完成后端非 Docker regression 复验。
---
## 四、Sprint 状态
| Sprint | 当前状态 | 说明 |
|---|---|---|
| Sprint 1 | ✅ 完成 | Monorepo / CI 基础已落地 |
| Sprint 2 | ✅ 完成 | Vite + Zustand + TanStack Query 基础已落地 |
| Sprint 3 | ✅ 完成 | 5 新模块 + LLM fallback 已落地 |
| Sprint 4 | ⚠️ 部分完成 | 15/16 任务代码落地e2e 回归已修Lighthouse / 后端 / Docker 仍待环境复验 |
| Sprint 5 | ✅ 完成 | 14 shared 组件及测试已落地 |
| Sprint 6 | ✅ 完成 | 业务组件、暗色态、a11y 守门已落地 |
| Sprint 7 | ⚠️ 部分完成 | i18n + Admin 页面已落地e2e 回归已修G6.1 Lighthouse ≥95 待复验 |
| Sprint 8 | ❌ 未启动 | 仍无 Sprint 8 progress 文档和落地进度 |
---
## 五、已修复项
- **B1 e2e 14 个 i18n selector 回归**:已由 `2194f89` 修复。
- **B2 e2e 数量/状态口径不一致**:核心文档已更新为当前 29 tests/project 与非 Firefox 87/87 复验结果。
- **S1 bundle 数值过时**:已更新为 main 146.74 KB gzip、total 393.60 KB gzip仍在预算内。
- **S3 Sprint 4 状态文档过时**:旧根目录 Sprint progress/closeout 文档已清理,当前状态以 `docs/CURRENT_STATE.md` 和 2026-07-05 review remediation 文档为准。
- **N1 MobileNav aria-label 测试不兼容 i18n**e2e 已使用中英双语可访问名称匹配。
- **N2 poster alt 中文依赖**e2e 已改为 `getByRole('img', { name: /海报预览|Poster preview/ })` 并补齐 job/status mock。
---
## 六、仍未完成项
- **F1 后台 `/admin/review` 断链**:需要补 admin 子路由或移除/改指导航项,并新增全量后台导航 e2e。
- **F2 React Admin 真实鉴权**:需要接入 `/api/auth/login`、保存 JWT并在 `apiClient` 注入 `Authorization`
- **F3 Lighthouse CI**:需要显式配置 LHCI 启动方式,统一 8080/8081 口径后在 CI 复跑。
- **F4 Chromatic CI**:需要在无 token 时跳过或降级为非阻塞 job。
- **Firefox 项目矩阵**:当前失败是本机 Playwright 环境级 `browserContext.newPage` 异常,需修复环境后补跑。
- **Lighthouse / LHCI**:需要 CI 或修复本机 Chrome 临时目录权限后复跑。
- **T-B-27 后端 regression**:需要真实后端与 pytest 环境。
- **T-C-44 Poster Docker**:需要 Docker 环境或 CI runner。
- **Sprint 8**尚未启动V10 不能宣称全部完成。
---
## 七、最终判断
**不能宣称 V10 前端重构全部完成。**
可以宣称:
- S1-S7 的主要前端代码已落地。
- 本轮发现的 14 个 i18n e2e 回归已修复。
- 非 Firefox 前端 e2e 矩阵已全绿。
- 本轮系统性二次 review 已完成前端 lint / typecheck / unit / build / Chromium e2e 验证,并识别出新的真实集成风险。
- 核心进度文档中的 e2e、bundle、commit hash 口径已修正。
仍需完成:
1. 修复 `/admin/review` 后台导航断链,并补全后台导航 e2e。
2. 将 React Admin 登录从 mock 改为真实 `/api/auth/login` + Bearer JWT。
3. 修复 Lighthouse / Chromatic CI 配置口径。
4. 修复 Firefox 本机 Playwright 环境异常并补跑 Firefox 矩阵。
5. 在 CI 或完整本地环境补跑 Lighthouse + T-B-27 后端 regression。
6. Docker 环境就绪后跑 T-C-44 Poster Docker 构建。
7. 启动并完成 Sprint 8。