Go to file
dsadsasdaddas 212168fc43
CI / moonbit (push) Failing after 55s Details
Update GitHub Actions runtimes
Signed-off-by: dsadsasdaddas <wangyue20060908@gmail.com>
2026-07-10 07:54:52 +08:00
.github Update GitHub Actions runtimes 2026-07-10 07:54:52 +08:00
cmd/main Fix MoonBit release gates for pre-acceptance 2026-07-08 10:24:55 +08:00
docs Finalize Moon Proto Lab 0.1.1 submission 2026-07-10 07:52:34 +08:00
examples Harden contest review workflow 2026-07-08 11:23:51 +08:00
output/pdf Finalize Moon Proto Lab 0.1.1 submission 2026-07-10 07:52:34 +08:00
scripts Finalize Moon Proto Lab 0.1.1 submission 2026-07-10 07:52:34 +08:00
tests Finalize Moon Proto Lab 0.1.1 submission 2026-07-10 07:52:34 +08:00
.gitignore Harden contest review workflow 2026-07-08 11:23:51 +08:00
AGENTS.md chore: scaffold moon proto project metadata 2026-06-29 17:11:11 +08:00
CHANGELOG.md Finalize Moon Proto Lab 0.1.1 submission 2026-07-10 07:52:34 +08:00
LICENSE chore: scaffold moon proto project metadata 2026-06-29 17:11:11 +08:00
PROPOSAL.md Finalize Moon Proto Lab 0.1.1 submission 2026-07-10 07:52:34 +08:00
README.md Finalize Moon Proto Lab 0.1.1 submission 2026-07-10 07:52:34 +08:00
THIRD_PARTY_NOTICES.md Finalize Moon Proto Lab 0.1.1 submission 2026-07-10 07:52:34 +08:00
bytes.mbt Implement schema-driven protobuf runtime 2026-06-29 19:09:32 +08:00
codegen.mbt Add protobuf JSON enum name mapping 2026-06-30 12:38:27 +08:00
error.mbt Implement schema-driven protobuf runtime 2026-06-29 19:09:32 +08:00
field.mbt Add float double conformance fixtures 2026-06-29 21:57:33 +08:00
fixed.mbt Implement schema-driven protobuf runtime 2026-06-29 19:09:32 +08:00
golden_wbtest.mbt Fix MoonBit release gates for pre-acceptance 2026-07-08 10:24:55 +08:00
json.mbt Fix MoonBit release gates for pre-acceptance 2026-07-08 10:24:55 +08:00
moon.mod Finalize Moon Proto Lab 0.1.1 submission 2026-07-10 07:52:34 +08:00
moon.pkg Fix MoonBit release gates for pre-acceptance 2026-07-08 10:24:55 +08:00
parser.mbt Fix MoonBit release gates for pre-acceptance 2026-07-08 10:24:55 +08:00
pkg.generated.mbti Fix MoonBit release gates for pre-acceptance 2026-07-08 10:24:55 +08:00
runtime.mbt Fix MoonBit release gates for pre-acceptance 2026-07-08 10:24:55 +08:00
schema.mbt Add enum alias validation support 2026-06-30 11:32:51 +08:00
validation.mbt Fix MoonBit release gates for pre-acceptance 2026-07-08 10:24:55 +08:00
varint.mbt Implement schema-driven protobuf runtime 2026-06-29 19:09:32 +08:00
wire.mbt Implement schema-driven protobuf runtime 2026-06-29 19:09:32 +08:00
zigzag.mbt Implement schema-driven protobuf runtime 2026-06-29 19:09:32 +08:00

README.md

Moon Proto Lab

CI Mooncakes MoonBit License

Moon Proto Lab 是面向 MoonBit protobuf 生态的 schema 验证、兼容性检查与 AI 代码验证工具链。

它把 .proto 从“看起来正确的文本”变成可诊断、可生成、可编译、可回归、可报告的工程资产:

.proto -> Schema Doctor -> compatibility check -> dynamic binary/JSON runtime
       -> MoonBit codegen -> generated-code compile -> Markdown/JUnit/CI evidence

本项目不替代现有的 moonbitlang/protobufmoonbitlang/protoc-gen-mbt。它提供的是围绕官方 protobuf 栈的验证与工具层,重点解决 AI 生成 schema/代码难以确认、schema 演进容易破坏兼容性、生成代码缺少持续验证等问题。

30 秒快速开始

作为 MoonBit 库安装

moon add 123123213weqw/moon_proto

在使用该库的 moon.pkg 中导入:

import {
  "123123213weqw/moon_proto" @proto,
}

最小示例:

fn main {
  let encoded = @proto.encode_varint_u64(300UL)
  println(encoded.length()) // 2
}

使用完整验证工具

git clone https://github.com/123123213weqw/moon_proto.git
cd moon_proto

# 检查 AI/人工生成的 schema
python3 scripts/moon_proto_lab.py doctor examples/ai/good_order.proto

# 完成 doctor、inspect、codegen、生成代码编译并输出报告
python3 scripts/moon_proto_lab.py verify \
  examples/ai/good_order.proto \
  --report generated/verify_report.md \
  --junit-out generated/verify_report.xml

# 检查 old/new schema 是否兼容
python3 scripts/moon_proto_lab.py compat \
  examples/ai/good_order.proto \
  examples/ai/good_order_v2.proto \
  --report generated/compat_report.md

