[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-75094":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},75094,"vouch","mitchellh\u002Fvouch","mitchellh","A community trust management system based on explicit vouches to participate.","",null,"Nushell",4736,87,12,0,114,288,346,342,107.83,"MIT License",false,"main",[],"2026-06-12 04:01:17","\u003Ch1 align=\"center\">Vouch\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  A community trust management system.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"FAQ.md\">FAQ\u003C\u002Fa> · \u003Ca href=\"COOKBOOK.md\">Cookbook\u003C\u002Fa> · \u003Ca href=\"CONTRIBUTING.md\">Contributing\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\nPeople must be **vouched for** before\ninteracting with certain parts of a project (the exact parts are\nconfigurable to the project to enforce). People can also be explicitly\n**denounced** to block them from interacting with the project.\n\nThe implementation is generic and can be used by any project on any code forge,\nbut we provide **GitHub integration** out of the box via GitHub actions\nand the CLI.\n\nThe vouch list is maintained in a single flat file using a minimal format\nthat can be trivially parsed using standard POSIX tools and any programming\nlanguage without external libraries.\n\nThis project is based on the already successful system in use by\nthe [Pi project](https:\u002F\u002Fgithub.com\u002Fbadlogic\u002Fpi-mono). I took what they\nalready do and extracted it into a more generalizable system with some\nother changes.\n\n> [!WARNING]\n>\n> This is an experimental system in use by [Ghostty](https:\u002F\u002Fgithub.com\u002Fghostty-org\u002Fghostty).\n> We'll continue to improve the system based on experience and feedback.\n\n## Why?\n\nOpen source has always worked on a system of _trust and verify_.\n\nHistorically, the effort required to understand a codebase, implement\na change, and submit that change for review was high enough that it\nnaturally filtered out many low quality contributions from unqualified people.\nFor over 20 years of my life, this was enough for my projects as well\nas enough for most others.\n\nUnfortunately, the landscape has changed particularly with the advent\nof AI tools that allow people to trivially create plausible-looking but\nextremely low-quality contributions with little to no true understanding.\nContributors can no longer be trusted based on the minimal barrier to entry\nto simply submit a change.\n\nBut, open source still works on trust! And every project has a definite\ngroup of trusted individuals (maintainers) and a larger group of probably\ntrusted individuals (active members of the community in any form). So,\nlet's move to an explicit trust model where trusted individuals can vouch\nfor others, and those vouched individuals can then contribute.\n\n## Who is Vouched?\n\n**Who** and **how** someone is vouched or denounced is left entirely up to the\nproject integrating the system. Additionally, **what** consequences\na vouched or denounced person has is also fully up to the project.\nImplement a policy that works for your project and community.\n\n## Usage\n\n### GitHub\n\nIntegrating vouch into a GitHub project is easy with the\n[provided GitHub Actions](https:\u002F\u002Fgithub.com\u002Fmitchellh\u002Fvouch\u002Ftree\u002Fmain\u002Faction).\nBy choosing which actions to use, you can fully control how\nusers are vouched and what they can or can't do.\n\nFor an example, look at this repository! It fully integrates vouch.\n\nBelow is a list of the actions and a brief description of their function.\nSee the linked README in the action directory for full usage details.\n\n| Action                                                        | Trigger               | Description                                                                                                                                                                                |\n| ------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| [check-issue](action\u002Fcheck-issue\u002FREADME.md)                   | `issues`              | Check if an issue author is vouched on open or reopen. Bots and collaborators with write access are automatically allowed. Optionally auto-close issues from unvouched or denounced users. |\n| [check-pr](action\u002Fcheck-pr\u002FREADME.md)                         | `pull_request_target` | Check if a PR author is vouched on open or reopen. Bots and collaborators with write access are automatically allowed. Optionally auto-close PRs from unvouched or denounced users.        |\n| [check-user](action\u002Fcheck-user\u002FREADME.md)                     | Any                   | Check if a GitHub user is vouched. Outputs the user's status and fails the step by default if the user is not vouched. Set `allow-fail` to only report via output.                         |\n| [manage-by-discussion](action\u002Fmanage-by-discussion\u002FREADME.md) | `discussion_comment`  | Let collaborators vouch, denounce, or unvouch users via discussion comments. Updates the vouched file and commits the change.                                                              |\n| [manage-by-issue](action\u002Fmanage-by-issue\u002FREADME.md)           | `issue_comment`       | Let collaborators vouch or denounce users via issue comments. Updates the vouched file and commits the change.                                                                             |\n| [sync-codeowners](action\u002Fsync-codeowners\u002FREADME.md)           | Any                   | Sync CODEOWNERS owners into the vouch list by vouching missing users.                                                                                                                      |\n| [setup-vouch](action\u002Fsetup-vouch\u002FREADME.md)                   | Any                   | Install the `vouch` CLI on `PATH`. Nushell is installed automatically if not already available.                                                                                            |\n\n### CLI\n\nThe CLI is implemented as a Nushell module and only requires\nNushell to run. There are no other external dependencies.\n\n#### Integrated Help\n\nThis is Nushell, so you can get help on any command:\n\n```nu\nuse vouch *\nhelp add\nhelp check\nhelp denounce\nhelp gh-check-issue\nhelp gh-check-pr\nhelp gh-manage-by-issue\n```\n\n#### Local Commands\n\n**Check a user's vouch status:**\n\n```bash\nvouch check \u003Cusername>\n```\n\nExit codes: 0 = vouched, 1 = denounced, 2 = unknown.\n\n**Add a user to the vouched list:**\n\n```bash\n# Preview new file contents (default)\nvouch add someuser\n\n# Write the file in-place\nvouch add someuser --write\n```\n\n**Denounce a user:**\n\n```bash\n# Preview new file contents (default)\nvouch denounce badactor\n\n# With a reason\nvouch denounce badactor --reason \"Submitted AI slop\"\n\n# Write the file in-place\nvouch denounce badactor --write\n```\n\n#### GitHub Integration\n\nRequires the `GITHUB_TOKEN` environment variable. If not set and `gh`\nis available, the token from `gh auth token` is used.\n\n**Check if an issue author is vouched:**\n\n```bash\n# Check issue author status (dry run)\nvouch gh-check-issue 123 --repo owner\u002Frepo\n\n# Auto-close unvouched issues (dry run)\nvouch gh-check-issue 123 --repo owner\u002Frepo --auto-close\n\n# Actually close unvouched issues\nvouch gh-check-issue 123 --repo owner\u002Frepo --auto-close --dry-run=false\n\n# Allow unvouched users, only block denounced\nvouch gh-check-issue 123 --repo owner\u002Frepo --require-vouch=false --auto-close\n```\n\nOutputs status: `skipped` (bot\u002Fcollaborator), `vouched`, `allowed`, or `closed`.\n\n**Check if a PR author is vouched:**\n\n```bash\n# Check PR author status (dry run)\nvouch gh-check-pr 123 --repo owner\u002Frepo\n\n# Auto-close unvouched PRs (dry run)\nvouch gh-check-pr 123 --repo owner\u002Frepo --auto-close\n\n# Actually close unvouched PRs\nvouch gh-check-pr 123 --repo owner\u002Frepo --auto-close --dry-run=false\n\n# Allow unvouched users, only block denounced\nvouch gh-check-pr 123 --repo owner\u002Frepo --require-vouch=false --auto-close\n```\n\nOutputs status: `skipped` (bot\u002Fcollaborator), `vouched`, `allowed`, or `closed`.\n\n**Manage contributor status via issue comments:**\n\n```bash\n# Dry run (default)\nvouch gh-manage-by-issue 123 456789 --repo owner\u002Frepo\n\n# Actually perform the action\nvouch gh-manage-by-issue 123 456789 --repo owner\u002Frepo --dry-run=false\n```\n\nResponds to comments from collaborators with sufficient role\n(admin, maintain, write, or triage by default):\n\n- `vouch` — vouches for the issue author\n- `vouch @user` — vouches for a specific user\n- `vouch \u003Creason>` — vouches for the issue author with a reason\n- `vouch @user \u003Creason>` — vouches for a specific user with a reason\n- `denounce` — denounces the issue author\n- `denounce @user` — denounces a specific user\n- `denounce \u003Creason>` — denounces the issue author with a reason\n- `denounce @user \u003Creason>` — denounces a specific user with a reason\n\nKeywords are customizable via `--vouch-keyword` and `--denounce-keyword`.\nYou can also allow specific managers listed in a separate VOUCHED file\nvia `--vouched-managers`.\n\nOutputs status: `vouched`, `denounced`, or `unchanged`.\n\n### Library\n\nThe module also exports a `lib` submodule for scripting:\n\n```nu\nuse vouch\u002Flib.nu *\n\nlet records = open VOUCHED.td\n$records | check-user \"mitchellh\" --default-platform github  # \"vouched\", \"denounced\", or \"unknown\"\n$records | add-user \"newuser\"                                # returns updated table\n$records | denounce-user \"badactor\" \"reason\"                 # returns updated table\n$records | remove-user \"olduser\"                             # returns updated table\n```\n\n## Vouched File Format\n\nThe vouch list is stored in a `.td` file. See\n[VOUCHED.example.td](VOUCHED.example.td) for an example. The file is\nlooked up at `VOUCHED.td` or `.github\u002FVOUCHED.td` by default.\n\n```\n# Comments start with #\nusername\nplatform:username\n-platform:denounced-user\n-platform:denounced-user reason for denouncement\n```\n\n- One handle per line (without `@`), sorted alphabetically.\n- Optionally specify a platform prefix: `platform:username` (e.g., `github:mitchellh`).\n- Denounce a user by prefixing with `-`.\n- Optionally add details after a space following the handle.\n\nThe `from td` and `to td` commands are exported by the module, so\nNushell's `open` command works natively with `.td` files to decode\ninto structured tables and encode back to the file format with\ncomments and whitespace preserved.\n\n> [!NOTE]\n>\n> **What is `.td`?** This stands for \"Trustdown,\" a play on the\n> word \"Markdown.\" I intend to formalize a specification for trust\n> lists (with no opinion on how they're created or used) so that software\n> systems like this Vouch project and others can coordinate with each\n> other. I'm not ready to publish a specification until vouch itself\n> stabilizes usage more.\n","Vouch 是一个基于显式推荐参与的社区信任管理系统。其核心功能包括用户在与项目特定部分交互前需被他人推荐，同时也可以被明确地禁止参与项目活动。技术特点方面，Vouch 采用通用设计，支持任何代码托管平台，并且内置了通过 GitHub Actions 和命令行工具实现的GitHub集成。信任列表以简洁格式保存在一个文件中，便于使用标准POSIX工具或任意编程语言解析。适用于希望增强贡献者信任度管理的开源项目，特别是在面临低质量提交风险增加的情况下。",2,"2026-06-11 03:52:18","high_star"]