Issue 109 Validation - ShaoClean/Alune GitHub Wiki
Issue #109:放弃所有更改验收记录
- 设计:Issue-109
- Issue:https://github.com/ShaoClean/Alune/issues/109
- PR:https://github.com/ShaoClean/Alune/pull/115
- 日期:2026-09-28
- 基线:
7fa5bdb;实现:c0fd92d0a005aaec463cfae71b3380cc9e776afb - 环境:macOS 15.5 arm64,Node 25.5.0,Git 2.43.1;Chromium 界面通过 ego-browser 验证。
所有测试使用隔离 Git 仓库、临时 SQLite 和 loopback SSH/SFTP。截图不含真实仓库内容、凭据或私人服务器地址。
自动验证
| 命令 | 实际结果 |
|---|---|
npm run build -w @alune/shared |
通过 |
npm run build -w @alune/ssh-client |
通过 |
npm run build -w server |
通过 |
npm run build -w web |
通过;保留既有 Vite 大 chunk 提示 |
npm test -w server -- --ci --runInBand |
18 suites / 186 tests 通过(含新增 6 项 HTTP 测试) |
npm test -w web |
151 tests 通过 |
npm test -w @alune/ssh-client |
115 tests 通过,2 项 Windows 专用测试在 macOS 跳过 |
node --test packages/ssh-client/tests/discard-changes.test.cjs |
新增 25 项测试通过;最终平台 fixture 配置调整后单独复跑通过 |
| Git diff 检查 / commit-msg hook | 通过 |
| GitHub PR CI(Node 22.22) | 四组单元测试(desktop/web/server/ssh-client)及 macOS 14、Ubuntu 22.04、Windows 本地 Git 回归全部通过 |
专项覆盖:有/无首次提交,两种范围,多文件修改及删除,暂存后再次编辑,已暂存新文件/仅暂存文件,已暂存删除、重命名,忽略文件、多个 worktree,特殊字面路径(中文、空格、引号、换行、pathspec magic、前导短横线),符号链接与嵌套仓库保护,冲突/子模块/意向添加阻止,确认后文件内容/暂存区/分支/目标集合变化,执行中其他写入、删除后重建、权限失败、SSH 写后断连和通道数量限制。
HTTP 验证使用真实临时本地仓库核对磁盘和暂存区;重复执行与其他 Git 写操作共享 409 保护,锁在失败后释放。真实 SSH/SFTP 测试确认未暂存恢复、可选删除、暂存区/忽略内容不变,连接丢失时返回未知数量。
实际界面验收
运行:node apps/web/tests/discard-changes-fixture.cjs。控制台提供界面和独立的测试控制 URL;可在隔离环境注入延迟、删除失败及同状态内容变化。
| 场景 | 观察结果 |
|---|---|
筛选 mixed 后打开确认 |
列表只显示匹配行,确认仍显示全仓库 3 个已跟踪 + 2 个未跟踪文件 |
| 默认范围与取消 | 删除复选框默认未选中;取消前后磁盘内容、Git 状态和暂存区条目完全一致,写请求为 0 |
| 双击确认与忙碌 | 延迟注入时双击仅发送 1 次写请求;取消、关闭与 Esc 不可用,显示正在放弃 |
| 仅放弃已跟踪 | 恢复 3 个文件,保留 2 个未跟踪文件和全部暂存内容;当前 mixed Diff 自动切换到保留的已暂存比较 |
| 包含删除时权限失败 | 显示「已恢复 3 个文件,已删除 1 个未跟踪文件;1 个文件未完成」和 Permission denied;列表刷新为真实剩余状态 |
| 部分失败后重试 | 必须重新读取;删除复选框重新清空。仅有未跟踪目标时,勾选前确认按钮禁用 |
| 全部目标完成 | 未暂存分组及批量入口隐藏,已暂存组仍然存在 |
| 确认后同状态内容变化 | 服务端拒绝旧确认且不写入;即使仍为 M,当前 Diff 也刷新到新内容 version 4 |
| 窄窗口 | 1024×768 下入口和确认框仍可完整操作;另在 1920×868 验证常规布局 |
截图
改动前(development / 7fa5bdb,1920×868)

改动后(1024×768)

默认仅放弃已跟踪文件

明确包含删除

成功后保留暂存内容(1920×868)

部分完成与重试

确认后变化

未验证与限制
Windows/Linux 原生桌面交互、Windows OpenSSH 实机和超大仓库性能未在本机验证。CI 已在 macOS、Windows、Linux 运行本地批量放弃回归并通过(上表关联实际运行)。这不替代原生桌面和 Windows OpenSSH 实机交互验收。指纹检查不能替代跨进程文件系统事务,应用也无法恢复直接删除的未跟踪文件。