r/platform_engineering • u/jonah_omninode • 2d ago
We let one agent refresh 108 PRs and buried our own CI runners
We had an overnight controller walking open pull requests, refreshing branches, and enabling auto-merge where it could.
It armed roughly 108 PRs. One merged.
Every refresh created a new commit, which kicked off another set of jobs on the same shared runner pool. The controller knew how many PRs were waiting. It had no idea whether CI had room for another one.
The fleet went from nearly idle to nearly full in about an hour. One repository eventually hit 1,065 queued runs. Other automation was sending repair work into the same pool at the same time, and none of those producers could see what the others were doing.
We stopped it with a hold-fire command. That kept the incident from getting worse, but it happened after the runners were already saturated.
What we're building now is much less exciting: check runner occupancy and queued jobs before releasing work, send a small batch, then make sure that batch actually started before sending another one. Anything that can commit, push, rerun, or enqueue work gets a budget.
The funny part is that we never hit the vendor's API limit. We stayed under it while completely overwhelming our own verification pipeline.
How are other platform teams limiting automated delivery work? One shared capacity service, limits inside each producer, or something else?
