本文翻译自 Vouch,由 HashiCorp 创始人 Mitchell Hashimoto 开发。
什么是 Vouch?
Vouch 是一个社区信任管理系统,其核心理念很简单:人们必须先被担保(vouched),才能参与项目的某些特定活动。同时,系统也支持谴责(denounce)机制,可以明确阻止某些用户与项目互动。
这个实现是通用的,可以用于任何代码托管平台上的任何项目。但 Vouch 开箱即用地提供了 GitHub 集成,通过 GitHub Actions 和 CLI 来实现。
核心特性
-
简单的文件格式:担保列表保存在一个扁平文件中,使用最小化的格式,可以用标准 POSIX 工具和任何编程语言轻松解析,无需外部依赖库。
-
信任网络:担保列表可以形成一个信任网络。你可以配置 Vouch 读取其他项目的担保或谴责用户列表。这样,拥有共同价值观的项目可以共享他们的信任决策,在整个生态系统中创建一个更大、更全面的信任网络。
-
可配置的权限控制:项目可以完全决定担保和谴责的规则,以及被担保或谴责的用户会有什么后果。
为什么需要 Vouch?
开源项目一直建立在”信任但验证”(trust and verify)的基础上。
在过去的 20 多年里,理解代码库、实现变更、提交审查的高门槛自然过滤掉了许多来自不合格人员的低质量贡献。这对 Mitchell 的项目以及大多数其他项目来说已经足够了。
但环境变了。
随着 AI 工具的出现,人们可以毫不费力地创建看起来合理但实际上质量极低的贡献,几乎不需要任何真正的理解。仅仅因为提交变更的门槛很低,就再也不能盲目信任贡献者了。
然而,开源仍然建立在信任之上!每个项目都有一组明确的可信个人(维护者)和更大的可能可信群体(以任何形式积极参与社区的成员)。
因此,让我们转向一个显式的信任模型:可信个人可以为他人担保,那些被担保的人然后就可以做出贡献。
如何使用
GitHub 集成
通过提供的 GitHub Actions,将 Vouch 集成到 GitHub 项目中非常简单。通过选择使用哪些 Actions,你可以完全控制用户如何被担保,以及他们可以做什么或不能做什么。
Vouch 本身就是完全集成的例子。以下是可用的 Actions:
| Action | 触发器 | 描述 |
|---|---|---|
| check-pr | pull_request_target |
在打开或重新打开时检查 PR 作者是否被担保。Bot 和有写权限的协作者自动允许。可选择自动关闭来自未担保或被谴责用户的 PR。 |
| manage-by-discussion | discussion_comment |
让协作者通过讨论评论来担保、谴责或取消担保用户。更新担保文件并提交更改。 |
| manage-by-issue | issue_comment |
让协作者通过 issue 评论来担保或谴责用户。更新担保文件并提交更改。 |
CLI 工具
CLI 作为一个 Nushell 模块实现,只需要 Nushell 即可运行,没有其他外部依赖。
本地命令示例:
# 检查用户的担保状态
vouch check mitchellh
# 退出码:0 = 已担保,1 = 已谴责,2 = 未知
# 添加用户到担保列表
vouch add someuser
vouch add someuser --write # 就地写入文件
# 谴责用户
vouch denounce badactor
vouch denounce badactor --reason "提交了 AI 生成的低质量内容"
vouch denounce badactor --write
GitHub 集成命令:
# 检查 PR 作者状态(试运行)
vouch gh-check-pr 123 --repo owner/repo
# 自动关闭未担保的 PR(试运行)
vouch gh-check-pr 123 --repo owner/repo --auto-close
# 实际关闭未担保的 PR
vouch gh-check-pr 123 --repo owner/repo --auto-close --dry-run=false
# 允许未担保用户,仅阻止被谴责者
vouch gh-check-pr 123 --repo owner/repo --require-vouch=false --auto-close
通过 issue 评论管理贡献者状态:
vouch gh-manage-by-issue 123 456789 --repo owner/repo
响应有写权限的协作者的评论:
vouch— 为 issue 作者担保vouch @user— 为特定用户担保vouch <reason>— 为 issue 作者担保并附上理由denounce— 谴责 issue 作者denounce @user <reason>— 谴责特定用户并附上理由
Vouch 文件格式
担保列表存储在 .td 文件中(Trustdown,类似于 Markdown 的文字游戏):
# 注释以 # 开头
username
platform:username
-platform:denounced-user
-platform:denounced-user reason for denouncement
- 每行一个用户名(不带
@),按字母顺序排序 - 可选地指定平台前缀:
platform:username(例如github:mitchellh) - 用
-前缀来谴责用户 - 可选地在用户名后的空格后添加详细信息
项目状态与适用场景
重要提示: 这是一个实验性系统,目前由 Ghostty 终端模拟器项目使用。团队将根据经验和反馈继续改进系统。
适用场景
Vouch 特别适合以下场景:
- 面对 AI 生成内容的开源项目:当收到大量 AI 生成的低质量 PR 时,可以用担保机制进行过滤
- 重视代码质量的成熟项目:已经有稳定的维护者团队,希望引入新的贡献者但保持质量控制
- 多项目协作生态:多个相关项目可以共享信任网络,在一个项目中被信任的用户在另一个项目中也能获得相应的权限
- 社区自治的项目:希望由社区成员而非仅仅由核心维护者来决定谁可以参与贡献
技术实现亮点
- 零依赖 CLI:使用 Nushell 实现,无需额外依赖
- 可编程的库:提供
lib子模块用于脚本化操作 - 原生 GitHub 集成:通过 Actions 和 GitHub API 无缝集成
- 灵活的配置:项目可以自定义担保关键词、平台、权限等
总结与思考
Vouch 提出了一种在 AI 时代维护开源社区质量的新思路。传统的”信任但验证”在面对海量 AI 生成的低质量内容时显得力不从心,而显式的担保机制让我们可以重新掌控贡献质量。
关键要点:
- 担保不等于身份验证:这不是要验证你是谁,而是要验证社区中有人愿意为你的质量背书
- 可扩展的信任网络:项目间可以共享信任决策,形成一个更大的生态系统信任网络
- 灵活的权限控制:每个项目都可以根据自己的需求制定担保和谴责规则
- 简单而强大:使用简单的文本文件格式,可以被任何工具解析和操作
在 AI 工具日益普及的今天,Vouch 这样的系统可能会成为开源项目维护者的重要工具。它不是要排斥新的贡献者,而是要确保每一个进入项目的贡献都有质量保证。
当然,这也带来了一些思考:如何在开放性和质量控制之间找到平衡?如何避免担保机制变成封闭的小圈子?这些问题可能需要每个项目根据自己的社区文化来回答。
Vouch 目前还是实验性项目,但它的核心理念值得每一个面临 AI 生成内容挑战的开源维护者关注。