Skip to content

10 · 自动门禁

从 pre-commit 到 CI 的检查链 ​

关键文件lefthook.ymlscripts/run-gates.tsscripts/verify-*.tsscripts/gen-*.ts.github/workflows/ci.yml
pre-commitlefthookpre-pushlefthook推送前自选证据dsh-pre-push-checksCI(PR)run-gates ci-*评审dsh-code-review· 暂存文件 oxlint --fix· diff --check 查空白· 双语翻译配对记录· vendor 清单守卫· 归档 Note 冻结检查· pnpm run typecheck· 仅此一项,保持快速· change-scope 看范围· 对应的聚焦测试· 文档改动跑 doc-sync· 可见输出跑 snapshot· build:check 收尾· lint · typecheck· coverage 每文件 100%· doc-sync · hygiene· snapshot · web · bench· Windows 原生检查· 先读规则再读 diff· 新文字逐段语义审查· 生命周期与所有权· 测试强度与反例· 不重复已绿的门禁本地:快、窄、按改动选择CI:全量与平台矩阵人:机器查不到的语义
每一站各司其职。git hook 刻意保持很窄,只做能自动修复或很快的检查。推送前由开发者(或 Agent)按改动面挑证据。穷尽的覆盖和多平台矩阵交给 CI。评审只看机器无法判断的语义问题。

run-gates:门禁聚合器 ​

scripts/run-gates.ts 把几十个检查组织成聚合模式:本地常用的 doc-sync、hygiene、doc-quick(即 pnpm run test:docs),以及 CI 用的 ci-static、ci-coverage、ci-snapshot、ci-windows-* 等。每个门禁可以声明依赖,并发数有上限(每个文档门禁都会构建完整的 ts.Program,不设上限会耗尽内存)。被中止的门禁即使退出码为 0 也不会报告为通过。

verify-* 脚本分类 ​

目的脚本
类型与代码verify-no-unknown-casts、verify-export-jsdoc、verify-no-top-level-await、verify-no-bare-dispatcher、verify-plugin-record-callers
措辞与格式verify-concrete-terms、verify-md-wrap、verify-doc-budgets、verify-mermaid
文档与代码一致verify-type-equiv、verify-doc-refs、verify-md-links、verify-subsystem-pages、verify-package-readme-model-experience、verify-package-readme-limitations、verify-package-readme-summaries
架构与依赖隔离verify-default-product-isolation、verify-product-use、verify-package-dependencies、verify-optional-dependency-imports、verify-runtime-closure、verify-config-source-ownership、verify-cordis-config
界面文案verify-client-ui-i18n
决策与升级记录verify-agent-note-format、verify-agent-note-classification、verify-archived-agent-notes、verify-upgrade-guides
引用卫生verify-repository-references(拒绝引用 commit 哈希)、verify-public-repository-links
生成物新鲜度gen-tool-catalog、gen-config-catalog、gen-cli-help、gen-module-graph 等,均以 --check 模式运行

门禁自身的规则 ​

  • 能机器检查的不变量要接入一个实际执行的顶层门禁,并证明每条修改过的验收路径会拒绝一个非法用例。
  • 用范围窄、有理由的例外,不要全局关闭一条规则。
  • 门禁脚本做语法感知的发现,防止扫描语料意外变空或被缩小,并测试每种被纳入和被排除的形式(scripts/AGENTS.md)。
  • lint 规则本身也有测试:oxlint-contract.spec.ts、lint-rule-fingerprint.spec.ts。

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