OSC 2026 · MoonBit 工程基础设施

moon_api_guard

把两次 .mbti 快照变成可阻断发布的兼容性信号:breaking / compatible / SemVer / CI。

打开交互式报告 Demo JSON Viewer 规则速查 mooncakes 文档 GitHub

它解决什么

MoonBit 包一旦发布到 mooncakes.io,下游依赖其公开接口。函数改名、返回类型变化、enum 增 variant 都会悄悄打断消费者。moon_api_guard 在发布前把这些变化变成明确信号。

CLI / CI

moon run cmd/main -- check old.mbti new.mbti
moon run cmd/main -- check-dir old_dir new_dir \
  --ignore-path '**/internal/**' --format html \
  --github-summary

策略文件

{
  "strict": false,
  "allow": ["variant-added"],
  "ignore": ["deprecated"]
}

支持 --policy,或自动发现仓库根目录的 moon_api_guard.json

报告形态

  • text / markdown / json / SARIF 2.1.0
  • 交互式 HTML(筛选 + 搜索 + 新旧签名)
  • GitHub Actions Job Summary

三分钟演示

  1. ./scripts/demo.sh —— 跑完整回归并生成 HTML
  2. 打开本页的 Demo Report
  3. 用筛选器只看 breaking,对照 SemVer advice

规则一瞥

变化默认detail
可选标签参数新增compatibleoptional-parameter-added
async / noraise 变化breakingasync-* / noraise-*
enum 增 variantbreakingvariant-added
enum variant payload 变化breakingvariant-changed
typealias / const 变化breakingalias-* / const-*

完整规则见仓库 docs/rules.md