# user-system review 修复收口(2026-05-28) ## 结论 本轮已完成 review 报告相关最高优先级前端/E2E blocker 修复,并完成后端、前端、E2E 三层验证。 当前状态: - 最高优先级 blocker:已修复 - Go 全量测试:通过 - 前端全量测试:通过(82 files, 522 tests) - Playwright CDP 全链路 E2E:通过 ## 本轮修复项 ### 1. 会话恢复 / refresh 竞态 - 问题:`AuthProvider` 初始恢复会话与 HTTP client 401 重试路径会并发触发 `/auth/refresh`,在 refresh token 轮换模型下导致 `401`。 - 修复:前端改为共享 single-flight refresh。 - 涉及文件: - `frontend/admin/src/lib/http/client.ts` - `frontend/admin/src/services/auth.ts` - `frontend/admin/src/services/auth.test.ts` ### 2. 用户列表响应结构漂移 - 问题:后端 `/users` 返回 `{ users, total, limit, offset }`,前端只按 `items` 读取,导致页面空表。 - 修复:增加 users 列表 normalize,兼容 `items/users` 和 `page_size/limit/offset`。 - 涉及文件: - `frontend/admin/src/services/users.ts` - `frontend/admin/src/services/users.test.ts` ### 3. Webhooks 列表响应结构漂移 - 问题:Webhooks 页加载时报 `Cannot read properties of undefined (reading 'map')`。 - 修复:兼容 `data/items/webhooks` 多种列表包裹形状。 - 涉及文件: - `frontend/admin/src/services/webhooks.ts` - `frontend/admin/src/services/webhooks.test.ts` ### 4. Social accounts 响应结构漂移 - 问题:ProfileSecurityPage 报 `socialAccounts.map is not a function`。 - 修复:兼容 `array/items/accounts/social_accounts` 形状。 - 涉及文件: - `frontend/admin/src/services/social-accounts.ts` - `frontend/admin/src/services/social-accounts.test.ts` ### 5. Playwright CDP E2E harness 漂移 - 修复点包括: - refresh token 断言从可读 cookie 改为 HttpOnly cookie / session presence 真相 - `创建用员` 文案 typo - responsive 场景后 viewport 未恢复 - drawer 选择器 strict mode 冲突 - delete confirm 由 modal 漂移为 popconfirm - 菜单分组/路由漂移:设备、审计日志、Webhooks、profile/security - 多处页面断言从宽文本改为更稳定选择器 - 涉及文件: - `frontend/admin/scripts/run-playwright-cdp-e2e.mjs` - `frontend/admin/scripts/run-playwright-auth-e2e.sh` ### 6. E2E 限流误伤 - 问题:测试流量触发 API rate limit,导致后续场景误报。 - 修复:为 E2E backend 增加 `DISABLE_RATE_LIMIT=1` 开关,仅用于测试启动脚本。 - 涉及文件: - `internal/api/middleware/ratelimit.go` - `frontend/admin/scripts/run-playwright-auth-e2e.sh` ## 验证结果 ### 后端 - 命令:`go test ./...` - 结果:通过 ### 前端 - 命令:`npm test -- --runInBand` - 结果:通过 - 统计:`82 passed`, `522 passed` ### E2E - 命令:`npm run e2e:full` - 结果:通过 - 结论:`Playwright CDP E2E completed successfully` ## 闭环判断 ### 实现闭环 已完成。本轮识别出的真实 blocker 均已修复。 ### 证据闭环 已完成。Go 全量测试、前端全量测试、CDP E2E 全部通过。 ### 文档真相闭环 已完成。本文件记录了问题、修复、验证与当前结论。 ### 防复发闭环 已部分完成: - 已为 users/webhooks/social-accounts 响应结构漂移补 service-level normalize + tests - 已把 refresh 单飞与 E2E harness 漂移修复固化 - 后续建议:把 E2E 页面导航/断言进一步抽象为页面对象或稳定 helper,减少文案/菜单变动带来的连锁断言漂移