copilot-pr-squad, part 3 of 6 · October 12, 2026

Telling the loop what isn’t its problem

The most common way the squad wasted a round was asking Copilot to fix something that wasn’t Copilot’s to fix. Each case became a rule for recognizing it.

Part 3 of 6 in a series on copilot-pr-squad, a small team of AI agents, built on bradygaster/squad, that drives my GitHub Copilot coding-agent pull requests. New here? Start with Part 1.

Where a failure comes from

When a check fails on a PR, the failure can come from a few places: an infra issue (including Copilot itself being down), a main that was already broken, or the PR itself. Only the last one is Copilot’s to fix. The squad learned to tell them apart one wasted round at a time, and each case became a rule:

Who broke the build: the squad rules out a cancelled build, then a broken main, holds everything while Copilot itself is down, and only sends a failure to Copilot when the PR broke itA check failson a PRWas the buildcancelled?yesWait an hour, thenask for afresh buildnoDoes main failthe same way?yesTracked: leave it,cite the issue.New: ask me oncenoAre Copilot’s ownsessions failing?yesHold every PRuntil CopilotrecoversnoThe PR caused it:one commentto CopilotBuild infra issueMain was brokenCopilot is downThe PR broke it
Simplified: only the last box asks Copilot for a fix. Each earlier question was added after a run wasted a round on it.

Infra issue

Main was broken

The PR broke it

Only a failure that gets past all of those reaches Copilot, as one comment.

The fix that never ran

The cancelled-build rule taught me the most, because the first version of it never actually ran.

The rule shipped and its tests passed. A fix on top of it shipped, and its tests passed too. But the rule needed two details about each build from GitHub, and the script that fetches build results never asked for them. In real runs the rule could see that a build was cancelled, but never when, so it never acted. The tests didn’t catch it because their sample data already included those two details.

Two PRs sat at “build pending” for 16 hours before a run log showed what was happening. Release 0.5.2 fixed it on Oct 8, with a test that fails if the script stops fetching the details the build rules need.

Only a real run proves a fix. Test against data captured from the real system.