Fix failing CI runs with an AI agent, in the same pull request

Treat a failed check like a review comment: capture the failing output, hand it to an agent together with the pull request's context, and land the fix as one more commit on the same branch so the checks run again. ProPR does this on its own once automatic CI follow-up is on for the repository; on public propr #2628 the fix commit landed within four minutes of the failure.

Overview

How to fix CI failures automatically without losing the review

Four rules keep an automatic fix reviewable:

  • The fix lands on the same branch and pull request, as a normal commit, so reviewers see it in the thread they already have open.
  • The failure evidence travels with the request: which check, which commit, the run link and the output, so the agent fixes the real failure and the reviewer sees what it was given.
  • The checks run again on the new commit, and the agent never decides whether they passed.
  • A person still merges.

Turn it on for the repository

Switch on automatic CI follow-up in the repository settings. From then on, a failed check on a ProPR pull request starts a fix without anyone pasting anything. The follow-up docs cover the settings.

Auto CI follow-up switched on for storefront-web: when a GitHub Actions run fails, ProPR sends a corrective task

What happens when a check fails

ProPR posts the failure on the pull request: the check, the commit, a link to the run and the failure evidence from the check's output. An agent reads that failure with the PR's context in an isolated workspace, ProPR pushes the fix to the same branch, and the completion comment explains what changed, with links to the task, the commit and an undo. Your checks run again on the new commit.

On public propr #2628, the Validate Changes check failed on a lint rule at 13:05 UTC. GPT-6 Astra brought the file under the 400-line limit, and ProPR pushed fix commit 9296e95 at 13:08.

Public ProPR pull request 2628 on GitHub: a propr-dev comment CI failed: Validate Changes, Please investigate and fix this CI failure, with the check, result failure, commit 73029d8e7de2, a View CI failure link and the failure evidence; then the propr-dev reply Applied the requested follow-up changes in commit 9296e95 with its Summary of Changes, fixing the lint failure by consolidating duplicated logging in VibeAgent.ts below the 400-line limit; then the 9296e95 commit row with a passing check.
Public propr #2628, shortened to the relevant parts.

Paste the failure yourself, and keep CI out of the loop's way

Without the setting, copy the failing output into a PR comment and the fix lands the same way, as a follow-up commit. Ultrafix, the review-and-fix loop, waits for the blocking checks to go green before it starts the next cycle, so a red check never gets buried under another fix pass.

Two repository settings keep CI from fighting the agent. Name checks by pattern, such as lint-*, and their failures stop holding up /merge, auto-merge and Ultrafix while GitHub still shows every result. Name the workflows whose runs ProPR cancels the moment a follow-up starts, so CI minutes go to the commit that matters. Both settings.

Checks that never block automation on storefront-web: lint-* and Lighthouse budget
Checks that never block automation, named by pattern.

A stale branch is a CI failure too

When the base branch moves and the pull request no longer merges cleanly, comment /merge. ProPR merges the base branch into the PR branch, resolves the conflicts in an isolated task and pushes a real merge commit; your checks verify it like any other commit, and the pull request waits for you. Turn on automatic conflict resolution per instance or per repository and the update happens without the comment. Resolve branch conflicts.