# 2026-06-09 — 推送页分类全量加载 部署验收

## 版本

- **Commit**: `c366ed5`
- **Changelog**: `docs/changelog/2026-06-09-push-category-full-list.md`
- **生产**: Docker `nexus-prod-nexus-1` @ `/opt/nexus`
- **部署方式**: 本地 `vite build` → tar/scp `web/app` → `sync_webapp_to_container.sh`（先于 commit；Git 已对齐）

## 根因（已修复）

| 现象 | 数据 |
|------|------|
| 推送页「机器人」仅 5 台 | DB 该分类 **101** 台 |
| 旧逻辑 | `GET /api/servers/?per_page=200`，按 id 升序取前 200 台 |
| 前 200 台中含「机器人」 | **恰好 5 台**（其余 96 台 id 更大，未进入列表） |

## Agent 验证（2026-06-09）

| 项 | 结果 |
|----|------|
| `/app/` 主 bundle | `index-jg6n1uIt.js` HTTP 200 |
| `PushPage-DukhcoEE.js` | 含 `paginatedFetch`（非 `per_page:200`） |
| MySQL `servers` 总数 | 367 |
| MySQL `category=机器人` | 101 |
| `/health` | 200 |
| `/app/` | 200 |

## 变更摘要

1. **推送页** — `fetchPagePerPage('/servers/', {}, 1, -1)` 分页拉全舰队；分类分组与服务器页 `uncategorized` / `categoryDisplayLabel` 一致。
2. **未设路径区** — `unsetListQueryParams()` 不再带顶部分类 chip；批量改分类后机器仍可见直至配置 `target_path`。
3. **批量分类完成** — `invalidateCachedQuery(serverCategories)` 避免 chip 计数缓存 30s 陈旧。

## 浏览器终验（用户）

- [ ] 推送页 → 「机器人」分组显示 **0/101**（或全选后 101/101）
- [ ] 推送页 → 「商城」等与服务器页分类 chip 数量一致
- [ ] 未设路径区：切换顶部分类 chip 时列表仍显示全部未设路径机器
- [ ] 强刷 `Ctrl+Shift+R` 后入口为 `index-jg6n1uIt.js`

## 回滚

```bash
# 前端：checkout 上一版 web/app 或 c366ed5^ 后重新 tar/sync
# 业务无 DB 迁移
```
