# Changelog: 推送页 M2 / M9 / 全量预览

**日期**: 2026-06-02

## 摘要

推送进度改用独立 WebSocket `/ws/sync` 与 Redis 频道 `nexus:sync`；新增每小时清理过期 `/tmp/nexus_upload_*` 后台任务；预览支持全部选中服务器（并发 4，带进度条）。

## 动机

- M2：告警与推送进度解耦，避免多批次/多用户在同一 WS 上交叉
- M9：失败或放弃的上传临时目录不再长期占用磁盘
- 预览：取消 12 台上限，大批量推送前可看到完整预估

## 涉及文件

- `server/api/websocket.py`、`server/background/upload_staging_cleanup.py`、`server/main.py`
- `frontend/src/composables/push/usePushProgress.ts`、`usePushPreview.ts`、`types.ts`
- `frontend/src/components/push/PushPreviewDialog.vue`、`pages/PushPage.vue`
- `tests/test_sync_websocket.py`、`tests/test_upload_staging_cleanup.py`

## 迁移 / 重启

- **必须** `supervisorctl restart nexus`（新 WS 路由 + 后台任务）
- 前端需重新 build 并部署 `web/app/`

## 验证

```bash
ruff check server/api/websocket.py server/background/upload_staging_cleanup.py server/main.py
pytest tests/test_sync_websocket.py tests/test_upload_staging_cleanup.py -q
cd frontend && npm run build-only
```
