Summary
Add automated PR hygiene workflows to enforce contribution quality and clean up abandoned PRs.
Motivation
External contributors often open PRs without addressing failing checks (DCO, semantic title, etc.) and never come back. The PR template and CONTRIBUTING.md already ask for linked issues and proper formatting, but nothing enforces it. PRs rot indefinitely.
Deliverables
Linked issue check (pr-linked-issue.yml)
- Required status check for non-collaborators: PR must reference a triaged issue via
Fixes #N / Closes #N / Resolves #N
- Collaborators bypass the check (pass with optional soft warning)
- Re-checks automatically when a maintainer adds the
triaged label to the linked issue
Stale PR cleanup (pr-stale.yml)
- Daily cron scans open PRs with failing checks and no author activity
- Non-collaborators: reminder at 7 days, auto-close at 14 days
- Collaborators: reminder at 14 days, auto-close at 28 days
keep-open label as escape hatch
New labels
triaged - maintainer approval gate for external PRs
task - auto-label for development-task issue template (currently missing)
keep-open - prevent stale-PR auto-close
Docs
- CONTRIBUTING.md update explaining the linked-issue requirement
- Standalone plan in
plans/
Non-goals
- No agent or self-hosted runner involvement - plain GitHub Actions on ubuntu-latest
- Not part of the agentic CI plan (plans/472)
Summary
Add automated PR hygiene workflows to enforce contribution quality and clean up abandoned PRs.
Motivation
External contributors often open PRs without addressing failing checks (DCO, semantic title, etc.) and never come back. The PR template and CONTRIBUTING.md already ask for linked issues and proper formatting, but nothing enforces it. PRs rot indefinitely.
Deliverables
Linked issue check (
pr-linked-issue.yml)Fixes #N/Closes #N/Resolves #Ntriagedlabel to the linked issueStale PR cleanup (
pr-stale.yml)keep-openlabel as escape hatchNew labels
triaged- maintainer approval gate for external PRstask- auto-label for development-task issue template (currently missing)keep-open- prevent stale-PR auto-closeDocs
plans/Non-goals