# 可复现交付验证

从仓库根目录运行，需 Git、`tar` 和 README 记录的 MoonBit 工具链。依赖版本固定在 `moon.mod`；首次执行需访问 Mooncakes 下载依赖，后续允许复用工具链与依赖缓存。

```text
moon update
moon run scripts/verify.mbtx portable HEAD
```

`HEAD` 模式先解析 Git 树对象，再用 `git archive` 将**已提交文件**解包到新的临时目录。未提交修改、未跟踪文件、原工作区 `_build` 和 `.mooncakes` 不会进入该目录。随后在新目录中检查格式、生成接口无漂移、严格编译、执行 Wasm / Wasm-GC / JavaScript 测试和演示，并核对真实价格示例与完整文件工作流。归档不是离线依赖包；它仍使用系统工具链和允许复用的依赖缓存。

有本机 C 工具链时运行完整验证：

```text
moon run scripts/verify.mbtx all HEAD
```

`all` 还会**运行** Native 测试、演示和文件端到端流程；没有 C 工具链时必须失败，不能用编译检查冒充运行。CI 在 Linux、macOS、Windows 执行该模式；Windows 预先初始化 MSVC。`portable` 的成功不代表 Native 成功。

省略 `HEAD` 可检查当前开发工作区。为检查将要提交的文件，可先显式暂存并审阅变更，运行 `git write-tree`，把输出的树对象哈希作为第三个参数。工具会将同一树对象记录到验证结果中。执行失败就停止，不生成成功摘要；格式或接口发生漂移时必须审阅修正后重新验证。

工具输出独立临时目录，保留各步骤日志、归档源码和成功时的 `result.json`，包含源码树、工具链、验证模式与实际执行的后端。格式和接口漂移检查只将 CRLF 规范为 LF 后比较，兼容 Git 的平台换行转换；其他空白和内容变化仍会失败，JSON/报告样例另由端到端流程检查。目录保留用于排错，不自动递归删除。CI 日志中的步骤、测试数量和最终结果是验收证据；仅存在 CI 配置不等于该版本已验证。

## 当前交付边界

源码快照验证还显式格式化全部受版本控制的 .mbtx 自动化脚本，并将其与执行前内容比较；可执行 Markdown 示例也纳入漂移检查。比较仍只规范 CRLF/LF，其他格式变化必须修正后重新验证。统一验收入口、每阶段证据和 CI 下载方式见 [验收索引](acceptance.md)。

- 公开 API 与 JSON 格式以 `pkg.generated.mbti` 和 `docs/formats.md` 及其链接为准；现有规范示例由端到端流程检查。变更格式或诊断类别时需补充回归测试并记录兼容性影响。
- 独立消费模块通过 `moon.work` 从源码接入，尚未发布 Mooncakes。禁止将未发布版本当作可直接从注册表安装的包。
- 数值价格事实、假设合同参数及依赖许可见 `SOURCES.md`；项目使用 Apache-2.0。当前不包含税、汇率、支付或完整供应商发票处理。
- 目录版本已支持全窗口结构迁移审查；价格变化的实际影响仍需可信用量回放。交付验证证明当前功能可复现，不把路线图当作已实现功能，也不自动保证评审结论。
