# 版本追溯与性能护栏

## 用户可见的生成信息

网页页脚的版本、schema 和指纹来自 Worker 实际加载的 MoonBit 引擎；主线程兼容模式使用同一接口。JSON 分析、搜索、校验、导出和错误响应均带 generator，分析报告内部也保留，CLI 不会删除这些字段。

- name：MoonCam。
- version：来自 moon.mod 的包版本，与 package.json 一致。
- source_digest：生产 MoonBit 核心、桥接及模块配置的 SHA-256 内容指纹，换行统一为 LF。

source_digest 不包含测试、文档、网页宿主或编译器，不等于 Git 提交，也不保证不同后端二进制逐字节相同。复算仍需相同输入、工具链与后端。这些能力已进入 Mooncakes 0.4.0；同一包版本下仍请结合完整指纹识别。浏览器缓存了旧引擎时，显示的是旧引擎的身份，不以页面文字冒充新版本。

## 维护与构建

version.mbt 随源码提交，普通 MoonBit 消费者无需 Node 或 Git 即可使用。修改计算源码后先执行 moon fmt，再执行 node scripts/version.mjs --write，然后 moon fmt --check、moon info 和 npm run build。npm run build 与 CI 均检查元数据未过期；换行差异不影响指纹。仅修改文档或测试不改变引擎身份。

JSON schema 仍为 2，generator 是新增元数据，不改变已有判定与退出码。错误响应也可用于定位引擎版本。

## 确定性护栏

performance_wbtest.mbt 随四后端核心测试执行：

1. 4000 和 20000 条边的圆及窄椭圆，检查确定零交叉，并要求 pair_visits < 边数 × 100。窄轮廓覆盖分桶主轴选择；如果退回全边对扫描，该护栏会失败。这个界只适用于固定形状，不是所有轮廓的复杂度证明。
2. 128 段、名义分辨率 4000，验证段界保留后的点数范围，标量扫描不保留坐标；固定搜索应访问 32 个网格位置、返回 36 mm 候选并以 720 分辨率复核。它们守住可观察工作量和分配行为，不测每一次底层函数调用。

## 摘要固定负载

npm run performance:check 执行 4000 分辨率分析、128 段 × 4000 分辨率和基圆搜索。每项预热 3 次、测量 7 次取中位数；outputs 为空，不构造点表与导出字符串。耗时仍包含 JSON 解析、计算、拓扑及摘要序列化，不称为纯计算计时。

每项摘要小于 25000 UTF-8 字节，中位耗时小于 2000 ms，并核对计算成功、拓扑完成、点数或搜索结果。耗时门槛故意宽松，用于拦截严重退化；普通波动与较小性能变化查看 artifacts/performance-guard.json 的观测值，而不宣称全部退化都能自动发现。报告含引擎指纹、Node 版本和 CPU 信息，由 CI 保存。已有 npm run benchmark 继续记录全量与摘要输出口径。

新增验收包括 2 组核心测试、2 组版本集成测试及 1 组网页版本展示测试；既有浏览器兼容模式继续覆盖主线程运行。已发布 0.3.0 的历史测试数量保留在发行说明中。
