Repository navigation
Replies: 2 comments 1 reply
Enhancement: Market Context, Prior Art, and Implementation OptionsProblem Framing — SharperThe spam/low-effort PR problem has escalated from a seasonal Hacktoberfest nuisance to a year-round structural challenge. GitHub reported site-wide merged PRs grew from 25 million/month (January 2023) to 90 million/month (March 2026) — a 3.6× increase driven partly by AI-assisted contributions. High-profile projects have already taken drastic measures: curl shut down its bug bounty after AI hallucinations comprised 20% of security reports, Apache Airflow saw fake issues nearly double from AI submissions, and Ghostty implemented zero-tolerance for drive-by AI PRs with permanent bans for repeat offenders. The proposal's motivating incident (a name-as-title, template-unfilled, typo-introducing PR from a brand-new account) is textbook — and the 37-day stale-manager gap means noise compounds. This is the right time to build a layered defense. Prior Art & Competitive LandscapeGitHub-native controls (shipped since the proposal was drafted):
Community tooling:
Key takeaway: GitHub's native PR caps handle the volume axis well but leave a quality gap — exactly what the proposed Options Table
Recommendation: Option D offers the best risk/reward. It layers GitHub's volume controls with a focused custom quality gate, and the custom component is designed to shrink over time as GitHub ships smarter bypass signals and cross-repo controls. The proposal's scoring table is a strong starting point — just trim it to the highest-signal checks. Risks & Unknowns
Phased Validation Path
Concrete Success Metrics
Answers to Open Questions
|
|
📋 Initiative planned by the BMAD Scrum Master (Bob). Epic #1200 — Org standard: automated spam / low-effort outside-PR handling (spam-pr-guard) 7 stories created (inert — labelled
Open questions for review:
Review the epic and its sub-issue DAG, adjust as needed, then add |
Uh oh!
There was an error while loading. Please reload this page.
Summary
Public org repos accept PRs from anyone. Spam and low-effort PRs currently sit open until a
maintainer notices them, attract third-party bot noise, and can consume automation budget. This
proposes an org standard: deterministic scoring, staged actions (label, then close), and a
dry-run rollout, so maintainers only see PRs worth their time.
Motivating incident
petry-projects/.github-private#1976(2026-09-29):mainby a brand-new account (FIRST_TIME_CONTRIBUTOR); created andupdated within about 90 seconds.
stale-managerwould not have closed it for about 37 days.Findings from the existing tooling (.github-private)
sc_description_missing(
scripts/lib/safety-checks.sh) greps the body for words likeproblem,riskandrollback. The template's own headings and HTML comments contain them, so an empty templatereports 0 of 5 sections missing.
not agent cost, unless a maintainer labels or dispatches something on them.
Proposed standard
Layer 0: GitHub-native settings (no code)
Layer 1:
spam-pr-guardworkflow (Class 1, event-driven)pull_request_targetonopened,edited,reopened. No schedule.author_associationofNONE,FIRST_TIME_CONTRIBUTORorFIRST_TIMER, or PRs from forks. Never members, collaborators or bots.pull-requests: writeandissues: write.scripts/spam-pr-score.sh, deterministic, no LLM):needs-infolabel plus one marker-keyed comment askingfor the missing sections; high =
spamlabel, explanatory comment (with how to reopen),close as
not_planned.DRY_RUNmode for about 2 weeks before label/close is enabled.Layer 2: fix the description check
Strip HTML comments and headings before matching, and require real text under each section.
Add a bats test using the #1976 body as a fixture.
Layer 3: backstop and reporting
needs-infowith no response.Design constraints
docs/agentic-interaction-model.mdand an
interaction-contracts/<name>.yml.low).
Rollout
Open questions
.github-privateonly, or every public org repo (via a reusable workflow and acaller stub)?
standards/in this repo)?All reactions