# 推送页重构 — 分批实施计划

**日期**: 2026-06-02  
**设计**: `docs/design/specs/2026-06-02-push-refactor-design.md` (v2.0)

## 分批总览

| 批次 | 名称 | 范围 | 状态 |
|------|------|------|------|
| **B0** | 后端热修复 | S1/S2/S3/S4、C8 running 广播 | ✅ 已完成 |
| **B1** | 前端 Critical | C1–C6、C7、C9、C10 | ✅ 已完成 |
| **B2** | 性能与数据 | M8/M9、M6、`PushItem`、历史表列 | ✅ 已完成 |
| **B3** | 历史筛选、reconcile API、ZIP 源路径禁用 | ✅ 已完成 |
| **B4** | 体验增强 | 多机预览、诊断、is_online、列表刷新 | ✅ 已完成 |
| **B5** | 架构拆分 | composables + 子组件 | ✅ 已完成 |
| **B6** | M2 `/ws/sync` + M9 清理 + 全量预览 | 见 post-b5 设计 | ✅ 已完成 |

## B0 — 涉及文件

- `server/infrastructure/database/sync_log_repo.py` — 新增 `update()`
- `server/application/services/sync_engine_v2.py` — `--stats`、解析统计、running 广播
- `server/background/retry_runner.py` — 成功判定逻辑
- `server/domain/models/__init__.py` — `max_retries` 默认 3

## B1 — 涉及文件

- `frontend/src/pages/PushPage.vue`

## B5 — 涉及文件

- `frontend/src/pages/PushPage.vue` — 薄编排层（~100 行）
- `frontend/src/composables/push/` — `types.ts`、`labels.ts`、`usePushForm`、`usePushServers`、`usePushProgress`、`usePushPreview`、`usePushLogs`、`usePushPage`
- `frontend/src/components/push/` — `PushZipUpload`、`PushToolbar`、`PushServerGrid`、`PushSyncModeCard`、`PushProgressList`、`PushPreviewDialog`、`PushDiagnoseDialog`、`PushHistoryTable`

## 验证

```bash
cd frontend && npm run build-only
ruff check server/infrastructure/database/sync_log_repo.py server/application/services/sync_engine_v2.py server/background/retry_runner.py
python -c "from server.infrastructure.database.sync_log_repo import SyncLogRepositoryImpl; assert hasattr(SyncLogRepositoryImpl, 'update')"
```

## 回滚

- B0/B1 均为向后兼容改动，回滚对应文件 git revert 即可；无 DB 迁移（`max_retries` 仅影响新行默认值）。
