# 验收用例（TESTING）

## 自动测试

```bash
npm test   # lib 模块单测：路径编码（6 组真实目录名+中文）、zstd 帧结构、cwd 重写、密钥排除
```

## 全链路验收（G1–G4）

已在 2026-10-07 用本地临时 DSH 实例 + 真实云端 VM 全链路通过一次（job 5026cb92）：

| # | 用例 | 结果 |
|---|---|---|
| G2 | 手动按钮（/send）触发迁移，当前轮停稳后打包 | ✅ settled=true，bundle 上传成功 |
| G3 | 会话（29 事件）+工作区（git 快照）+记忆 迁移到云端，cwd 重写生效 | ✅ 云端 agent 报出新 cwd 并在此执行 bash |
| G1 | 云端独立继续执行任务（写文件），完成后调用 dsh_cloud_finish | ✅ marker.txt 追加时间戳，receipt 产出 |
| G4 | 本地启动钩子自动拉取：工作区变更应用 + 会话尾部追加（29→78 事件） | ✅ SYNCED，本地文件更新、日志合并 |

## 中止路径验收（2026-10-07 修复后真机验证）

| 用例 | 结果 |
|---|---|
| 中止时真实 diff：任务先建文件再跑 120s 循环，中途中止 → receipt.changed 含该文件（不再恒空） | ✅ finalState=ABORTED，changed=[cloud-abort-test2.txt]，tailEvents=42 |
| 中止后回收：pull 拉回 → 本地文件出现 + 会话尾部合并（30→132 事件） | ✅ |
| 同会话二次迁移：云端活体检测返回 SESSION_LIVE → 重启云端 → 同 jobId 重收成功 → 任务跑完 DONE | ✅ |
| 测试残留清理 | ✅ 本地/云端全部清空 |

## 待人工验证（真实桌面 GUI 安装后）

1. 输入区出现「☁ 转为云端运行」按钮；点击 → 输入任务说明 → 确认 → 状态变「云端执行中」。
2. 迁移期间本机合盖/关机，云端不受影响（cloud 在 PVE 常驻）。
3. 重开桌面 App 后 60 秒内自动同步，设置页显示「已同步」+ 摘要。
4. 失败路径：云端任务失败/中止 → 本机错误摘要自动展开。
6. 中止后设置页/输入区出现「回收进度」按钮，点击可回收中止前产出。
5. 冲突路径：云端执行期间本机改动同一文件 → 回拉保留 `.cloud-*` 副本，不覆盖。
