How to deal with AI PRs #1508
Replies: 17 comments 23 replies
~ Frank Herbert, Dune I spent about a month reviewing a flood of AI-assisted pull requests for icalendar. It became clear to me that most of the contributors did not understand the code. I became the prompt to an AI agent to correct its mistakes. Many of the pull requests were for esoteric use cases that would never be experienced in practice, and were difficult for me to understand. The burden to review such pull requests was beyond what I can sustain as a volunteer. At this point, I've stopped reviewing any pull request that smells like AI was involved in its use. I enjoy contributing to open source software to experience learning, understanding, and discovery, then sharing that experience with other people. AI gets in the way of that experience. It has been sold as a way to be more productive, but producing more slop is unwanted, erodes trust, and distracts core collaborators from being productive themselves. I want to have a significant and positive impact in both icalendar and the community that surrounds it. I don't understand the motivation behind creating 50-100 pull requests in 3 weeks to external repositories. It's impossible that these contributors could understand all that code. Clearly they don't share the same values that I have for contributing to open source. It seems that they're gamifying contributions to get the highest score, and have no concern whatsoever to the negative impact that they cause. I think it's time to establish a gateway to contribute, ensuring that we have quality contributions, not quantity. Such a gateway would include the follow points. Only trusted contributors are excepted from these requirements.
|
|
Potentially contributing to the "AI arms race", I asked Claude to have a look into all the open pull requests. A lot of pull requests can probably be closed right away as "AI-slop", but Claude Opus warned that it may be "socially expensive" should any false positives be flagged as "AI-slop". Claude Opus also insisted on "softening the message" before going public with it. Here is the public version: (post-edit: Any observant reader would be able to see that the "full disclosure" given by Opus below is not a "full disclosure" - I did give some few additional follow-up prompts and answers to questions, including the wish to publish it in this discussion). This is a direct attempt at @niccokunzmann's question "How can we assess quickly if a PR is worth reviewing before another?" — a worked triage of the current 32 open PRs, produced by exactly the kind of tool the discussion is worried about. I'm posting it in that spirit: as a labour-saving data-point for the human reviewers, not as a verdict. Treat every "close"/"AI" call below as a suggestion to be checked by a person. Full disclosure of method. This was generated by pointing Claude Code at the repo with this verbatim prompt (typos and all):
It then read every PR's diff, fetched the linked issues, and applied the project's The big pictureThe backlog is not mostly spam — it's mostly good-first-issue / docstring churn plus a wave of AI-assisted PRs, most honest, a few not. The bottleneck is reviewer attention, not malice. Three patterns explain the pile:
Tally: ~7 merge-ready or nearly so, 3 close candidates, ~22 need a round-trip (several only a rebase/approval away). ⭐ A — Merge (or merge after one approval / rebase)
🛑 B — Close candidates (with a courteous reason)
🔁 C — Send back for review (priority order)Real fixes, nearly there — need a maintainer decision:
On hold by your own decision: #1468 (alhudz) — sound security fix, but you deferred all lone- Legit but incomplete: #1318, #1336, #1385, #1387 (finishing touches), #1438, #1492 (changelog + the RFC context the issue asked for), #1342 (broken RST, no changelog — lean close), #1362 (uwezkhan — undiscussed breaking change, should be The #1504–#1507 burst (checkzhao8888): four same-day docstring PRs, all on #1473. Not spam — content is correct (a couple fix real doc bugs), AI use disclosed. But handle as one coordinated review: they collide on news-fragment names ( 🤖 Human vs AI (soft signal — guesswork, confidence noted)This is the part to take with most salt. It is offered only to help you spend attention where a human is on the other end.
Two concrete ideas feeding @niccokunzmann's proposals
And one for the welcoming half of your motivation: the disclosed-AI contributors above are doing exactly what the policy asks. If they get bounced together with the undisclosed bots, the lesson learned is "don't disclose," which is the opposite of what we want. Worth rewarding the disclosure explicitly. Methodology, raw per-PR notes, and the diffs behind each call are available — happy to share if useful. Errors are mine (well, the model's); please correct anything I got wrong about your PR. |
|
I found this project because I needed some framework to parse ical files. Somehow, I got stuck here and after some long dormant time, I found joy (and mostly time) in reviewing Code again. From my work background, I like to teach people how to write good code and checking PRs is somehow practice for me. Currently I only react to PRs that mention me in some way. With those, I have no trouble keeping up. I ignore the ones about documentation, mainly because I do not know what we expect. Reviewing some PRs where you added the AI suspicion flag, I noticed that I do not spot that as reliable. Mainly because I focus on the code and if it works, it is usually fine for me. Since I do not trust any contribution to work, I will not have more work with code that is not understood by the “author”. It may be possible to be stricter with closing PRs without activity, especially when some reviewer already requested something. Giving a few days’ notice to give them a last chance to respond. We may even say that they can recreate a PR with addressed concerns. A few months from now, my available time for foss will be quite restricted. So just be warned about that. But I have no special boundaries for reviewing. I do it when I have some time and will so in the future. If that are just agents, sad for the community and programming culture but personally I had my fun. Don’t worry about loosing me because of AI :) My working hours (or minutes scattered around the day) do not fit well with calls where someone can join to ask questions. And please do not take this personally but I don’t care who you are. @niccokunzmann I would not participate in the [Office Hours] suggestion as a maintainer, but I see potential for faster reviews if I can join a call to ask some question. |
|
I closed #1507, #1506 and #1505 as AI spam because there is already a PR open #1504 that requires feedback. A first-timer cannot expect to open several PRs at once and get it right. It is a waste of time to duplicate feedback across PRs that are AI generated. As such, multiple open PRs by one first-timer - from my view - can be closed until the first one of them is merged. |
|
I wasted a couple of hours trying to automate the detection of bots in each commit in #1514. I gave up. There's probably an easier way of doing it by checking the username and email. |
This comment has been hidden.
This comment has been hidden.
|
I've been lurking on this thread while doing PR reviews, and I think it's time I added my two cents since I'm the one who actually wired up the gh-profiler workflow. Angatha's suggestion about open PR counts is something I can act on directly. Right now the profiler comment shows account age and contribution history, but it says nothing about how many PRs from this person are currently open. If I had seen "5 open PRs, 4 flagged ai-suspicion" on the first Zo Bot PR, I would have closed it the same day. I'll look into whether gh-profiler supports that signal or whether we need to pull it from the GitHub API ourselves in the workflow and prepend a line. Either way, that's a concrete and low-risk improvement. On the commit-check-action question Steve raised: I went back and looked at the security picture for running it on forks. The concern with On HrachShah specifically: I'd echo angatha on watching what happens after the suspension lifts. A temporary block + a clear message about what needs to change is the right first step. If the pattern continues unchanged, permanent makes sense. I wouldn't report to GitHub yet; that's a higher-stakes action and the situation doesn't feel like it's crossed that line yet, but I defer to Steve and Nicco here since they've been in the weeds on this longer than I have. On the broader gatekeeping question: the thing I keep coming back to from this thread is that Nicco's "quick PR closing" idea and the allow list are actually complementary, not alternatives. Closing fast when the template isn't followed raises the floor. The allow list rewards people who clear that floor and stick around. You need both. Without the closing side, the allow list is just a different flavor of the same bottleneck. And given that the broader ecosystem (tldraw, Ghostty, curl's bug bounty) is moving toward much more aggressive measures, closing a PR for missing a changelog entry feels pretty mild by comparison. Office hours: I like the idea in principle, but I can't commit to a fixed slot. My schedule is unpredictable enough that I'd miss more sessions than I'd make, which would be worse than not signing up at all. That said, I think it's worth doing even without me, and pointing contributors toward it explicitly in the auto-close message would make a real difference, so there's a clear "here's how to actually engage" path when we close a template-incomplete PR. |
|
As another option for AI slop detection, I just stumbled across https://github.com/marketplace/actions/anti-slop in the GitHub Marketplace after reading the entire article, but jumping to the section What You Can Do Right Now. It appears to check all the boxes for what we want. If y'all think it looks promising, I can make a PR to add it. I think that commit-check or its GHA are a dead end, so I'd remove it in a separate PR. I like what gh-profiler offers, and I think it would be good to compare it against anti-slop with some actual experience. Side note, I checked the author of anti-slop, and they're a core contributor to coolify, an OSS project that I've never heard about until today. I read a few docs, and watched parts of some third party video tutorials, and now I'm eager to try it myself. |
|
I just read a post and ensuing replies on Mastodon that clearly expresses why I don't like to review PRs where AI was used. https://fosstodon.org/@jwildeboer@social.wildeboer.net/116860158248942940 |
|
I was reviewing #1536 and noticed that the new PR tempalte check did not marked anything on the PR. (I saw the problems with closing the PR automatically) The action log shows the faillure but it is not shown on the PR. Action even succeeded: https://github.com/collective/icalendar/actions/runs/29100015955/job/86386185744?pr=1536
PR is even marked as "PR quality: good" despite having these problems as well as no changelog. When is this lable added? |
|
Two AI PRs came through to "fix" #1532.
The anti-slop bot flagged them both. Good bot! I'd suggest we all wait to review, or even comment on, such PRs until they respond to or comply with the comment we configured in the anti-slop bot, specifically, "Please review Contribute and make any necessary amendments." I prefer that they prove that they're human. If they don't respond within 7 days, close the PR. However, should I adjust any of the bot settings, per the failed checks? After expanding the checks at the end of each PR, click "PR Quality / anti-slop (pull_request_target)", then the "Summary" tab in the upper left to get a nice view. For convenience: |
|
We've recently had a serial AI commenter: https://github.com/collective/icalendar/issues?q=is%3Aissue%20state%3Aopen%20commenter%3Asaisharan0103 I'm inclined to delete their comments as AI slop, as they merely repeat what has already been described, adding no value or pull request. |
|
I would say the commenter can be deleted, blocked and reported. You wrote to them. They did not take care of what their account was doing but instead it looked to me like they would confuse other people. That behaviour is not welcome, not personal, damaging for newcomers, takes up our time. I would welcome not reading another such message.
|
|
It looks like comments are the AI slop of the day. |
|
#1432 @aniketaggarwal has been blocked from the collective organization. Their comments have been hidden as low-quality. |
This comment was marked as disruptive content.
This comment was marked as disruptive content.
|
Maybe we need to increase |

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Having a lot of open pull requests is nice. However, we struggle to review them all.
See #1470
My assessment - constraints, motivation and values (please add yours in your reply):
Questions I have:
Please answer with:
My motivation:
Possible solutions:
Inspiration: NLNet: https://nlnet.nl/officehour/
Less favourite solutions:
I know that we are not the only ones struggling with spam and higher load. It is not our responsibility to shoulder that load. It is the contributors' responsibility to show quality. So, there are solutions out there and I invite others who see them to also answer.
Specifically asking you, the team: How would you like to go forward with this?
@stevepiercy @SashankBhamidi @abe-101 @angatha @jacadzaca @ennamarie19 @geier @lcampanella98
All reactions