最后核对:2026-10-08(jsonmbt 合流批补登——§1.1 表 +3 行〔.json.mbt static gate / Build jsonmbt / Regenerate truth-source〕+ §2 加 scripts/jmemit 条〔五套 digest freeze 循环 emitter + round-trip〕;前一沿革 2026-10-07(#27 图标批三脚本补登 + protocol_frames 基线 33 帧——gen_icons/icon_catalog/gen_icon_preview 入册〔#47 对照义务抓补〕;前一沿革 2026-10-06 #49 批一:§1.1 core 段 + §1.2 gateway 行 + §2.1/§2.5 各入统一 CLI 闸与壳/launcher 行——
vitro_cli_smoke双臂同形对拍〔wasm 壳 vs native exe〕随 core job 接入,CI 步自建 cmd/vitro。前一沿革 2026-10-05:S9 工序④删区对齐——Rust oracle 物理删除后整册重对齐:§1.1 表删 Rust 全量测试 / clippy / shadow ×2 / ci_three_tier_check / wasm32 出口守护 / engineering_health / target 体积 / coverage 八类死步骤行,§1.2 删 Rust 侧必跑行、语料路径native/tests/cases→corpus/,§1.3 语料真值改 facts 机判(603),§2.1 删五个死脚本行 + gen_capi_bindings 标 CI 退役、vm_diff 对拍锚改冻结 golden、serve_smoke/replay 双臂改单臂、protocol_frames 单臂基线比、host_contract_map 改冻结名册,§2.3 五探针随core_asset_verdict/退役改历史注记,§2.6 Python 残留已随删区全删改历史注记。前一沿革 2026-10-03:三 job 拆批——core/moonbit/hygiene 并发 + concurrency 防连坐;再前 2026-09-22 建册)用法的权威源是各脚本自身的头注(
.go/.mbtx/.js文件头部注释, 含用法、口径、J9 埋雷记录)——本清单是一级索引与必跑规定,不复制用法细节; 头注与本清单冲突时以头注为准并回改本清单。背景问题(2026-09-22 盘点结论):脚本此前散落三处记载——多数只在历史裁定 / 工作记录 中被提及一次,
toolchain_probe/docs_preview/gen_cases.py/safe_run.ps1四个 全仓零记录,"哪些测试必须跑"无集中规定(散在 CI 与两份分区手册),用法手册全部写在.go头注里。本册收口。
一、必跑测试规定
1.1 CI 全集(push / PR 自动执行,等价"必须全绿")
权威源 = .github/workflows/ci.yml(2026-10-03 拆批起
core + moonbit + hygiene 三 job 并发 + portability 跨 OS 探路 job;
连续 push 由 workflow 级 concurrency 组取消过时 run;夜间 schedule(cron 0 18 * * *)
对 clang_direct 强制 --refresh-clang 全量重算防 Clang Golden 漂移;
2026-10-05 删区批拆臂后 core 42 步 / hygiene 16 步)。
job 分类(判据一句话:红了是否意味着「这一批提交不能要」):
core(准入型,Windows):引擎行为与协议契约坏了——对拍差分族(lexer/parser/ typeck/codegen 差分 + vm_diff 冻结 golden 三联 + clang_direct Clang 直拍 + libc_boot_diff digest 化)、协议三件(replay / serve_smoke / protocol_frames)、 unified CLI smoke(wasm 壳 vs native exe 双臂同形对拍——#49 批一起接入)、 clang golden 全量等。红了立即处置,当天清。moonbit(准入型,2026-10-03 自 core 并发拆出):MoonBit 侧引擎与契约——moon test、 静态对账闸族(surface/pkg_deps/mbti_sync/single_source/libc_single_source/host_route/ source_hygiene/gen 族/gen_protocol_ts/testcount,秒级 fail fast 先行)、serve 单臂、 teaching diff、wasm-gc/demo 族。只含零 Rust 构建依赖的步骤,~8 分钟独立报红 (拆分动机:surface 等秒级闸的红此前要陪跑 cargo 链等满 19 分钟才暴露——9981ac2 三笔连红实证)。hygiene(记账型,needs: core +if: always()防连坐——2026-10-03:core 红时照跑, 此前 gofmt 漂移因连坐 skip 积压无人见):账没跟上而非代码坏——precompile 产物新鲜度、 toolchain_probe(工具链追新是既定策略,红 = 该走迁移手册)、perf_budget(裁决规模 前提过期待重估)、moon fmt 漂移、facts 文档对账(白天改代码文档滞后的时序差 在此显形)、gen_svg 插图新鲜度。白天推进时属预期债, 夜间批量复绿,不阻塞推进。portability(跨 OS 探路,ubuntu,独立):三 target moon test + linux 链接形态探路 (红面不阻塞发版判断,就地进行归因)。
删区注记(2026-10-05):原 core 的 Rust 本体臂(cargo build/test/clippy/coverage)、 被测物为 Rust DLL 的 shadow ×2、ci_three_tier_check、wasm32 出口守护与 target 体积步 已随工序④整体移除;原「oracle 臂消费 Release vitro_cli」的对拍管道全部切换为 冻结 golden(工序③固化锚) 或 Clang 直拍 真值。
下表的"CI 步骤"列不标注归属(以上清单为准);本地提交前口径见 §1.2。 脚本门禁步骤与其拦截对象:
| CI 步骤 | 命令 | 拦什么 |
|---|---|---|
| Bytecode Libc 产物校验 | go run ./scripts/precompile_bytecode_libc --check |
改了 scripts/moonbit/libc_src/**(原 native/runtime_libc/src/*.c 迁入)忘了再生成嵌入产物——工序④后形态 = 冻结完整性闸(源↔产物 digest 静态校验;--check 幂等) |
| go vet | go vet ./scripts/... |
scripts 侧(含 unsafe.Pointer 误用) |
| go test(scripts) | go test ./scripts/... |
scripts 侧 J9 / 性质测试(归一性质锚 / CLI 契约锚 / 基线判定锚 / facts 契约 / docs_preview) |
| Clang 直拍(层 2) | go run ./scripts/clang_direct --check-known + 全量 |
引擎 vs Clang 本尊(真值源 = Clang,非 oracle):stdout + 返回码;known_direct.json 白名单 case+digest 锁定双向监控(防线吸收 shadow,2026-10-05) |
| 实机勘探金样本合规 | go run ./scripts/realcode_diff/vitro_clang_diff.go -check(2026-10-02 fork 方案:外置语料基线 = rustin-beep/C 默认分支 vitro-probe-baseline〔上游 TheAlgorithms/C@e5dad3f + 89 文件探针态,GPL 红线不进本仓〕;勘探/聚合两模式与重建配方见该目录 README 与 skill;勘探运行不接 CI——维持拍板) |
金样本 schema/值域/码形态/provenance 四道失守(诊断文案透传即 GPL 渗漏) |
| teaching 标注族级对拍 | go run ./scripts/teaching_annotation_diff(cmd/serve vs golden 标注首现序列比对——按已迁移族过滤〔rules.json 外置迁移集+豁免+僵尸审计〕,双向模板集断言;前置 moon build --target native cmd/serve;golden 已迁出冻结区(工序③固化),sha 对账自持) |
已迁移族标注首现漂移 / serve 检测-推断链路回归 |
| serve 协议冒烟 | go run ./scripts/serve_smoke(MoonBit 臂——cmd/serve exe,31 通过 + 12 豁免〔2026-09-29 quarantine 通道销两条后;总数不裸写以免 facts 误比〕,豁免面外置 moonbit_exemptions.json;Rust 臂已随删区退役) |
出口 3 JSON-lines 协议契约破坏 |
| wasm-gc 网关冒烟(wasm-gc 单出口) | node scripts/wasm_gateway/host.js(需先 cd moonbit && moon build --release --target wasm-gc gateway/wasm) |
gateway 4 导出面 / E3070·E3061 真 trap / ENGINE_VERSION↔moon.mod 失联 / 体积上限回归 |
| 回放断言 | go run ./scripts/replay |
S1–S5 协议断言(帧序列主锚;含 J9 selftest;-moonbit 臂为现役——Rust 臂随删区退役) |
| 全量 native release 构建门 | cd moonbit && moon build --release --target native(唯一豁免:gateway +native 的 LNK1561,见实录 §12.6;拆包修法落地后删豁免分支) |
「声明了 supported_targets 却没有任何 CI 步骤构建它」——gateway 的 +native 即如此漏过(CI 只构建其 wasm-gc 形态);全量 native 是唯一遍历每个包的形态,任何新增同类失败即红 |
moon 工具链安装 + moon update |
— | (环境准备) |
| MoonBit 单元测试 | cd moonbit && moon test |
MoonBit 侧全部测试(退非 0 即红) |
| 词法差分 | go run ./scripts/lexer_diff(core 差分段四语料) |
L1/L2 双层 TSV 逐字节 |
| 解析差分锚 | go run ./scripts/parser_diff --pathological / --legal-deep / --threshold |
E3 病态拒绝 / E4 深嵌套反向锚 / 阈值形状 |
| 类型检查差分 | go run ./scripts/typeck_diff corpus/{baseline,knr,leetcode,gap} |
E1–E4 归一不一致 |
| codegen 差分 | go run ./scripts/codegen_diff(骨架面 + 四语料) |
A 级 14 键逐字节不一致(CONTENT-DIFF 永不计豁免)+ 槽位策略版本与 scripts/codegen_diff/slot_strategy.json 期望不符(空集亦红) |
| 运行期对拍(层 1) | go run ./scripts/vm_diff(前置 cd moonbit && moon build --release --target native cmd/run) |
引擎 vs 冻结 golden(工序③固化锚,原 Rust oracle 三联)三联 diff:stdout / 返回码 / 1MB 映像逐字节(known+skip 白名单 case+digest 锁定双向监控) |
| 工具链健康探针 | go run ./scripts/toolchain_probe |
moon 工具链静默升级 / registry 索引缺失 / ICE(A8 自动化) |
| vendored 上游漂移探针 | go run ./scripts/moonbit/vendor_drift |
moonbit/fs(vendored 自 moonbitlang/x@0.5.5)的上游漂移——内容哈希主口径(版本号仅报告:实证过内容变而 version 不 bump);红 = 评估令非自动同步令;exit 2 = 网络无法判定 |
| 对外面审计 | go run ./scripts/moonbit/moonbit_surface(2026-10-04 修默认模式假绿:曾提前 return 跳过全部对账恒 exit 0——本地裸跑拿到查看输出误判绿,CLI 批 36 边差实锤;现默认与 -check 同强度,旗标保留兼容) |
无主 pub 未收面 / 跨包消费边未登记(面扩张即红) |
| libc 三表单源对账 | go run ./scripts/moonbit/libc_single_source -check |
libc 放行集与 host 路由 / bytecode 索引两表分叉(等式 + 交集计数 + PURE 子集;空集不得绿) |
| 包依赖方向 | go run ./scripts/moonbit/pkg_deps -check |
越层依赖 / 依赖成环 / 新包未登记分层(外置表 = 总计划 §4 L0–L9) |
| .json.mbt 静态门禁 | cd scripts && moon check(scripts 自立 workspace) |
16 张 .json.mbt 真相源的类型/字段/保留字错(编译期红;J9 毒化 rc=127 实证) |
| jsonmbt 真相源再生 | clone rustin-beep/jsonmbt master 现构建(试毒模式)+ 13 张 jsonmbt build --pretty 再生 |
.json.mbt 非法即红(J 码系);再生 .json 不入仓(gitignore 遮蔽) |
| freeze 循环 emitter | scripts/jmemit(五驱动 --freeze-mb 内部调用,无独立 CI 步) |
emit + build + round-trip 语义对拍绿才入账(fail loud) |
| 存量重算 | 五驱动 --freeze-mb --refresh(2026-10-10 #10 批新增;vm_diff/typeck_diff/parser_diff/codegen_diff/lexer_diff 五处同形态) |
存量例指纹随现状重算覆盖——存根声明注入/引擎重构致产物漂移的活通道(--freeze 主通道需已删 oracle,此前存量漂移只能「先删旧键重跑」手工绕);单独 --refresh 拒(仅入账面组合);J9 三连证红在案(typeck_diff:注入坏 hash → 裸跑红 → refresh → 绿) |
| libc 自举对拍 | go run ./scripts/moonbit/libc_boot_diff |
MoonBit library mode 编译 libc 源(scripts/moonbit/libc_src/)与冻结 golden 产物不一致(digest 化:freeze/golden/自动降级;3 例投影 hash + J9——工序④删区批形态切换) |
| 单一真相源清单 | go run ./scripts/moonbit/single_source -check |
单源长出第二份实现 / 单源被删改名(判据 C-04) |
| 接口面同步 | go run ./scripts/moonbit/mbti_sync -check |
.mbt 实现与 pkg.generated.mbti 接口面脱节(跑 moon info 前后快照不等;空集不得绿) |
| 性能假设预算 | go run ./scripts/perf_budget -check |
性能裁决所依赖的规模前提过期(如 typeck O2 债的语料 struct 规模超预算 ⇒ 裁决须重估) |
| 协议 TS 类型 | go run ./scripts/gen_protocol_ts -check |
protocol/index.d.ts 陈旧 / MoonBit 生成源与 schema 文档字段集不一致(双向对账;原第三向 Rust oracle 过渡臂已随清理批移除) |
| TS 首个消费者 | node protocol/consumer.mjs |
生成物描述不了真实引擎输出(字段级校验;需先构建 release 引擎) |
| moon fmt 漂移 | moon fmt 后 git diff --exit-code |
格式漂移 |
| 文档事实对账 | go run ./scripts/facts --strict check |
文档数字 / 常量 / 脚本路径引用与机器真值漂移(退役键经 retiredKeys 豁免待采集,僵尸条目无条件红) |
| 测试数三向对账 | go run ./scripts/moonbit/testcount |
moonbit/README.md ↔ README.mbt.md ↔ moon test 实跑值分叉(v2 真值 = 闸内自跑 moon test,非 facts cached 复述;拦「文档测试数与实跑漂移」) |
| protocol 字段白名单 | go run ./scripts/moonbit/gen_protocol_fields -check |
scripts/replay/v01_payload_fields.json ↔ 产物 protocol/schema_fields_gen.mbt 漂移(JSON 生成期真单源;白盒硬编码锚为测试期第二层) |
| Host 契约对账 | go run ./scripts/host_contract_map --selftest && --strict |
103 条冻结名册(rust_contract_names.json,删区前自 Rust host_contract_tests.rs 标签提取)↔ MoonBit 锚(host/memory/vm 三包)三态映射无洞 / 锚引用无陈旧 / anchored 1:1 对齐(CI 已切 --strict 收官门) |
| serve 协议帧字段级冻结 | go run ./scripts/protocol_frames(固定请求序列 48 帧 → canonicalize → mask(rules.json 外置)→ 入库基线 baseline.jsonl 逐帧比对;--diff-hosts 互比 / --update-baseline 人工令 / --selftest J9) |
帧字段漂移——现役单臂基线比(oracle 臂退役形态预置已生效,2026-10-05 删区;47 帧 = #27 批三 33 帧后,二轮审阅处置批 2026-10-09 补 trap step 流 14 帧〔#35 trap 帧冲刷发布 + is_trapped 守卫形态帧级锚;--update-baseline 冻结、双臂绿、突变证红〕) |
| demo 页协议冒烟 | node scripts/demo_smoke/main.js(需 wasm-gc 产物,参数 --wasm 可指路径;step 族字段契约——StepPayload 顶层十四字段键集全等 + LocalVar/CallFrame/ArraySnapshot 必备键,累积推批形态〔首批可为空〕) |
cases.js 预置用例 golden 逐字节漂移 / 页面渲染所需响应字段缺失 / step 族 wire 键集漂移 |
| demo UI 字符串契约对账 | go run ./scripts/demo_ui_lint(-selftest 四类证红接 CI 同步步;规则外置 rules.json,僵尸条目无条件红;logo 双份一致性闸〔demo/assets ↔ assets 分叉即红〕;TS 泛型抽取分支〔$<T>("id") 形态〕+ selftest 泛型回归锚) |
JS↔CSS 字符串契约三路:classList 写操作类名(CSS 复合单元 ∪ JS 生成面 ∪ 元素候选闭包对账——抓「操作永不生效的类」,stdin-row .active 实锤)/ var(--x) 引用未定义(带回退引用按 CSS 语义放行)/ $("id") 静默 null(含 TS 泛型形态) |
| skill 手册引用路径存在性 | go run ./scripts/skill_path_check(-selftest 九路注入证红接 CI 同步步;规则外置 rules.json:白名单前缀 / dead_paths 退役·反例语境死路径〔精确匹配,新增须写明语境〕/ skip_files 只追加历史日志 / min_hits 下限守卫防抽取面塌缩) |
.agents/skills/** 内仓库路径引用(围栏代码块 + 行内反引号,首段 = 仓库根一级条目;变量/占位符段截断取静态前缀)必须实存——缺陷形态 03 E11/E13 同族面「手册改写引用面按脑测填迁移目标」的机判面;首跑 11 处缺失全数定性(2026-10-07 接线) |
| demo 组装资源自检 | node scripts/demo_assemble_check/main.js <目录> [--no-ts](pages.yml 内联版正则要求 src="./..." 而 HTML 实写 src="cases.js" 的历史坑已单源化修复;ci.yml〔demo/ 原地发射面〕与 pages.yml〔demo-dist 发布面〕双接) |
index.html script/img 面 + 入口产物 import 面逐项存在性(拷贝面缺口——历史白屏形态)/ HTML 抽取面哨兵(正则退化即红)/ --no-ts 发布面禁源(.ts 不随产物发布) |
| demo 算法侧栏数据生成 | go run ./scripts/gen_demo_algorithms(产物不入库——与 demo/js/*.js、wasm.wasm 同形态,ci.yml〔demo 段〕与 pages.yml〔组装段〕消费前现场发射,发射即闸;43 教学标注族导航数据——机判产物非逐项手画;分组并集断言 = rules.json 43 族,漏/多/错名即红) |
三真值源完备性(发射期断言即红):rules.json(族全集)/ golden(模板→族映射 + display_name)/ detect_*.mbt(extra 族中文名 build_match 提取)/ templates + extra 源(示例源码)——配套 demo_smoke 侧栏数据断言(族集对账 + 43 源 compile 全 ok + 三源命中抽验) |
| 文档 SVG 新鲜度 | go run ./scripts/gen_svg -check |
落盘 SVG 与生成器输出不一致(生成器改了 / 手改了入库 SVG) |
文档数字统一格式规范(2026-09-26 用户裁定,一次铺设长期免维护):需维护文档中一切"非当前真值"的数字句,写法必须命中 facts 既有冻结判据,三条——① 实测记录句必带日期(YYYY-MM-DD,如"实测时点(2026-09-26)433/433");② 历史对照/计划目标句必带时点词(截至 / 彼时 / 当时 / 历史(facts as-of 词表),如"截至 1.0 目标:758 用例");③ 外部项目事实(第三方仓库的测试数/行数等)不写入需维护文档的正文陈述——确需留档的调查记录整份走豁免白名单 scripts/facts/exempt_docs.json(path+reason 必填,条目指向不存在文件即红;J9 已证红)。规范效果:facts check 与 --strict 双模式全绿,此后无需再为对账调整写法或改脚本。
1.2 本地提交前必跑(按改动区域——此前无此规定,本表为裁定成文)
| 改了什么 | 提交前必须跑 |
|---|---|
moonbit/ 任意 |
cd moonbit && moon check → moon test → moon fmt |
moonbit/ 生成物源(diag 码表 / host 路由 / libc 存根头 / protocol 字段白名单 / diagnostics 数据层四表) |
对应 go run ./scripts/moonbit/gen_diag / gen_host_route / gen_stubs / gen_protocol_fields / gen_diagnostics 再生成(各带 -check 幂等门禁;产物禁手改;gen_diag 与 gen_diagnostics 的输入 = scripts/moonbit/diagnostics_data/ JSON 真源〔#39 迁出冻结区 2026-10-05——改文案/码表改 JSON 再重生成;原 Rust .rs legacy 对账臂已随删区到期移除〕) |
scripts/moonbit/libc_src/**(原 native/runtime_libc/src/*.c) |
go run ./scripts/precompile_bytecode_libc(再生成)+ git add 产物 |
moonbit/protocol/、moonbit/session/、moonbit/gateway/ 或 moonbit/cmd/serve |
go run ./scripts/replay + go run ./scripts/serve_smoke + go run ./scripts/vitro_cli_smoke(gateway 出口/note 通道改动的双臂同形快锚——需 wasm-gc 与 cmd/vitro 两产物在位) |
moonbit/ 公共 API(pub 符号) |
go run ./scripts/moonbit/moonbit_surface -check(新对外面必须收面或入白名单 + 消费边登记) |
moonbit/libc 放行集 / codegen host 路由 / bytecode libc 索引(任一改动) |
go run ./scripts/moonbit/libc_single_source -check(三表分叉即红;合法变更须同步 scripts/moonbit/libc_single_source/rules.json 后复跑,禁改判定代码) |
moonbit/**/moon.pkg(import 块)或新增包 |
go run ./scripts/moonbit/pkg_deps -check(越层/成环/未登记分层即红;合法变更须同步 scripts/moonbit/pkg_deps/rules.json 的 levels) |
scripts/moonbit/libc_src/** 或 moonbit/codegen 的 library 路径 |
go run ./scripts/moonbit/libc_boot_diff(自举等价性 digest 校验) |
单源清单里任一条目涉及的代码(见 scripts/moonbit/single_source/rules.json 的两侧位置) |
go run ./scripts/moonbit/single_source -check(新增同名单源实现即红;合法变更须同步 rules.json 的 allowed_def_files) |
moonbit/**/*.mbt 的 pub 面(pub fn / pub type / pub const 增删改) |
go run ./scripts/moonbit/mbti_sync -check(接口面脱节即红;闸会顺手同步 .mbti,红完一并提交即可) |
语料新增 / 扩展(corpus/ 下 .c 增补,尤其 struct 密集或成员访问密集的大程序) |
go run ./scripts/perf_budget -check(超预算即红,指向被推翻的性能裁决;合法变更须同步 scripts/perf_budget/rules.json 的 max_per_file 并复核裁决);完整义务链见 Agent Skill vitro-baseline-corpus-workflow |
moonbit/protocol/types.mbt 的 StepPayload 家族类型、或 docs/spec/STEP_PAYLOAD_SCHEMA_V0_1.md 的字段表 |
go run ./scripts/gen_protocol_ts(再生成)→ -check(幂等 + 双向对账:MoonBit↔文档);改任一方向都须重跑,产物 protocol/index.d.ts / fields.mjs 禁手改 |
| `moonbit/lexer | parser |
| moon 工具链升级 | go run ./scripts/toolchain_probe --update-baseline + 全部门禁(迁移义务见探针头注) |
moonbit/fs/ vendored 文件(上游跟进批:人工评估后手工同步) |
同步后 --update-baseline 迁基线 + cd moonbit && moon test + go run ./scripts/vm_diff + go run ./scripts/clang_direct 全量复跑(处置流程见唯一依赖清除路线 §3B-4) |
scripts/(Go 驱动) |
go vet ./scripts/... → go build ./...;判定型驱动加 --selftest 证红(J9 义务,见脚本埋雷验证记录);动真值采集 → go run ./scripts/facts check |
demo/ 页面三件套(index.html / app.js / style.css)或 cases.js |
node scripts/demo_smoke/main.js --wasm demo/wasm.wasm → go run ./scripts/demo_ui_lint(UI 批后另须浏览器明暗双主题+多 tab 截图验收——CSS 层布局问题无静态闸,浏览器实测是唯一防线);改 demo/ 文件布局(增删目录/模块)时连坐 pages.yml 组装拷贝面 + 组装自检闸(2026-10-04 拆分批实锤:cp demo/*.js 通配不含 js/ 子目录,线上白屏且本地/双闸均不可见——组装自检 [脚本/import 资源存在性] 是唯一拦点) |
| 文档(含 SVG 插图数字) | go run ./scripts/facts check(红了改数字或跑防线刷新真值);SVG 插图红 → go run ./scripts/gen_svg(禁手改 data-fact 锚定数字) |
moonbit/ 建包 / 退役(包目录增删)或 moonbit/moon.mod 版本 bump(S 收官批 / 发版批连坐义务) |
go run ./scripts/facts(刷 moonbit_built_packages / moonbit_engine_version)→ go run ./scripts/gen_svg all(包切分图实/虚线与在架徽标由 facts 派生,随批重生成;CI hygiene -check 兜「忘了重生成」——2026-09-28 前包图徽标为静态字符串,S6 收官 / S7 开工连续两批漏更即此教训) |
moonbit/ 测试增删,或 moonbit/README.md / README.mbt.md 的测试数陈述 |
go run ./scripts/moonbit/testcount(三向对账;README 数字连坐) |
scripts/replay/v01_payload_fields.json 或 moonbit/protocol/schema_fields_gen.mbt |
go run ./scripts/moonbit/gen_protocol_fields(再生成)→ -check;JSON 源变 → 产物连坐 |
templates/ |
语料义务链(模板→corpus 用例→Clang golden,见 Agent Skill vitro-baseline-corpus-workflow)+ go run ./scripts/gen_demo_algorithms(demo 侧栏数据消费 templates) |
1.3 语料真值口径(2026-09-22 定;2026-10-05 删区批起 facts 机判 + corpus 路径)
四语料真值由 facts 机判(c_e2e_{baseline,gap,knr,leetcode}_cases 四键,count_dir
口径扫 corpus/;2026-10-05 实测 367 + 17 + 81 + 138 = 603)。
codegen_skeleton 另计 13(骨架快失败面,不入四语料);C++ 语料 83 个 .cpp
(corpus/cpp/,随砍 C++ 拍板冻结;原 native/tests/cases 已于删区批整体迁入 corpus/)。
引用任何语料数前先数目录(本仓文档数字的历史漂移高发区):
for d in baseline gap knr leetcode; do echo -n "$d "; ls corpus/$d/*.c | wc -l; done
历史执行记录里各片收官时的语料数是收官时点的 as-of 快照,不是当前真值;CURRENT 文档陈述"当前语料数"时以 facts 键为准(机判后连坐口径已从「不做机器对账」翻转为 count_dir 自动采集——2026-10-05 删区批起,过期即红)。
二、脚本总清单
语言政策(原
native/AGENTS.md脚本节裁定,2026-09-12 起;该手册已随 2026-10-05 删区退役,裁定内容以本册为权威载体): 判定型 / 会再跑的脚本默认 Go,零第三方依赖、规则外置 JSON、fail loud; 唯一例外是一次性脚本(用完即弃的取证 / 探针,裁定 §13.7 明确不迁移)。 共享口径只允许落scripts/internal/(capi/pyrandom/probeutil/canonicalize),禁止复制 helper。
2.1 CI 门禁驱动
| 脚本 | 语言 | 用途(一句话) | CI |
|---|---|---|---|
scripts/serve_smoke/ |
Go | 出口 3 serve JSON-lines 协议冒烟(RSS 预算护栏;豁免表外置 moonbit_exemptions.json——J9 双路证红在案;原 -moonbit 双宿主臂的 Rust 臂已随删区退役,MoonBit 臂为现役) |
✅ |
scripts/vitro_cli_smoke/ |
Go | 统一 CLI 入口闸(#49 批一,2026-10-06):wasm 壳四子命令 rc 契约 9 断言 + 双臂同形对拍(scripts/vitro_cli/main.js vs native cmd/vitro exe,三用例逐行一致——唯一剥离 backend 标注行,零 canonicalize 特例)+ launcher 双形态语义;J9 证红(篡改壳 note 前缀→对拍红)留痕;CI 步随带 cmd/vitro native 构建(core job 此前从不构建);批二段三扩:--corpus N 语料级对拍(373 例全量本地同形)+ 1MB 映像对拍(memory.dump 帧链路);vm_diff/clang_direct 加 --backend wasm 插座(被测物 = 统一入口壳,CI 两臂并行全量——主出口产物实证面搬家);批三段一:壳补 serve 子命令(NDJSON 会话——shutdown 判停/EOF/空行回错误帧与 cmd/serve 同形)+ replay/serve_smoke/protocol_frames wasm 臂(--backend wasm/--backend-wasm;serve_smoke 豁免表 wasm_assertions 段臂分家——墙钟恒 0 与 RSS 宿主基线两形态差带实测理由入账;CI 三步接入) |
✅ |
scripts/replay/replay_s1_s5.go |
Go | S1–S5 协议回放断言(帧序列主锚,--selftest J9);-moonbit 臂(2026-10-04 接)——cmd/serve 同一断言集,首跑 61/61(PASS 59 + 永久豁免 2),豁免面 scripts/replay/moonbit_exemptions.json(主跑即审计:PASS 即 ZOMBIE 红,D19 内联化——比 serve_smoke 的独立 audit 步骤严一档);CI moonbit job 接线(exe 与 serve smoke 同源零重建);Rust 臂随删区退役 |
✅ |
scripts/precompile_bytecode_libc/ |
Go | Bytecode Libc 预编译嵌入产物——工序④后形态 = 冻结完整性闸(源↔产物 digest 静态校验,算法历史同源;J9 源篡改红;重定位 522→120 行,2026-10-05 删区批) | ✅ |
scripts/facts/ |
Go | 文档数字 / 常量 / 引用路径对账门禁(CI 形态 --strict check;退役键 retiredKeys 豁免待采集——真值源随删区退役的九键:abi_version / cargo_test ×2 / shadow_c ×5 / replay / serve_smoke_assertions) |
✅ |
scripts/toolchain_probe/ |
Go | moon 工具链健康探针(版本锁定 / 索引预检 / ICE 特征;--update-baseline 迁移) |
✅ |
scripts/moonbit/vendor_drift/ |
Go | vendored 上游漂移探针(moonbit/fs ← moonbitlang/x:内容哈希盯上游 main 四文件 + 版本号仅报告;退出码 0/1/2 = 一致/漂移/无法判定;--update-baseline 人工评估跟进后迁基线;go test J9 + 实跑双路证红) |
✅(hygiene) |
scripts/moonbit/moonbit_surface/ |
Go | MoonBit 对外面双面闸(无主 pub 白名单 + 消费边清单) | ✅ |
scripts/moonbit/libc_single_source/ |
Go | libc 三名单单源对账闸(等式 + 交集计数 + PURE 子集;规则外置 rules.json;--selftest J9 三路证红) |
✅ |
scripts/moonbit/pkg_deps/ |
Go | 包依赖方向断言(L0–L9 分层 + 无环;新包未登记分层即红;规则外置 rules.json;--selftest J9 证红) |
✅ |
scripts/moonbit/libc_boot_diff/ |
Go | libc 自举对拍(MoonBit library mode ↔ 冻结 golden;digest 化形态——freeze/golden/自动降级,3 例投影 hash + J9;stub + wrapper 截断口径;工序④删区批自 Rust export 产物切换) | ✅ |
scripts/vm_diff/ |
Go | S6 D 级运行期对拍(§7.1 层 1):三联 diff + verdict 三级 + 白名单防腐化——对拍锚 = 冻结 golden(工序③固化;原 Rust oracle 侧随删区退役,golden 形态切换 2026-10-05) | ✅ |
scripts/clang_direct/ |
Go | §7.1 层 2 Clang 直拍:真值源 Clang 本尊,known_direct 台账双向监控;吸收 shadow 防线(2026-10-05 删区,语料差量 0) | ✅ |
scripts/diff_ledger/ |
Go | 差异台账对账闸:ledger.json(28 条)schema/枚举域/键锁定 + 与三防线 known 白名单(shadow 3〔闸内清单值冻结——防线退役后由 clang_direct 白名单承接消费面 / clang_direct 7 / vm_diff 5〕)双向对账——正向 anchors 不得虚报、反向防线新豁免必须收编台账(守门规则「禁止沉默漂移」机判化);--selftest 五路注入证红(J9) |
✅ |
scripts/skill_path_check/ |
Go | skill 手册引用路径存在性闸(.agents/skills/** 代码块+行内反引号的仓库路径引用必须实存;规则外置 rules.json:白名单前缀 / dead_paths 退役·反例死路径 / skip_files 历史日志 / min_hits 塌缩下限;-selftest 九路注入证红;首跑 11 缺失全数定性) |
✅(hygiene) |
scripts/moonbit/gen_libc_data/ |
Go | libc 产物数据生成器(源 = scripts/moonbit/libc_data/bytecode_libc_data.json〔#39 迁出冻结区〕→ MoonBit 扁平字面量;三件套:sha 落款 + 内置 fmt + -check;原与上游 precompile_bytecode_libc 双写至工序④——删区后单源化,precompile 转冻结完整性闸) |
✅ |
scripts/moonbit/source_hygiene/ |
Go | tracked 文件真 NUL 扫描闸(NUL 判二进制事故族) | ✅ |
scripts/moonbit/host_route_coverage/ |
Go | 110 路由 ↔ host 实现覆盖闸(规则外置 rules.json,白名单双向对账) | ✅ |
scripts/moonbit/single_source/ |
Go | 单一真相源清单校验(跨语言孪生层,判据 C-04;enforced 判定义点文件集唯一 + registered 验路径存在;--selftest J9 证红) |
✅ |
scripts/moonbit/mbti_sync/ |
Go | 接口面同步闸(.mbt ↔ pkg.generated.mbti;跑 moon info 前后快照不变量;--selftest J9 证红;判红时自愈同步 .mbti) |
✅ |
scripts/perf_budget/ |
Go | 性能假设预算闸(把「优化为什么不做」的规模前提变成红线;首条 = typeck O2 债的 struct 规模预算;规则外置 rules.json;--selftest J9 证红) |
✅ |
scripts/gen_protocol_ts/ |
Go | 从权威源生成 @vitro/protocol TS 类型 + 字段元数据(生成源 = moonbit/protocol/types.mbt;双向对账 MoonBit↔schema 文档——原第三向 Rust oracle 过渡臂已随 2026-10-05 清理批移除〔parseRustTypes/legacyMismatch/tsType + rules.legacy_rust_sources,-check 收敛双向、selftest 4 路→3 路〕);--selftest J9 证红 |
✅ |
protocol/ |
TS/JS | @vitro/protocol 包(index.d.ts/fields.mjs 为生成物;consumer.mjs = 第一个消费者,用生成物消费真实引擎输出);发布动作属持有者 |
✅ |
scripts/parser_diff/ |
Go | S3 解析差分(E1–E4 + 病态 + 阈值锚;--selftest J9) |
✅(三模式) |
scripts/typeck_diff/ |
Go | S4 类型检查差分(E1–E4,语料 corpus/) |
✅(四语料) |
scripts/codegen_diff/ |
Go | S5 codegen 差分(A 级 14 键 + 槽位策略版本对账;--baseline 豁免 one-sided) |
✅(骨架 + 四语料) |
scripts/host_contract_map/ |
Go | Host Contract 三态对账:103 条冻结名册(rust_contract_names.json,2026-10-05 删区前自 Rust host_contract_tests.rs 标签提取冻结)↔ mb 锚(host/memory/vm 三包 wbtest 实测抽取)anchored/merged/missing 映射——判据 = 映射无洞 + 锚引用无陈旧 + anchored 1:1 锚名对齐/复用检查(语义保险丝);missing 已清零(2026-10-04 补锚 14 条,host 112→126)——CI 已切 --strict 收官门;--selftest 三锚 + 盘上 HOLE 注入留痕。纯文本抽取零 Rust 构建依赖 |
✅(moonbit job 静态闸族) |
scripts/protocol_frames/ |
Go | serve 协议帧字段级冻结(固定请求序列 → canonicalize → mask(rules.json 外置)→ 入库基线 baseline.jsonl 逐帧比对;--diff-hosts 互比 / --update-baseline 人工令 / --selftest J9;首跑战果(2026-10-04):28 帧互比全绿 + 三真分叉定性;现役单臂基线比——oracle 臂退役形态预置已生效(2026-10-05 删区),基线 33 帧(#27 批三 icons.get/memory.dump 入基线,2026-10-07)) |
✅ |
scripts/lexer_diff/ |
Go | S2 词法差分(L1/L2 双层 TSV 逐字节;--selftest J9;CI 已接 2026-10-04——core 差分段四语料) |
✅ |
已随删区退役的 CI 脚本(2026-10-05,git 历史 + tag rust-oracle-freeze 可回取):
shadow_verify / shadow_verify_cpp(C/C++ 影子验证——被测物 Rust DLL 随区退役,职能由 clang_direct 吸收)、
ci_three_tier_check(*_FAILURES.md 双向对账——载体随区删除)、engineering_health(Rust 工程健康看板)。
CI 步骤随 C ABI 面裁撤退役,脚本已随 2026-10-05 清理批删除(跑即 FATAL——输入 gen_capi_bindings(C ABI 声明对账)vitro_capi.h 已删;git 历史可回取);wasm_smoke(Rust wasm32 出口冒烟)同批删除(现役 wasm 冒烟 = scripts/wasm_gateway/host.js)。
2.2 差分对拍配套(本地;对拍管道的公共件)
| 脚本 | 语言 | 用途 |
|---|---|---|
scripts/canonicalize/(CLI)+ scripts/internal/canonicalize/(库 = 判定单源) |
Go | 差分锚 JSON 归一器(键排序 / 转义统一;驱动侧走进程内调用,CLI 壳保留 stdin 进 stdout 出与 --check) |
scripts/lexer_diff/gen_corpus.mbtx |
MoonBit | 随机词法差分语料生成器(moon run scripts/lexer_diff/gen_corpus.mbtx -- <out_dir> <count> [seed];置于 module 外防发布打包) |
| `moonbit/cmd/dump_tokens | dump_ast | dump_typeck |
2.3 探针(历史注记——2026-10-05 随 core_asset_verdict/ 目录退役)
裁定 §13 探针集的 Go 迁移版五件(interaction_probe 会话 fuzz / random_diff 三路对照 /
resource_longrun 资源长跑 / seek_accumulation seek 累积 / regions_growth regions 采样)
已随删区批整体删除——它们长跑的对象(Rust oracle 进程 / oracle 内存语义)已不存在,
MoonBit 侧对应语义由 moon test 内 fuzz 不变量自检(路 A 迁移,删区批)与 clang_direct 承接。
历史数据与配方见 tag rust-oracle-freeze 与 git 历史。
2.4 生成器与文档工具(Go)
| 脚本 | 用途 | 记录状态 |
|---|---|---|
scripts/moonbit/gen_diag/ |
diag 包码表生成(137 臂单源;输入 = diagnostics_data/{error_codes,catalog}.json 真源〔#39 迁出冻结区,E4xxx 38 码保守全迁〕;-check 幂等 + 内置 fmt) |
moonbit/AGENTS.md |
scripts/moonbit/gen_host_route/ |
host 路由 110 对生成(gen_diag 同构三件套;输入断源后以 rust_contract_names.json 同源名册冻结为生成器资产快照——2026-10-05 删区批) |
同上 |
scripts/moonbit/gen_stubs/ |
libc 存根头 → stubs_gen.mbt(--check;名单真源 = vitro/engine/stdlib 的 headers()〔P1 批 2026-10-10 起文本解析 + 与 libc_src/include 目录双向集合对账,stubNames 硬编码已消灭〕;内容源 = scripts/moonbit/libc_src/include) |
scripts/moonbit/README.md |
scripts/moonbit/gen_protocol_fields/ |
S7 protocol 字段白名单生成器(scripts/replay/v01_payload_fields.json 真单源 → protocol/schema_fields_gen.mbt;gen_host_route 同构三件套:写盘 + 内置 fmt + -check;2026-09-27 审阅 P2-2 落地) |
同上 |
scripts/moonbit/gen_diagnostics/ |
S8 diagnostics 数据层生成器(scripts/moonbit/diagnostics_data/ 四 JSON 真源为输入 → moonbit/diagnostics/{fix_payloads,concepts,patterns,paths}_gen.mbt;Rust .rs legacy 对账臂已随工序④删区到期移除〔值级文案 = 修复批合法演化面〕;fix 载荷 25 静态码 + 概念图 25+25+28 + 模式 6 + 路径 6 基线 fail loud;读写两阶段分离防 check 污染工作区;J9 证红四路);2026-10-02 入 CI 生成物新鲜度步 |
同上 |
scripts/gen_icons/ |
Go | 图标几何层生成器(#27 片 1,2026-10-07):真源 = 手写 moonbit/icons/<id>.svg(76 枚,2026-10-10 C 语义全集批扩 24 枚)→ 产 moonbit/icons/icons.json(digest 锁定);只读真源只产几何层不反向改写;-demo 额外产 demo/js/icons.ts 内联表;-check 不落盘(CI hygiene 挂闸) |
scripts/icon_catalog/ |
Go | 图标资产契约闸(#27 片 2,判定型):十条检查面全外置 rules.json——svg 契约属性/零具体色值/图元白名单/禁零长子路径/<title>中文+<desc>英文对账/index.tsv 值域/孤儿·缺资产双向对账/icons.json digest 同步/协议值域对账(catalog.json 77 条 icon 值 ⊆ index.tsv id 集,J9 注入证红);CI hygiene 挂闸 |
scripts/gen_svg/ |
十五张文档插图生成(快照数字 + 包建成状态从 facts.json 注入:data-fact 锚 / moonbit_built_packages 派生实虚线;skills 全景从盘上 skill 目录扫描;教学智能流水线从 rules.json / golden JSON / templates/ 活值直读;-check 逐字节校验无副作用,2026-09-28 入 CI hygiene;禁手改入库 SVG;2026-10-05 删区批:架构图重画单轨改名 vitro-architecture.svg、shadow 门禁图改名 clang-direct-gate-flow.svg、五图实现锚切 MoonBit 真锚) |
根 README 提及 + 本册 §1.2 |
scripts/docs_preview/ |
docs/ 全量 Markdown → 离线静态 HTML 预览(-watch / -open) |
2026-09-22 本册首次入册(此前零记录) |
scripts/perf_baseline/ |
性能基线报告器(报告型 / 无红绿,2026-10-04 拍板入库):-mode launch/pipeline/compare/ab 四子模式;逐进程端到端口径,报告首页给「启动开销是否 >20ms」的采集有效性判词(防在 agent 会话内误采——实录 §12.1/§13.1);规则外置 rules.json;-selftest J9 双路证红(缺产物 / 空语料)。CI 接线状态 = 未接线(报告型,待基线固化后另议阈值门禁) |
性能实录 §13/§14 |
2.5 冒烟 / 辅助(杂项)
| 脚本 | 语言 | 用途 | 记录状态 |
|---|---|---|---|
scripts/gosmoke/、scripts/lint_check.sh、scripts/check-memory-safety.ps1 |
— | C ABI 冒烟 / clippy 封装 / Rust 内存扫描三件——对象均随删区退役,已随 2026-10-05 清理批删除(git 历史可回取) | — |
scripts/diag_mem.ps1 |
PS1 | 进程内存诊断(63.6GB 事故的取证工具) | 事故记录 |
scripts/vitro_cli/main.js + scripts/bin/vitro·vitro.cmd |
JS/sh | 统一 CLI 入口(#49 批一):launcher 默认 wasm 臂(node ≥25 壳消费 gateway wasm.wasm——与 demo 同产物),node 缺失/过旧(exit 3 哨兵)降级 native exe(stderr 恒 backend= 行);--backend native|wasm 显式选边;cmd 版纯 ASCII(OEM 代码页解析)+ goto 形态(块内 errorlevel 解析期展开坑);壳 stdout 字节还原(Latin-1 逆折回)+ note 通道透传——与 native 双臂同形(vitro_cli_smoke 机判) |
2026-10-06 本册首次入册;AGENTS.md 纪律 12 / CLI 手册为一级说明 |
scripts/gen_icon_preview/ |
Python | 图标预览页生成(#27 批配套开发辅助工具;非判定型不入 CI——Python 新增属例外登记:纪律 8 判定型默认 Go 不约束非判定辅助工具) | 2026-10-07 本册补登(同上) |
.agents/install_skills.go |
Go | Agent Skills 安装器:把 .agents/skills/ 的项目专属操作手册装进各 AI 工具目录(零依赖、fail loud;go run 单文件) |
2026-09-28 本册首次入册(同日 py 版改 Go,不引入 py 依赖);不入 CI,根 AGENTS.md「Agent Skills」节为一级说明 |
2.6 Python 残留(历史注记——已随删区全删)
CI 侧 Python 活性已于 2026-09-18 清零;死代码清理批(2026-09-22)删 3 个;
工序④删区批(2026-10-05)将剩余全部 .py 随「scripts 全部 py 残留」一并物理删除
(终态裁定 2026-09-22 本为「留档随 Rust 区退役,不再迁移」——退役已执行,裁定兑现)。
历史清单(12 个:core_asset_verdict 取证 7 / 容器布局与模板同步生成器 2 / 统一性能基线 /
replay 取证 debug / shadow 时代散测 3——后三者在 09-22 已删)见 git 历史与本节 2026-10-05 前版本。
三、入册义务(2026-09-22 起)
- 新增脚本必须在本册登记(路径 / 语言 / 一句话用途 / CI 接线状态),用法细节写脚本自身头注;
- 判定型 / 会再跑的脚本语言 = Go(政策见文首),一次性脚本豁免但需在 §2.5 类比照登记性质;
- 进 CI 的新门禁必须同步更新 §1.1 表;先证红再上线(J9 义务);
- 本册由人工维护(盘点性质,非 facts 机判对象);脚本退役 / 迁移后同步删行。