# 审计 — Servers 搜索手动触发与 null 修复 ## 范围(文件清单) | 文件 | 变更 | |------|------| | `frontend/src/composables/useServerSearchHistory.ts` | 仅加载历史、不恢复 last;record null 安全 | | `frontend/src/composables/useServerPagination.ts` | search null 安全 trim | | `frontend/src/pages/ServersPage.vue` | searchDraft + 回车/下拉/清空才搜索 | | `server/utils/validation_errors_zh.py` | 422 剥离不可序列化 ctx | ## Step 3 规则扫描 | H | 规则 | 结论 | |---|------|------| | H1 | 进页不自动过滤 | PASS — refresh 重置 search | | H2 | 无静默吞错 | PASS — record/load 失败非阻塞 | | H3 | 422 可 JSON 序列化 | PASS — ctx 不写入响应 | ## Closure | H | 判定 | 依据 | |---|------|------| | H1 | PASS | loadHistoryOnly 不写 search | | H2 | PASS | try/catch 保留 | | H3 | PASS | translate_validation_errors | ## DoD - [x] npm run type-check - [x] changelog 2026-06-11-servers-search-manual-trigger.md - [x] 进页全量列表;手动搜索才请求 ## 验证 Servers 页进入 → 无搜索 chip;下拉选历史或回车 → 过滤;清空 → 全量。