Skip to content

14 · 规范的演化

规范是怎样一步步长出来的 ​

git 历史说明这套体系不是一次设计好的。AGENTS.md 在第一次提交里就存在;此后几乎每周都有新的门禁加入,也有规则被整体删除。

8 月推理泄漏清理6月7月8月9月10月AGENTS.md 与仓库同日诞生type-equiv 门禁导出必须有 JSDocRFC 改名为 Agent Notes低价值 Note 归档冻结禁用歧义词Note 只记持久理由禁止新增 as unknown升级指南门禁一段一行与合并政策文档分层与字数预算原生 GitHub stacksUI 文案归 locale错误处理规范禁止模块顶层 await红色区段:运行时 invariants,7 月 20 日上线,9 月 30 日整体删除
2026 年 6 月到 10 月的主要里程碑,日期取自引入每条规则或门禁的提交。蓝色底带标出 8 月的全仓推理泄漏清理,dsh-trim-cot-leakage 的例子就是从那次清理及其评审轮次中提炼的。

规律一:规则、门禁、测试和记录在同一个提交里落地 ​

新规则不是只写一句话。b77cc1c0f2(禁止模块顶层 await)一次修改了 15 个文件:一组中英 Note、defensive-patterns/package-surface 的中英文、267 行的门禁脚本和 220 行的 spec、run-gates 注册,以及被新规则拦下的三处存量代码。c5d775d437(禁止新增 as unknown)包含 Note、根 AGENTS.md 一行、2,779 行的基线清单、183 行门禁和 236 行 spec。

规律二:新门禁一上线就发现漂移 ​

6 月 14 日引入 doc-typecheck 和事件分类校验的提交正文写道,校验立即找出了架构文档表格里漏掉的三个事件。同一提交还要求统计并限制 ignore-check 豁免的比例。门禁的例外也要被测量。

规律三:治理也会删减自己 ​

  • 运行时 invariants:7 月 20 日为每个包加上 ./invariant 运行时检查;9 月 30 日的 f028f25667 删除了整个包、所有包的 invariant 配套代码及其测试、相关门禁和 Vitest 设置,同时更新文档、归档 Note,并写了升级指南。
  • 决策记录收紧:6 月的 ADR 和 RFC 合并成一棵按生命周期组织的树,7 月 19 日改名为 Agent Notes;7 月 26 日开始归档低价值记录;9 月 17 日规定只为持久理由创建 Note;9 月 30 日清理冗余的决策记录。集中的 INDEX.md 也被取消。
  • 合并政策放宽:6 月禁止 rebase,8 月改为允许 rebase 并要求 lease 保护(见上一章)。

这说明规范和代码一样有维护成本。不再能防止缺陷的规则,会被当作 slop 删除。

可以借鉴

  • 从第一天就放一个 AGENTS.md,然后随缺陷逐步加规则,不必先设计完整体系。
  • 每条新规则配齐四件事:规则文字、执行它的门禁、门禁的 spec、记录理由的 Note,并在同一提交里修掉被拦下的存量。
  • 定期回看规则本身,删掉成本高于收益的那些。

依据 deepseek-harness 仓库 master 分支及其 git 历史整理