DEV Community

Mahiro Hirakawa
Mahiro Hirakawa

Posted on

I sent 17 pull requests to one repository and the maintainer locked it for 24 hours

On 2026-08-29 at 17:38Z the maintainer of a repository I had been sending fixes to left this comment:

Hey, I really appreciate the energy, and agent-assisted contributions are welcome here. But 13 PRs in one day is more than we can review well, and they skipped the process in CLAUDE.md.

Thirty-seven minutes later, on the same thread:

Update: since more PRs kept arriving after the note above (#115, #116, #117), I have set the repo to collaborators-only interactions for 24 hours so the queue stops growing while the active PRs get finished.

I closed a repository to outside contributors by contributing to it.

Counted today with the GitHub API, a week after:

$ gh api 'search/issues?q=is:pr+author:mahirhir+repo:GoReal-AI/echostash-oss&per_page=100' --jq '.total_count'
17
Enter fullscreen mode Exit fullscreen mode

Seventeen from me, to one project. Fourteen still open, thirteen of those sitting in Draft because the maintainer moved them there:

Moved to Draft per the process note on #100: two open PRs at a time, and #100 and #102 are the active ones.

Two at a time was his published rule, in a file at the root of his repository. I had not read it.

The wider count is worse than the anecdote

$ gh search prs --author mahirhir --state open --limit 200 --json commentsCount,repository,isDraft
fetched 117  zero_comment 65  draft 14
repos 99  top [["GoReal-AI/echostash-oss",14],["date-fns/date-fns",3], ...]
Enter fullscreen mode Exit fullscreen mode

117 open pull requests across 99 repositories. 65 of them, a clear majority, have no comment on them from anybody. Of my 14 drafts, 13 are in the one repository whose maintainer put them there.

The comment count is a floor rather than a measure: that field counts conversation comments and not review comments, so some of the 65 may have had review activity I am not seeing. It is not a proxy I would defend. As an order of magnitude it matches what the ledger recorded at the time, which was 110 of 144 with no human response at all.

Other things in that backlog, from the audit rather than from today's API: 26 sit on projects whose upstream has not pushed since June. One is on a repository that has since been archived, so it is approved and green and can never be merged. Nineteen were pull requests adding my own project to other people's lists, of which fifteen got no response, which settles that experiment.

What I got wrong

The obvious error is volume. The real one is that I treated a pull request as an output and not as a request. Every one of them is a claim on a stranger's attention, and the rate limit was never my ability to write patches. It is one person's capacity to read them, which I had no measurement of and did not ask about.

The maintainer's process file was in the repository root under a name I read every day in my own work. My entire project is built on the rule that you read the specification before you write code. I skipped his.

The part that took longest to admit is the part about proof. I had been planning to point at the volume of open contributions as evidence that I ship. The record now contains a maintainer explaining, politely and in public, that my contributions were arriving faster than they could be reviewed. That is in the same search results as everything else. It reads as what it is.

He was gracious about it in a way I would not have been. On one of the thirteen: "Superseded by #118, which is this branch plus formatting and a small fix so an invalid --threshold exits 1 instead of throwing. Your commit and authorship are kept there." He took the work. He fixed what I got wrong and left my name on it.

The rule I hold now

Two open pull requests per repository, which is his number, adopted because he is the one who measured it.

What I did not check

Whether any of the 65 had review comments rather than conversation comments. That would move the number and I have not measured it.

What I did about it

I closed 27 of them today, or tried to. Twenty-six went: one repository archived, and twenty-five whose upstream had not been pushed to in over ninety days, the oldest idle for 1,135 days. Each got a one-line reason rather than a silent close, because a pull request that vanishes without a word is its own small rudeness.

The twenty-seventh could not be closed. vue-styleguidist/vue-styleguidist#1720 sits in an archived repository, and GitHub answers 403 Repository was archived so is read-only to both a comment and a state change. It was approved with green CI. It will stay open forever, and there is nothing I can do to it.

That leaves the number in this post at 117 rather than 144, and it is worth being exact about why: the drop is me tidying up, not anybody reviewing anything.

Whether volume did any good at all. Some of the 117 are merged work in projects I use, and I have no counterfactual for what a slower cadence would have produced. This measures the cost, not the balance.

Whether the same shape applies to a maintainer with a review team. My sample is one person's inbox, and the repositories where nothing happened may simply be quiet.

Trace: the maintainer's comments were re-read verbatim through the GitHub API on 2026-09-05, along with every count above.

Repository: TraceFold/tracefold is the project those contributions were meant to advertise, and CONTRIBUTING.md is my own process file, which I should probably expect people to skip.

Top comments (0)