完整本地验收:

bash scripts/release_gate.sh

运行要求MoonBit文件版报告工具需要 Python 3完整跨语言 oracle 还需要 Python protobuf 与 Go。

Agent 反馈闭环

下图展示 AI Agent 生成 schema 后Moon Proto Lab 如何返回稳定诊断并驱动修复。它是工作流说明图;后面的终端图来自仓库真实命令记录。

Agent feedback loop demo

实际运行证据

每张图都有同名 .txt 命令记录,可核对命令、工作目录、时间和退出码。

Actual release gate run ending with PASS

Actual schema-aware JSON roundtrip CLI run

补充证据:moon test --target allmoon packageSchema Doctor 负例

核心能力

能力 当前实现
Wire/runtime varint、zig-zag、fixed32/64、length-delimited、unknown-field skip
Schema proto3 message、enum、optional/repeated、map、oneof、reserved、nested type、常见声明容错
动态消息 descriptor-driven scalar、repeated、packed、enum、nested、map、oneof 二进制编解码
Protobuf JSON enum name、64-bit integer、base64、Unicode、lowerCamel、map key normalization、严格数字语法
Schema Doctor 字段号/名称冲突、enum 规则、map 约束、reserved 复用等稳定诊断
兼容性检查 old/new .proto 与 FileDescriptorSet 的破坏性变更检查
Codegen MoonBit struct、enum、descriptor、动态 runtime helper并执行真实 moon check
工程证据 Python/Go oracle、建模的 conformance-lite 用例、官方接口契约检查、Markdown/JSON/JUnit 报告
Registry adapter descriptor registry、release policy、文件/HTTP/profile/GitHub Contents 适配验证

一个完整场景

故意错误的 schema

syntax = "proto3";
message Order {
  reserved 7;
  reserved "legacy_note";
  uint64 id = 1;
  string duplicate = 1;
  bytes legacy_note = 7;
  map<bytes, string> invalid_labels = 8;
}

运行:

python3 scripts/moon_proto_lab.py doctor examples/ai/bad_order.proto

输出包含稳定路径:

schema invalid
issues: 6
message.Order.field.1: duplicate field number
message.Order.field.invalid_labels.key: invalid map key type
message.Order.field.legacy_note.number: field uses reserved number
message.Order.field.legacy_note.name: field uses reserved name

修复后再执行 verifycompat生成代码必须真实编译schema 演进也必须通过兼容性门禁。

MoonBit API 示例

let desc = @proto.MessageDescriptor::{
  name: "User",
  fields: [
    @proto.FieldDescriptor::{
      name: "id",
      typ: @proto.UInt64Type,
      number: 1,
      label: @proto.Singular,
    },
    @proto.FieldDescriptor::{
      name: "name",
      typ: @proto.StringType,
      number: 2,
      label: @proto.Singular,
    },
  ],
}

let msg = @proto.message_value([
  @proto.message_field("id", @proto.UInt64Value(150UL)),
  @proto.message_field("name", @proto.StringValue("Alice")),
])

let encoded = @proto.encode_message(desc, msg)

验证与质量

当前提交线的可复现结果:

  • moon check --deny-warn:通过;
  • moon test --deny-warn60/60 passed
  • moon test --target allwasm、wasm-gc、JS、native 全通过;
  • MoonBit 核心包行覆盖率:1935/2388,约 81.0%
  • generated-code compile check通过
  • Python/Go protobuf oracle通过
  • AI schema 正例、兼容演进与故意错误负例:通过;
  • GitHub Actions通过。

常用命令:

moon fmt --check
moon info
moon package --list
moon check --deny-warn
moon build
moon test --deny-warn
moon test --target all
moon coverage analyze -p 123123213weqw/moon_proto -- -f summary
tests/codegen/compile_generated.sh

与现有 MoonBit protobuf 项目的关系

MoonBit 生态已有:

Moon Proto Lab 的独立贡献是:

  1. 在生成前检查 schema并为 AI 输出提供稳定诊断;
  2. 在 schema 演进时检查字段号、类型、reserved 等兼容性合同;
  3. 在生成后真实编译 MoonBit 代码,而不是只做文本快照;
  4. 使用 Python/Go oracle 与 MoonBit golden tests 验证 wire/JSON 行为;
  5. 输出适合 CI、代码审查和 Agent 消费的 Markdown/JSON/JUnit 证据。

已知边界

当前版本是面向验证场景的 proto3 子集,不宣称完整 protobuf conformance

  • servicerpc、custom option 等主要做解析容错,不生成完整 RPC 实现;
  • typed struct 的生产级 encode/decode 能力不替代官方生成器,核心验证路径使用动态 MessageValue
  • conformance-lite 是基于公开 protobuf 语义建模的小型 fixture 集,不是上游官方 conformance suite 的镜像;
  • official source/output-shape contract 检查验证公开接口契约;只有显式启用 live-generator 路径时才会实际运行官方生成器;
  • FileDescriptorSet、报告和 registry adapter 目前由 Python 集成层承载MoonBit 核心实现集中在 parser/runtime/JSON/codegen/compat CLI。

文档

仓库与发布

License

项目原创代码采用 MIT License。第三方依赖、公开规范、测试 oracle 和契约 fixture 的来源与许可证见 THIRD_PARTY_NOTICES.md