# Audit — 2026-06-08 服务器全选筛选 + 脚本失败分组

**日期**: 2026-06-08  
**范围**: 纯前端 · 无后端变更  
**Changelog**: `docs/changelog/2026-06-08-servers-select-all-script-failure-groups.md`

## 变更概要

| 模块 | 文件 |
|------|------|
| ServersPage | `frontend/src/pages/ServersPage.vue` |
| ScriptsPage | `frontend/src/pages/ScriptsPage.vue` |
| 分组工具 | `frontend/src/utils/execDetailGrouping.ts` |
| 单测 | `tests/test_exec_detail_grouping.py` |
| 构建入口 | `web/app/index.html`（Docker 镜像内 vite build 同步） |

## 安全

| 项 | 结论 |
|----|------|
| 新 API | 无 |
| 鉴权 | 沿用 JWT；全选仍走既有 `/servers/` 与批量端点 |
| 敏感数据 | 复制清单含错误摘要，不含批量完整 stderr 导出；与单行复制等价 |
| XSS | 分组/复制均为已有字段文本，无 `v-html` |

## 性能

- 全选 364 台：`fetchPagePerPage` 多页 GET（200/页），与分页「全部」相同负载。
- 分组为客户端 computed，无额外请求。

## 回滚

```bash
git revert <commit>
cd frontend && npx vite build && bash deploy/deploy-frontend.sh
```

## 验收清单

- [ ] 分类筛选后全选台数 = Chip 计数
- [ ] 改搜索/排序/分类后选择清空
- [ ] 失败详情「按错误分组」同类 SSH 超时合并
- [ ] 「复制失败清单」剪贴板内容正确
