implemented(除 4 篇超长文档随后补)、proposed、rejected 全树配对; 同一流水线 + 二遍校验(paraphrase-back + 仓库上下文一致性)产出。 docs/rfc/implemented/AGENTS.md 与其 CLAUDE.md 符号链接列入排除 (agent 指令文件,与根 AGENTS.md 同策略)。
2.2 KiB
2.2 KiB
RFC:以机械质量门禁取代行文约定
Status: implemented
English | 中文
问题
本代码库主要由 coding agent 开发。相比行文约定,agent 遵守强制门禁的可靠性远高得多;而当劳动由 agent 完成时,「工作量大」不构成成本论据。早期证据:未通过类型检查的测试被提交了(vitest 不做类型检查),只在评审时才被发现。
决策
AGENTS.md 中的每一项承诺都对应一条退出码非零的命令,同时接入 git 钩子和 CI,两者调用相同的 package.json 脚本:
- 最严格的 TypeScript(
noUncheckedIndexedAccess、exactOptionalPropertyTypes等);示例、测试和脚本通过根目录 no-emittsconfig.json在 CI 中进行类型检查,而 package/vendor 代码保持在各自 project-reference 边界之后。 - ESLint strict-type-checked + @stylistic(作为强制执行的项目风格),包括文件内重复逻辑检查;vendor 代码排除在外。
- jscpd 检测 package 生产 TypeScript 和仓库脚本中的跨文件克隆;窄范围的源码区间例外用于记录有意为之的并行实现。
packages/*/*/src的逐文件 100% 覆盖率(v8);不可达的防御性守卫保留/* v8 ignore */并注明理由,而非删除。- knip(死代码/依赖)、publint(包正确性)、workspace 约束(workspace 规则:private、cordis peer+dev、统一版本、ESM),以及对构建出的包声明文件进行 NodeNext 消费方类型检查。
- lefthook pre-commit(lint 暂存文件、类型检查、vendor manifest 守卫)和 pre-push(测试、hygiene);CI 在 Node 22.19/24/26 上运行完整矩阵,外加一个端到端驱动 echo-agent 的演示冒烟测试。
后果
- 约定在 agent 更替后仍然存续;违规在本地快速失败。
- 门禁本身也是需要维护的代码;配置变更与其他变更一样需要评审。
- 100% 覆盖率的压力可能催生无断言的测试——变异测试是计划中的对冲手段(见变异测试提案)。