Summary
The PR Sous Chef scheduled workflow has failed 2 of 7 runs in the last 6 hours. Both failures occur in the safe_outputs job after the agent has finished its useful work. The root cause is that the update_pull_request safe-output handler (configured with update_branch: true) treats two benign GitHub API responses as hard errors and fails the entire workflow run.
Affected workflow
PR Sous Chef (scheduled, main)
- Failure rate (last 6h): 2/7 = 29%
Failed runs analyzed
In both cases the agent and detection jobs succeeded; only the post-agent safe_outputs job failed.
Probable root cause
When update_pull_request is invoked with update_branch: true, the handler calls the GitHub REST endpoint PUT /repos/{owner}/{repo}/pulls/{number}/update-branch. GitHub returns 4xx responses in two non-actionable scenarios:
There are no new commits on the base branch. — the PR branch is already up to date. This is a benign no-op.
merge conflict between base and head — the PR cannot be auto-updated because of a real conflict; this requires human resolution but is not an agentic-workflow defect.
In both cases the handler currently:
- emits a
##[warning] for Failed to update pull request #N branch from base
- then emits a hard
##[error] for the message, marking the message as failed
- then emits
##[error]N safe output(s) failed: and the safe_outputs job exits non-zero
The workflow run is reported as failed even though the agent already posted its sous-chef comments successfully and the underlying GitHub state is unchanged.
Evidence — run 25892817484 (no-new-commits)
##[warning]Failed to update pull request #32223 branch from base: ERR_API:
update pull request #32223 branch from base failed (attempt 1)
Original error: There are no new commits on the base branch.
Suggestion: This error cannot be resolved by retrying.
##[error]Failed to update pull request #32223: ERR_API: update pull request #32223 failed (attempt 1)
##[error]✗ Message 1 (update_pull_request) failed
Failed: 1
##[error]1 safe output(s) failed:
- update_pull_request: ERR_API: ... There are no new commits on the base branch.
Evidence — run 25889685241 (merge-conflict, 2 PRs)
##[warning]Failed to update pull request #32213 branch from base: ERR_API:
Original error: merge conflict between base and head
##[error]Failed to update pull request #32213: ERR_API: ...
##[warning]Failed to update pull request #32220 branch from base: ERR_API:
Original error: merge conflict between base and head
##[error]Failed to update pull request #32220: ERR_API: ...
Failed: 2
##[error]2 safe output(s) failed:
- update_pull_request: ... merge conflict between base and head
- update_pull_request: ... merge conflict between base and head
Audit-diff: failed [§25892817484](https://github.com/github/gh-aw/actions/runs/25892817484) vs success [§25890788384](https://github.com/github/gh-aw/actions/runs/25890788384)
- Agent metrics: 13 turns / 347K tokens (failed) vs 35 turns / 652K tokens (success) — both within normal range
- MCP tool usage: no anomalies; failed run did not need an
add_comment (different PR set)
- Firewall: no new/removed/blocked domains; only volume change on
api.githubcopilot.com:443 (+147%)
- Conclusion: no agent regression; failure is isolated to the
safe_outputs handler's response classification
Proposed remediation
Update the update_pull_request safe-output handler so that GitHub update-branch failures with these specific signals are treated as warnings rather than errors, and do not count toward the Failed: total that fails the safe_outputs job:
There are no new commits on the base branch. — log as info/warning, treat the operation as a successful no-op.
merge conflict between base and head — log as warning, optionally surface as an add_comment on the affected PR ("branch update skipped: merge conflict"), but do not fail the workflow. The branch-update step is best-effort.
Related config (from run logs):
"update_pull_request": {
"allow_body": true,
"allow_title": false,
"default_operation": "append",
"max": 10,
"target": "*",
"update_branch": true
}
The relevant code path is the safe-output processor that emits Failed to update pull request #N branch from base followed by Message N (update_pull_request) failed. The classifier should distinguish between:
- Hard errors (auth, rate limit, malformed payload) — should fail
- Soft conditions (no new base commits, merge conflict on update-branch) — should warn and continue
Success criteria
- A new PR Sous Chef run that triggers either failure mode (no-new-commits or merge-conflict on
update-branch) finishes with conclusion: success.
- The
safe_outputs job exits 0 even when one or more update_pull_request messages return GitHub update-branch soft failures.
- A warning is still surfaced in the workflow log and (optionally) as a PR comment so maintainers know the branch update was skipped.
Notes / context
- Closed issue #32040 addressed a different
update_pull_request problem (Copilot CLI emitting wrong field names: pr_number vs pull_request_number). The current failures are not field-name related — the handler accepts the payload, calls GitHub, and then mis-classifies the response.
- No open
agentic-workflows failure-tracker issue exists for this cluster.
References:
Generated by 🔍 [aw] Failure Investigator (6h) · ● 15.4M · ◷
Summary
The
PR Sous Chefscheduled workflow has failed 2 of 7 runs in the last 6 hours. Both failures occur in thesafe_outputsjob after the agent has finished its useful work. The root cause is that theupdate_pull_requestsafe-output handler (configured withupdate_branch: true) treats two benign GitHub API responses as hard errors and fails the entire workflow run.Affected workflow
PR Sous Chef(scheduled,main)Failed runs analyzed
There are no new commits on the base branchmerge conflict between base and headIn both cases the
agentanddetectionjobs succeeded; only the post-agentsafe_outputsjob failed.Probable root cause
When
update_pull_requestis invoked withupdate_branch: true, the handler calls the GitHub REST endpointPUT /repos/{owner}/{repo}/pulls/{number}/update-branch. GitHub returns 4xx responses in two non-actionable scenarios:There are no new commits on the base branch.— the PR branch is already up to date. This is a benign no-op.merge conflict between base and head— the PR cannot be auto-updated because of a real conflict; this requires human resolution but is not an agentic-workflow defect.In both cases the handler currently:
##[warning]forFailed to update pull request #N branch from base##[error]for the message, marking the message as failed##[error]N safe output(s) failed:and thesafe_outputsjob exits non-zeroThe workflow run is reported as failed even though the agent already posted its sous-chef comments successfully and the underlying GitHub state is unchanged.
Evidence — run 25892817484 (no-new-commits)
Evidence — run 25889685241 (merge-conflict, 2 PRs)
Audit-diff: failed [§25892817484](https://github.com/github/gh-aw/actions/runs/25892817484) vs success [§25890788384](https://github.com/github/gh-aw/actions/runs/25890788384)
add_comment(different PR set)api.githubcopilot.com:443(+147%)safe_outputshandler's response classificationProposed remediation
Update the
update_pull_requestsafe-output handler so that GitHubupdate-branchfailures with these specific signals are treated as warnings rather than errors, and do not count toward theFailed:total that fails thesafe_outputsjob:There are no new commits on the base branch.— log as info/warning, treat the operation as a successful no-op.merge conflict between base and head— log as warning, optionally surface as anadd_commenton the affected PR ("branch update skipped: merge conflict"), but do not fail the workflow. The branch-update step is best-effort.Related config (from run logs):
The relevant code path is the safe-output processor that emits
Failed to update pull request #N branch from basefollowed byMessage N (update_pull_request) failed. The classifier should distinguish between:Success criteria
update-branch) finishes withconclusion: success.safe_outputsjob exits 0 even when one or moreupdate_pull_requestmessages return GitHubupdate-branchsoft failures.Notes / context
update_pull_requestproblem (Copilot CLI emitting wrong field names:pr_numbervspull_request_number). The current failures are not field-name related — the handler accepts the payload, calls GitHub, and then mis-classifies the response.agentic-workflowsfailure-tracker issue exists for this cluster.References: