Pull-request feedback
Started when a pull request gets review feedback a pull-request feedback trigger selects — a changes-requested review or an explicit /auto-swe fix comment. The round is re-read from the host and the member threads screened, fixed by the review fixer or by the agent that opened the pull request, pushed onto the pull request’s branch as a fast-forward, reported back on the pull request, and followed up once when the pushed commit fails CI. Never changes workflow files and never merges.
| Template | address-pr-feedback |
| Works on | A git repository, cloned into an isolated Docker sandbox |
| Where a person acts | Nobody inside the run. The pull request it opens is merged by a person, outside it. |
The workflow
Section titled “The workflow”Drawn from the template spec at build time. Bookkeeping nodes that only record status are left out; amber nodes are where a person acts.
flowchart TD
n_gather["Gather"]
n_routeDecision{"Route decision?"}
n_routeFixer{"Route fixer?"}
n_respondSkipped["Respond skipped"]
n_agentFix["Agent fix"]
n_fix["Fix"]
n_skipped(["Skipped"])
n_checkAgentFix{"Check agent fix?"}
n_checkFix{"Check fix?"}
n_respondFixFailed["Respond fix failed"]
n_checkChanged{"Check changed?"}
n_runLint["Run lint"]
n_cleanupFixFailed["Cleanup fix failed"]
n_respondNoChange["Respond no change"]
n_pushFix["Push fix"]
n_runTypecheck["Run typecheck"]
n_failedFix(["Failed<br/><small>failed fix</small>"])
n_cleanupNoChange["Cleanup no change"]
n_checkPushed{"Check pushed?"}
n_runTests["Run tests"]
n_doneNoChange(["Done<br/><small>done no change</small>"])
n_checkPushThrew{"Check push threw?"}
n_respondPushRefused["Respond push refused"]
n_respondPushThrew["Respond push threw"]
n_respondPushed["Respond pushed"]
n_cleanupRefused["Cleanup refused"]
n_watchCi["Watch CI"]
n_failedPush(["Failed<br/><small>failed push</small>"])
n_checkWatchCi{"Check watch CI?"}
n_respondCiUnknown["Respond CI unknown"]
n_checkCi{"Check CI?"}
n_finishPush["Finish push"]
n_checkRetry{"Check retry?"}
n_respondCiOk["Respond CI ok"]
n_done(["Done"])
n_respondCiFailed["Respond CI failed"]
n_fetchLogs["Fetch logs"]
n_finishPushFailed["Finish push failed"]
n_routeRetry{"Route retry?"}
n_failed(["Failed"])
n_retryAgentFix["Retry agent fix"]
n_retryFix["Retry fix"]
n_checkRetryAgent{"Check retry agent?"}
n_checkRetryFix{"Check retry fix?"}
n_pushAgain["Push again"]
n_checkPushedAgain{"Check pushed again?"}
n_watchCiAgain["Watch CI again"]
n_checkWatchCiAgain{"Check watch CI again?"}
n_checkCiAgain{"Check CI again?"}
n_gather --> n_routeDecision
n_routeDecision -->|"yes"| n_routeFixer
n_routeDecision -->|"no"| n_respondSkipped
n_routeFixer -->|"yes"| n_agentFix
n_routeFixer -->|"no"| n_fix
n_respondSkipped --> n_skipped
n_agentFix --> n_checkAgentFix
n_fix --> n_checkFix
n_checkAgentFix -->|"yes"| n_respondFixFailed
n_checkAgentFix -->|"no"| n_checkChanged
n_checkFix -->|"yes"| n_respondFixFailed
n_checkFix -->|"no"| n_runLint
n_respondFixFailed --> n_cleanupFixFailed
n_checkChanged -->|"yes"| n_respondNoChange
n_checkChanged -->|"no"| n_pushFix
n_runLint --> n_runTypecheck
n_cleanupFixFailed --> n_failedFix
n_respondNoChange --> n_cleanupNoChange
n_pushFix --> n_checkPushed
n_runTypecheck --> n_runTests
n_cleanupNoChange --> n_doneNoChange
n_checkPushed -->|"yes"| n_checkPushThrew
n_checkPushed -->|"no"| n_respondPushRefused
n_runTests --> n_checkChanged
n_checkPushThrew -->|"yes"| n_respondPushThrew
n_checkPushThrew -->|"no"| n_respondPushed
n_respondPushRefused --> n_cleanupRefused
n_respondPushThrew --> n_cleanupRefused
n_respondPushed --> n_watchCi
n_cleanupRefused --> n_failedPush
n_watchCi --> n_checkWatchCi
n_checkWatchCi -->|"yes"| n_respondCiUnknown
n_checkWatchCi -->|"no"| n_checkCi
n_respondCiUnknown --> n_finishPush
n_checkCi -->|"yes"| n_checkRetry
n_checkCi -->|"no"| n_respondCiOk
n_finishPush --> n_done
n_checkRetry -->|"yes"| n_respondCiFailed
n_checkRetry -->|"no"| n_fetchLogs
n_respondCiOk --> n_finishPush
n_respondCiFailed --> n_finishPushFailed
n_fetchLogs --> n_routeRetry
n_finishPushFailed --> n_failed
n_routeRetry -->|"yes"| n_retryAgentFix
n_routeRetry -->|"no"| n_retryFix
n_retryAgentFix --> n_checkRetryAgent
n_retryFix --> n_checkRetryFix
n_checkRetryAgent -->|"yes"| n_respondCiFailed
n_checkRetryAgent -->|"no"| n_pushAgain
n_checkRetryFix -->|"yes"| n_respondCiFailed
n_checkRetryFix -->|"no"| n_pushAgain
n_pushAgain --> n_checkPushedAgain
n_checkPushedAgain -->|"yes"| n_watchCiAgain
n_checkPushedAgain -->|"no"| n_respondCiFailed
n_watchCiAgain --> n_checkWatchCiAgain
n_checkWatchCiAgain -->|"yes"| n_respondCiUnknown
n_checkWatchCiAgain -->|"no"| n_checkCiAgain
n_checkCiAgain -->|"yes"| n_respondCiFailed
n_checkCiAgain -->|"no"| n_respondCiOk
Maturity: built from the flagship steps
Section titled “Maturity: built from the flagship steps”Ships as a built-in template and reuses the engineering steps the flagship flow runs. This particular arrangement of them is not separately exercised end to end against a real repository. See product overview §8.
Use it
Section titled “Use it”Every built-in template is seeded into the workflow library and can be cloned, edited on the visual canvas, and versioned — see architecture for the node types. The spec lives in packages/shared/src/workflow/templates/addressPrFeedback.ts.
© 2026 Jorge Barnaby
Source-available under FSL-1.1-MIT