# 推送页重构 Batch 0 + Batch 1 **日期**: 2026-06-02 ## 变更摘要 - **B0(后端热修复)**:修复推送历史无法落库终态、rsync 统计未写入、重试误判成功、`max_retries` 默认值。 - **B1(前端 Critical)**:合并进度 UI、修复全选/预览/WS 字段映射、取消状态、表单校验与重入保护。 ## 动机 推送页存在 S1 级缺陷(`sync_log_repo.update` 缺失导致历史永远 `running`)及多处前后端契约不一致;按设计文档分批先交付 B0+B1。 ## 涉及文件 - `server/infrastructure/database/sync_log_repo.py` - `server/application/services/sync_engine_v2.py` - `server/background/retry_runner.py` - `server/domain/models/__init__.py` - `frontend/src/pages/PushPage.vue` - `docs/design/plans/2026-06-02-push-refactor.md` ## 迁移 / 重启 - 需重启 `nexus` Supervisor 进程以加载后端改动。 - 前端需重新 `npm run build` 并部署 `web/app/`。 ## 验证方式 ```bash ruff check server/infrastructure/database/sync_log_repo.py server/application/services/sync_engine_v2.py server/background/retry_runner.py cd frontend && npm run build-only ``` - 推送多台服务器:进度列表应出现「同步中」→ 成功/失败,失败行显示 `error_message`。 - 推送历史新记录 `status` 应为 `success`/`failed`,非长期 `running`。 - 预览对话框显示文件数与传输大小。 ## 后续批次 - B2:移除冗余 fallback、M8 `get_by_ids`、M9 临时目录清理 - B3:历史表列与 `PushItem` 类型对齐 - B4/B5:体验与 composable 拆分