# 维护测试报告

## 已执行的本地验证

日期：2026-10-09。系统：Windows x64；moon 0.1.20260920、moonc 0.10.14、Node v24.15.0。执行入口为 `npm run validate`，不是只检查文件是否存在。

| 检查 | 结果与范围 |
|---|---|
| 格式与静态检查 | `moon fmt --check`，四目标检查均通过，警告视为错误 |
| 构建与核心测试 | JS、Wasm、Wasm-GC、Native 均通过；13 个核心测试各运行四次，共 52 次执行，不是 52 个不同用例 |
| 核心可运行样例 | 四目标均运行成功 |
| Node 文件系统及交互测试 | 24 个测试通过，Windows 本机 0 跳过；包含 17 个集成、4 个平台、2 个 Windows 启动器及 1 个运行包测试 |
| 受控用户场景 | 科研资料历史恢复、团队资产增量去重、批处理部分回滚三个场景均由断言验证 |
| 核心单元覆盖率 | 226/242，约 93.4%；仅为 core 单元测试覆盖率，不代表整个应用覆盖率 |
| 便携运行包 | 白名单打包、16 文件 SHA-256 清单验证、独立目录运行冒烟测试通过；用户另装 Node ≥ 22 |

核心测试覆盖分块边界、哈希标准向量、配置与资源预算、清单编解码、严格整数、路径安全、大小/哈希不一致和快照差异。端到端测试覆盖八个历史版本恢复、九类恶意清单、缺失与损坏对象、分块重同步去重、排除项、并发锁、链接/硬链接拒绝、源变化、预算、进程中断、磁盘空间不足注入及提交时目标已出现的防覆盖行为。

启动器实际执行了空备注备份，确认不是仅打开菜单。`status` 检出缺失对象时返回非零退出码；统计输出明确声明不能替代完整校验。

## 受控性能探测

固定规模 8 MiB 合成文件，首次备份新增对象 8,388,608 字节；未修改再次备份新增对象 0 字节；恢复文件 SHA-256 与原文件一致。

| 操作 | 本次用时 | 子进程峰值 RSS |
|---|---:|---:|
| 首次备份 | 2,659 ms | 80,300 KiB |
| 未修改再次备份 | 1,771 ms | 77,348 KiB |
| 完整校验 | 1,422 ms | 53,084 KiB |
| 恢复 | 2,603 ms | 53,280 KiB |

这是一次本机小样本测量，不是吞吐承诺、长期生产压测或 NAS 性能结果。重跑 `node scripts/benchmark.mjs` 会记录新结果，硬件和文件系统不同可能变化。团队场景中对 1 MiB 文件插入 12 字节后复用 970,921/1,048,588 字节，约 92.6%；并非任意修改均有同等复用率。

## 远端 CI 验证

[CI 运行 37942722864](https://github.com/bzhangui/moonrestore/actions/runs/37942722864)，对应源码提交 `958404b831f7d30d243db2b7e28c28febc6a83a0`，Windows、Ubuntu、macOS 全部成功。三平台均执行四目标检查/构建/核心测试及示例，核心覆盖率一致；运行包 Windows 16 文件、Unix 17 文件（多一个 C 排他提交程序）校验成功。

Windows 文件系统与启动器 24 个测试均通过；Linux/macOS 各通过 22 个测试，两个仅适用 Windows PowerShell 启动器的测试明确跳过，不是跳过核心恢复验证。首轮 CI 暴露全新机器没有依赖索引的问题，已修复为构建前更新索引，并在全新三平台 runner 上通过。

## 证据边界和后续维护

- 当前远端结果证明所测平台和用例通过，不等于所有硬件/文件系统都兼容。
- Mooncakes dry run 返回服务端接受，不等于正式发布；以正式版本查询成功为发布证据。
- 故障演练采用进程终止和错误注入，不等于真实断电验证。
- 三个模拟用户场景不等于真实合作方试点。独立介质、NAS、长期运行和真实用户验证仍未完成。
- 不支持加密、保留 ACL/时间戳/权限、数据库热备份或历史垃圾回收；不能把这些未实现能力当作产品功能。
- 任何新增行为必须补回归测试；上游工具链变化需重新运行四目标检查及三平台 CI。
