Skip to content

贡献规范落地:CONTRIBUTING.md + Docs Gate 门禁 + PR 模板(工程文档不入仓这条目前无机械约束) #137

Description

@johnnyzhang-eng

问题

《GitHub 过程管理规范》里「工程文档不入仓」这一条,目前没有任何机械约束,而且已经在真实发生

  • PR docs: remove migrated module split doc #128 于 2026-08-06 02:35 合并,删掉 docs/module-split.md,说明「内容已迁到 Issue」——做的是对的事。
  • PR feat: integrate verified Windup source snapshot #126(源码快照整合,271 文件)把 docs/module-split.md 又改了回来,并新增 docs/module-split-plan.mddocs/sse-generation-flow.mddocs/superpowers/plans/2026-08-05-*.md(2 份)、docs/superpowers/specs/2026-08-05-*.md(2 份)、根目录 api-reference.md

这不是谁不小心。 改动一大,md 就藏在两百多个文件里,评审时没人会专门去看。规范只写在群消息和营规范原文里,新加入的人和各种 AI agent 都读不到——规范没有落点,就只能靠记性

提议

三个文件,都在 .github/ 与仓库元文件范围内,不含任何设计或架构内容:

文件 作用
CONTRIBUTING.md 贡献规范全文,按「CI 自动拦 / 只能靠自觉 / 需要人判断」三层组织
.github/workflows/docs-gate.yml 把「工程文档不入仓」变成 CI 门禁
.github/pull_request_template.md 新开 PR 自动带出的自检清单,各项指向 CONTRIBUTING.md 的小节

外加一个新 label user-doc,作为门禁的豁免开关。

为什么规范放 CONTRIBUTING.md 而不是 Issue

「工程文档不入仓」针对的是会分叉的设计描述:文档 commit 进仓后代码继续演进而 md 不动,半年后没人知道哪份算数。贡献规范正好相反——它必须和 CI 配置、目录结构一起演进才有意义。改了 naming.yml 的正则却没同步规范,这个不一致应该在同一个 PR 的 diff 里被看见;放进 Issue 反而制造分叉。

另外它面向的是仓库使用者,CONTRIBUTING.md 是 GitHub 原生识别的文件(开 Issue / PR 时会自动提示),这是它的标准位置。

门禁的设计原则:宁可漏拦,不可误拦

误伤别人正常工作的门禁会被直接关掉,所以它只管两个最明确的位置:

  • 拦:docs/** 下的新增与修改、仓库根目录的新增 md
  • 不拦:删除(把文档搬走正是我们想要的)、子目录里的 README / MODULES.md、允许清单里的路径、打了 user-doc 的 PR

子目录 md 故意不拦,因为团队实际约定是「未对齐点显式落 README / MODULES.md,不留聊天记录」。这条和「工程文档不入仓」确有张力,CONTRIBUTING.md 2.1 里把当前口径写成了「记录结论可以入仓,记录论证过程进 Issue」——这个口径是提议的,不是既有规范里的,请评审时确认或修正。

拿全部 15 个 open PR 实测过

不是纸上推演,是把每个 open PR 的真实文件清单喂给门禁逻辑跑了一遍:

结果 PR 说明
PASS #131 #133 #115 #107 #105 #97 #96 #95 #86 #75 零误伤,主力工作全部放行
FAIL #126 拦下 8 项,正是目标
FAIL #110 #111 两个 PR 都把 _PR说明.md 加到了仓库根目录——此前没人注意到
FAIL #74 #72 假警报,见下

#74 / #72 那类假警报值得单说:它们「新增」frontend-architecture-v3.md,但那文件 main 上早就有——是分支落后导致 merge-base 把老文件算成新增,rebase 后自动消失。门禁的报错信息里已经写明这一点并给出 rebase 命令,让假警报变成「你该 rebase 了」的有用信号。

建议的推进方式

  1. 先不要设成 required check。 跑两周看误伤率再谈。现在设 required,feat(quick-start): add workflow-backed creation flow #74 / feat(workflow-run): add frontend execution foundation #72 那种陈旧 base 的 PR 会直接被卡死。
  2. user-doc label 已建好(区别于 Issue 上的 Documented 状态标签——一个是 PR 门禁开关,一个是 Issue 生命周期,语义不同不要互相代用)。
  3. 存量问题不在本次处理:根目录 frontend-architecture-v3.md 属同类,处理它要单独开 PR。feat(generation): align validated SSE adapter with backend tasks #110 / feat(media): add validated upload adapter #111_PR说明.md 也请各自作者自行决定。

验收

  • 门禁对本 PR 自身放行(CONTRIBUTING.md.github/** 在允许清单内)
  • 构造一个含 docs/design.md 的 PR 会被拦下,打上 user-doc 后放行
  • 新开 PR 时自动带出模板

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

enhancementNew feature or requestproposal该 Issue 是一个产品提案

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions