# 2026-06-04 — Code Review P0/P1 修复批次 ## 摘要 依据 Cursor 全量 code review 结论,修复安装窗口、并行推送 DB 会话、源路径校验、Refresh 轮换竞态、定时任务失败判定、Primary 锁降级及前端推送/登录问题。 ## 动机 - P0:`sync_files` 并行 worker 共用 `AsyncSession` 导致间歇性 DB 错误;`create-admin` 在 Step3~4 之间无鉴权可被抢管。 - P1:推送源路径未统一黑名单;Refresh 非原子轮换;schedule 全失败仍提交 `last_run_at`;Redis 不可用时多 worker 重复后台任务;前端 WS 泄漏与开放重定向。 ## 涉及文件 | 文件 | 变更 | |------|------| | `server/application/services/sync_engine_v2.py` | `_db_lock` 串行化 DB 写;源路径走 `resolve_nexus_push_source_path` | | `server/utils/posix_paths.py` | 新增 `FORBIDDEN_NEXUS_SOURCE_PREFIXES`、`resolve_nexus_push_source_path` | | `server/api/install.py` | Step3 签发 `install_token`;`create-admin` 校验令牌 | | `web/app/install.html` | 保存并提交 `install_token` | | `server/application/services/auth_service.py` | Redis Lua 原子 refresh 轮换 | | `server/api/sync_v2.py` | validate/verify 复用统一源路径校验 | | `server/main.py` | Redis 失败时 flock 文件锁 fallback(单 primary) | | `server/background/schedule_runner.py` | 推送零成功时 rollback schedule | | `frontend/src/pages/LoginPage.vue` | 登录 redirect 防开放重定向 | | `frontend/src/composables/push/usePushProgress.ts` | 失败时 disconnect WS;4001/4401 强制登出 | | `tests/test_security_unit.py` | install token + 源路径单元测试 | ## 迁移 / 重启 - 需重启 `nexus`(Supervisor)使后端生效。 - 前端需 `vite build` 后部署静态资源。 - **安装向导**:Step3 响应新增 `install_token`,Step4 必须携带;进行中的安装需从 Step3 重新执行以获取令牌。 ## 验证 ```bash .venv/bin/ruff check server/... .venv/bin/python -c "import server.main" .venv/bin/pytest tests/test_security_unit.py -q cd frontend && npm run type-check ``` 进度:`☑实现 ☑WSL验证 □审计8步 □部署 □健康检查 □浏览器验证 ☑changelog`