这看起来很不友好,但它回应的是一个新问题:agent 让「生成一个看起来很专业的 issue」的成本降到接近零,而「判断这个 issue 是否真实、是否值得投入」的成本没有下降。
当提交成本崩塌而审阅成本不变时,任何「默认打开、事后过滤」的机制都会被压垮。pi 的应对是把默认值从「打开」改成「关闭」,并把开门的权限做成一个可以逐步授予的二级许可。
All issues and PRs from new contributors are auto-closed by default.
Maintainers review auto-closed issues daily and reopen worthwhile ones. Issues that
do not meet the quality bar below will not be reopened or receive a reply.
| 命令 | 授予 |
|---|---|
lgtmi | 今后的 issue 不再被自动关闭。不含提 PR 的权利 |
lgtm | 今后的 issue 和 PR 都不再被自动关闭 |
命令必须出现在维护者回复的开头(可以在若干 @username 提及之后)或结尾。CONTRIBUTING.md:34 这条位置约束不是形式主义——它防的是维护者在正文里写「this lgtm」被误判为授权。
实现是两个正则:
const approvalAtStartPattern = /^[\s.]*(?:@[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?(?:\s*,\s*|[.:]\s*|\s+))*(lgtmi|lgtm)(?=$|[\s]|[^\p{L}\p{N}_\s])/iu;
const approvalAtEndPattern = /(?:^|[\s.])(lgtmi|lgtm)\s*(?:[^\p{L}\p{N}_\s])?\s*$/iu;
const approvalMatch = commentBody.match(approvalAtStartPattern) ?? commentBody.match(approvalAtEndPattern);
@username 的写法连 GitHub 用户名的长度规则(首尾字母数字、中间最多 37 字符)都编码进去了。approve-contributor.yml:33授权结果写进一个纯文本文件 .github/APPROVED_CONTRIBUTORS,格式是 <username> <capability>。APPROVED_CONTRIBUTORS:2 快照时共 240 条:238 条 pr、2 条 issue。
这个比例本身是个发现:拿到 lgtmi(只开 issue)的人几乎没有——维护者一旦决定开门,基本直接给全权。两级设计在实践中退化成了一级。
自动关闭的回复不是模板化的敷衍,它解释了机制并给出可行动的下一步:issue-gate.yml:100 并附上 CONTRIBUTING.md 的链接与「不符合质量标准的不会被重开也不会收到回复」的明确预期。issue-gate.yml:102
**You must understand your code.** If you cannot explain what your changes do and how
they interact with the rest of the system, your PR will be closed.
Using AI to write code is fine. Submitting AI-generated slop without understanding it is not.
issue 的标准同样具体:放不下一屏就太长了;用自己的话写(非要用 LLM 生成,就补一条明确标注 AI 的评论)。CONTRIBUTING.md:42
还有一条明码标价的封禁规则:忽视本文件两次,或用自动化灌大量 issue,GitHub 账号永久拉黑。CONTRIBUTING.md:52
周五到周日提交的 issue 不保证被审阅;紧急问题去 Discord。CONTRIBUTING.md:25 FAQ 里的解释很直白:我们在工作时间做 triage。
把「维护者也有作息」写进贡献指南,是这份文件里最不常见、也最诚实的一条。
传统开源的隐含契约是:提交 issue 需要一定成本(复现、写清楚),这个成本本身就是过滤器。agent 把这个成本消灭了——现在任何人可以在 30 秒内产出一个格式完美、措辞专业、可能完全基于幻觉的 bug 报告。
而 FAQ 里点出了更麻烦的一点:「打磨得很漂亮的 AI 生成 issue 仍然可能是错的、误导性的,或者调查起来很昂贵。」CONTRIBUTING.md:93 质量信号和真实性脱钩了——过去「写得好」是「认真做过功课」的代理指标,现在不是了。
所以自动关闭真正改变的不是「谁能提 issue」,而是时间的所有权:从「issue 一来就欠一个回应」变成「维护者按自己的节奏批量处理」。关闭一个 issue 不消耗注意力;让它开着会。
FAQ 里专门有一问:为什么不让 AI 全权 triage?回答是——AI 可以帮忙归并重复、做摘要、指出缺失信息,但不被信任做最终的维护者决定;人的审阅仍是最后一道关。CONTRIBUTING.md:93
这个立场值得注意,因为它出自一个做 agent 的团队。他们在自己最熟悉的技术上划了一条界:用 AI 做归并与摘要(降低成本),不用 AI 做取舍(那是判断)。仓库里确实有 issue-analysis.yml 与 issue-triage-labels.yml 两个 workflow 承担前者。
自动关闭是无差别的。一个路过的资深工程师发现真 bug、写了个精准的三行 issue——他也会被关闭,也要等到某天被重开。而一个被自动关闭的 issue 给人的第一印象是「不受欢迎」,很多人不会等。
pi 的对冲有三条:承诺每日审阅、把规则和理由写得极其清楚、以及给 Discord 作为快速通道。但这三条都要求提交者先读 CONTRIBUTING.md——而被自动关闭的人里,最不可能读它的恰恰是那些随手扔个 issue 的人。这个机制筛掉的是低投入者,其中混着一部分高价值的低投入者。
门禁不是「只有核心团队能提 PR」。240 个已批准的账号,配上 286 位历史提交者(第 01 章),说明这道门确实在开,只是要先敲。
把它理解成「默认关闭 + 一次性人工准入」比理解成「封闭开发」更准确:你只需要通过一次,之后就是正常贡献者。
pr。lgtmi 这一级几乎没被用过——多一级的设计成本没有换来对应的收益。检查过并确认:lgtm/lgtmi 的位置约束在 workflow 里有真实实现(两个正则,开头/结尾各一),不是只写在文档里的口头规矩。approve-contributor.yml:35
场景维护者在回复里写「Nice find, this lgtm to me, will look tomorrow」。贡献者拿到授权了吗?
B。两个正则分别锚定 ^(可跳过 @mentions)与 $。句中的 lgtm 不匹配。这条位置约束正是为了防止随口一句被误判为正式授权。approve-contributor.yml:34
场景你用 Claude 写了一个 PR,自己完整读过、能解释每一处改动。符合 pi 的规则吗?
A。原文:「Using AI to write code is fine. Submitting AI-generated slop without understanding it is not.」(注意 issue 正文另有要求:用自己的话写,非要用 LLM 生成就补一条明确标注 AI 的评论——那是对 issue 文本的要求,不是对代码的。)CONTRIBUTING.md:17
ac4ac9e(2026-08-07 快照)。