Vouch System
- First-time external contributors must be vouched before their PRs are accepted. The
vouch-checkworkflow auto-closes PRs from unvouched users. vouch-checkruns on a schedule (every 10 minutes) and onworkflow_dispatch, not onpull_request_target(#9245). It runsscripts/vouch-sweep.sh, which reads PR metadata through the API and never checks out PR code. Only PRs opened or reopened in the last 60 minutes are checked, so overlapping runs cover a missed or late cron run and older open PRs are left alone. An unvouched PR can therefore stay open for up to about 10 minutes before it is closed.- To preview a sweep without closing or commenting, run
scripts/vouch-sweep.sh --dry-run fullsend-ai/fullsendwith aGH_TOKENthat can read the repository. - Org members and collaborators with write access bypass the vouch gate automatically.
- Maintainers vouch users by commenting
/vouchon a Vouch Request discussion. Thevouch-commandworkflow appends the username to.github/VOUCHED.tdon thevouchedbranch. - Agent bot identities (
fullsend-ai-*[bot],renovate-fullsend[bot],github-actions[bot]) are skipped automatically because they haveuser.type: 'Bot'. - The
vouchedbranch is protected — only thevouch-commandworkflow (viaGITHUB_TOKEN) can push to it. Do not push to, rebase, or target PRs at thevouchedbranch. - The vouch gate is separate from the e2e authorization gate. Vouch determines whether a PR stays open; e2e authorization determines whether tests run.
- PRs from unvouched external contributors are automatically closed with a comment linking to the vouch process. The PR is closed before the comment is posted, and the comment (marker
<!-- vouch-check -->) is posted once per PR, even when overlapping runs or a reopen close it again. - An API error never closes a PR: a failed
VOUCHED.tdread aborts the sweep, and a failed permission lookup skips that PR until the next run. - PRs should follow the PR template structure: Summary, Related Issue, Changes, Testing, Checklist.
