95 lines
3.5 KiB
Markdown
95 lines
3.5 KiB
Markdown
# 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,减少文案/菜单变动带来的连锁断言漂移
|