14 · 规范的演化
规范是怎样一步步长出来的
git 历史说明这套体系不是一次设计好的。AGENTS.md 在第一次提交里就存在;此后几乎每周都有新的门禁加入,也有规则被整体删除。
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,并在同一提交里修掉被拦下的存量。
- 定期回看规则本身,删掉成本高于收益的那些。