What happened
On PR #856, the review run at 22:14 UTC (run 25765362056) reviewed commit 5647043 but HEAD had already moved to 0a9d6cf. The review was discarded as stale-head after completing its full execution. Three other review runs in the dispatch repo (25811116008, 25810828932, 25798377140) failed, likely hitting the same stale-head condition after doing substantial work. Each failed run consumed compute for checkout, GCP setup, environment setup, and partial agent execution before detecting the stale state.
What could go better
When a new commit is pushed to a PR, any in-flight review run for that PR should be cancelled immediately rather than allowed to run to completion and then discard its results. GitHub Actions supports concurrency groups with cancel-in-progress: true which is the standard mechanism for this. Confidence is high — stale-head detection already exists (the agent correctly discards stale reviews), but it happens too late in the pipeline. Cancelling early would save the full agent execution cost. This is complementary to the dedup proposal: dedup prevents unnecessary dispatches, while cancel-in-progress stops runs that become unnecessary mid-flight.
Proposed change
Add a concurrency block to the review dispatch workflow (likely review.yml in fullsend-ai/.fullsend or the fullsend.yaml dispatcher) keyed on (source_repo, pr_number) with cancel-in-progress: true. When a new push triggers a fresh review dispatch, GitHub Actions will automatically cancel any in-flight review for the same PR. The concurrency key should NOT include the SHA (unlike the dedup proposal), so that a new push cancels the old review rather than allowing them to run in parallel. Example: concurrency: group: review-${{ inputs.repo }}-${{ inputs.pr_number }} with cancel-in-progress: true.
Validation criteria
After implementation, review runs that complete with a stale-head discard should drop to zero across the next 20 merged PRs. Any review run that starts should either complete with a valid verdict (approve/request-changes/comment) or be cancelled by GitHub Actions — never complete and then discard its own results.
Generated by retro agent from #856
What happened
On PR #856, the review run at 22:14 UTC (run 25765362056) reviewed commit 5647043 but HEAD had already moved to 0a9d6cf. The review was discarded as stale-head after completing its full execution. Three other review runs in the dispatch repo (25811116008, 25810828932, 25798377140) failed, likely hitting the same stale-head condition after doing substantial work. Each failed run consumed compute for checkout, GCP setup, environment setup, and partial agent execution before detecting the stale state.
What could go better
When a new commit is pushed to a PR, any in-flight review run for that PR should be cancelled immediately rather than allowed to run to completion and then discard its results. GitHub Actions supports
concurrencygroups withcancel-in-progress: truewhich is the standard mechanism for this. Confidence is high — stale-head detection already exists (the agent correctly discards stale reviews), but it happens too late in the pipeline. Cancelling early would save the full agent execution cost. This is complementary to the dedup proposal: dedup prevents unnecessary dispatches, while cancel-in-progress stops runs that become unnecessary mid-flight.Proposed change
Add a
concurrencyblock to the review dispatch workflow (likelyreview.ymlin fullsend-ai/.fullsend or the fullsend.yaml dispatcher) keyed on(source_repo, pr_number)withcancel-in-progress: true. When a new push triggers a fresh review dispatch, GitHub Actions will automatically cancel any in-flight review for the same PR. The concurrency key should NOT include the SHA (unlike the dedup proposal), so that a new push cancels the old review rather than allowing them to run in parallel. Example:concurrency: group: review-${{ inputs.repo }}-${{ inputs.pr_number }}withcancel-in-progress: true.Validation criteria
After implementation, review runs that complete with a stale-head discard should drop to zero across the next 20 merged PRs. Any review run that starts should either complete with a valid verdict (approve/request-changes/comment) or be cancelled by GitHub Actions — never complete and then discard its own results.
Generated by retro agent from #856