代码治理
- 状态:active
- 读者:贡献者、维护者
- 权威性:仓库代码组织策略;从属于 QED 形式规范、当前代码/测试以及文档治理
- 范围:包分层、alias 入口、源码职责与代码变更的文档回写义务
- 最近审阅:2026-10-08
本文档定义 QED 仓库的代码治理规则。它不增加新的语义规范层,只负责把包边界、alias 入口和文档回写义务固定下来,避免代码结构长期漂移。
分层
默认依赖方向固定为:
kernel -> logic/elab -> parser -> tactics -> prover -> cmd
治理要求:
kernel是唯一 theorem-construction boundary。logic只能提供 checked helper、definition/unfold、replay helper 与 theorem catalog 组织,不得新增 primitive authority。parser只负责文本语法、normalize、resolution 和 lowering;不得直接依赖 tactics execution object。tactics只负责 goal-state transformation 和 replay orchestration;不得回写 parser 语义。prover只做 parser/tactics/kernel 的编排与结构化诊断,不得成为新的逻辑权威。cmd保持最薄外层,只消费稳定 facade,不新增低层知识。
research_rewrite 位于这条依赖链之外:它是仅用于研究的原型,只依赖 kernel 和 logic,且没有任何已发布的包依赖它。cmd 是可执行包(其 moon.pkg 中为 pkgtype(kind: "executable")),因此其他包无法导入它。
若某次改动需要逆向依赖,默认视为设计问题;应优先引入中立数据结构或显式 bridge,而不是跨层直接引用。
Alias 入口
每个包的官方 alias 入口固定为两类:
alias.mbt生产源码入口。alias_test.mbtblackbox test 入口。
约束如下:
alias.mbt只暴露该包生产源码真实需要的稳定符号。alias_test.mbt必须先镜像alias.mbt的生产导出,再补充 test-only imports。alias_test.mbt不是第二套公共 API;不得形成与生产入口不同的导出哲学。- alias 文件头注释必须说明入口适用范围和维护规则。
- 不得把 alias 当作无边界的下层符号转抄表。
- blackbox test 引用本包符号时,须在
alias_test.mbt中用using @<本包> {...}显式导入(MoonBittest_unqualified_package规则),不得依赖隐式导入。 kernel不依赖其他 QED 包,因此没有alias.mbt,只有列出本包测试所用符号的alias_test.mbt。
源码职责
单个文件或模块应尽量只承担一种主职责:
- 纯数据对象与 accessors
- 纯 lowering / normalization / rendering
- 重放 / 编排
- 语料 (corpus) / 映射 / 测试夹具
以下情况应优先拆分:
- 编排逻辑与错误渲染长期混在同一文件
- parser-side lowering 直接构造 tactics object
- façade 层文件逐渐演变成跨层杂糅入口
本仓库当前的首批治理样式包括:
- parser 输出 parser-owned
ParsedGoal,由上层显式 bridge 到tactics.Goal - prover 保留编排角色,但继续把诊断渲染与 corpus 数据从主执行路径中分离
文档义务
当代码改动影响以下内容时,必须同步回写文档:
- 公开能力口径
- 包职责或分层边界
- alias 入口语义
- 失败语义或结构化诊断字段
默认维护顺序:
- 代码与测试
- 用户手册
- 受影响各包的包页面(
api/、design/、tutorial/) - 规范符合性
README.md与CHANGELOG.md- 工作区审计(2026-04-18)(仅在阶段结论变化时)
评审清单
提交与 review 时至少核对:
- 新依赖是否符合既定分层
alias.mbt/alias_test.mbt是否仍是单一官方入口- 是否把 parser/tactics/prover 的职责重新耦合在一起
.mbti变化是否符合预期公开边界- 文档是否同步反映新的 shipped state