# Desktop / Web UI 回归清单

## 自动门禁

```bash
npm run check
npm run dev:ui
```

访问 `http://127.0.0.1:4173/mcp-connector/ui/`。本地测试壳不读凭据、不访问真实 MCP，固定提供 125 个 mock 工具，用于验证大目录分批渲染。

## 每次发版前 Desktop 实机

1. 完全退出并重启 DSH Desktop；展开/收起侧栏，入口始终在“新会话”下、“工作区”上且不重复。
2. 切换工作区、新建会话、重建侧栏后入口仍存在；目标 slot 缺失时 footer 降级可点击。
3. 打开市场，验证中文单语言（无 EN 切换按钮）、系统深浅主题、Tab 顺序、Escape 关闭与焦点回到触发按钮。
4. 点击未连接卡片可查看详情；点击已连接卡片可读实时工具、搜索并每次再加载 50 条。
5. “添加连接”依次验证手动、JSON、市场卡片；JSON 示例/粘贴可缩进格式化，错误 URL/JSON/凭据得到可行动提示。
6. Bearer/API Key 型市场卡片先填错误凭据：弹框内应显示鉴权/网络分类错误，不得进入「已安装」；再填正确凭据，只有卡片下所有 Server 均通过 initialize 校验后才批量安装。
7. 参数化 Prompt 填写企业/人员/主题后，发送到当前工作区新会话草稿；重复点击和超时有提示。
8. OAuth：授权回调、重启恢复、停用/启用、断开撤销；二级弹框蒙层与关闭按钮清晰。
9. 旧插件迁移先预览，明确确认后复制；旧凭据仍保留，新连接验证后再手工停用旧插件。

## 专项验收与人工确认边界

### 本地参数覆盖（#146，0.2.76；Desktop 验收待完成）

传输层隔离验收可使用本机已安装的 Host 代码，无需修改用户 profile。将下面路径换成实际 DSH 安装目录中的 `package.json`（必须能解析 `@deepseek-ai/dsh-mcp-client` 与 `@deepseek-ai/cordis`）：

```bash
DSH_HOST_INTEGRATION_ANCHOR=/absolute/path/to/dsh/package.json node --test test/local-overrides-host.test.mjs
```

不设置此变量时该测试跳过；显式指定的 Host 不可解析时应失败。测试使用真实 Cordis 生命周期与 MCP 客户端/stdio 子进程，工具注册表是隔离测试容器，不加载实际 Host profile、存储或凭据。仅启动仓库自有无网络测试服务器，验证初次启动失败、修正 `argsAppend/env/cwd` 后工具发现与无害调用、带启动保护的进程恢复、清除覆盖后恢复原始启动行为及进程回收。临时工作目录包含空格，参数含中文和 shell 特殊字符。

该证据不等同于完整 Desktop 验收，仍需在隔离 profile 完成：

- 首次连接确认框高级参数输入，失败后表单保留、修正重试；已有连接留空保留覆盖。
- 已安装列表编辑、敏感值保留标记往返、清除覆盖和快照恢复。
- 重启后参数实际生效、停用连接不启动；市场改为凭据型后旧覆盖不再自动启动。
- Windows Desktop 的含空格可执行文件路径、目录与工具调用；Windows CI 不能代替桌面宿主验收。

不得将此草案直接安装进现有正常工作 profile，也不得用真实付费工具替代无害调用验收。

### 面板浏览状态恢复（#135）

- 在工作区 A 设置市场分类、搜索、展开章节并滚动；切换其他宿主面板再回来，检查恢复。已安装和工具页签（含筛选、分页）分别重复。
- 切换工作区 B 不应带入 A 的筛选；回到 A 应恢复 A 的状态。慢网络下快速切页签/工作区，旧响应不得覆盖新页面。
- 返回仍重新读取数据、重建 SSE；这是状态恢复，不是 iframe 常驻。详情、授权弹框、凭据及 JSON 编辑表单不恢复。
- 浏览状态只在同源宿主当前页面内存保留，最多 32 个工作区；刷新宿主后清空。跨源/受限父页面不可访问时降级为不跨 iframe 生命周期保存。

- 不在 CI 中完成真实 OAuth 登录。
- 不自动删除旧插件、旧 storage domain 或凭据。
- 不因探针一次失败直接删除社区条目；定时报告供维护者复核。
