[safe-output-health] Safe Output Health Monitor - 2026-08-03: PR Sous Chef head-ref hard-fail plus Code Scanning Fixer patch-size cap stuck recurring #49905
Closed
Replies: 1 comment
|
This discussion was automatically closed because it expired on 2026-08-04T05:53:13.914Z.
|
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Executive Summary
This audit covers 2026-08-02T12:41:55Z to 2026-08-03T05:07:51Z (~16.4h, a partial-day lower bound; the logs pull hit its 300-run cap before spanning the full 24h window). Across 258 runs, this audit found 4 confirmed in-scope safe-output ("Process Safe Outputs") hard failures, all on scheduled workflows. Critically, all 4 were mistagged driver_exit in the upstream master log summary (implying an out-of-scope agent-container crash), when in fact each runs agent job succeeded and only the safe_outputs job failed - reconfirming and extending the 2026-08-02 methodology-correction finding that the failure_kind tag cannot be trusted at face value.
Methodology upgrade this audit: rather than spot-checking a handful of driver_exit-tagged runs, this audit Grep-swept all 268 locally-cached run_summary.json files for job_details[] entries named safe_outputs with conclusion failure, independent of the run-level tag - effectively a complete sweep of the captured window rather than a sample. Two control-check runs (PR Code Quality Reviewer) confirmed the tag is still usually accurate - the mistagging is specific to runs where safe_outputs itself fails after a successful agent job, not universal.
One finding is new and fully root-caused for the first time (update_pull_request "head ref does not exist" on PR Sous Chef); one is a confirmed identical recurrence from 2026-08-01 (Code Scanning Fixer patch-size cap), proving that cluster is now a stuck daily-failing job rather than a one-off. The long-standing review_path_unresolved_422 Path-variant remains unvalidated for another consecutive audit - this window was fully read-only (0 safe items written across all 258 runs), so no PR-review activity occurred to exercise it either way.
Safe Output Job Statistics
Error Clusters
1. pr_sous_chef_update_pull_request_head_ref_missing (NEW - fully root-caused)
3 occurrences, all PR Sous Chef (pi engine, schedule event):
repofor wildcardpush_to_pull_request_branchtargets in multi-repo workflows #49813 and Add first-class agent job gating viajobs.agent.needsandjobs.agent.if#49814 both hard-failed (Failed: 2)python:alpinecontainer pin to remediated digest in action/workflow lock data #49791 hard-failed (Failed: 1)Exact error text (recovered for the first time this audit)
Root cause: PR Sous Chef targets Copilot-coding-agent-authored PRs whose head branches are ephemeral and can be deleted or force-pushed between the triggering comment and this scheduled runs update_pull_request (branch-from-base) call. GitHubs update-branch endpoint then returns head ref does not exist.
Notable inconsistency: in run 30751969165, PR #49762 hit the identical head ref does not exist condition in the same batch but was logged non-fatal and did not fail the run - while PR #49791 (same run, same condition) hard-failed. A non-fatal code path for this exact error already exists somewhere in the handler; it is just not applied uniformly.
2. code_scanning_fixer_patch_size_exceeds_max_patch_size_config (RECURRED - confirmed identical to 08-01)
1 occurrence this window, §30776690621 - Code Scanning Fixer #745 (schedule):
This is the exact same patch size (41422 KB) on the exact same fix (Remove committed actionlint/gosec binaries from git history) as the run first documented on 2026-08-01 (run 30714466597). This confirms the scheduled job is stuck, re-generating and re-failing on an identical oversized patch every run - not a one-off. Root cause is a task/config mismatch: removing large committed binaries from git history inherently produces a diff on the order of the binaries size (tens of MB), which will always exceed the 4 MB max_patch_size cap.
Root Cause Analysis
Both confirmed clusters share a common theme: the handler already has correct behavior for the failure condition somewhere in the codebase, but does not apply it consistently or does not check for it proactively.
Separately, this audit reconfirms the upstream tag-reliability gap: 4/4 in-scope failures this window were mistagged driver_exit, meaning any downstream consumer trusting that tag without cross-checking job_details[].safe_outputs.conclusion would have reported zero in-scope safe-output incidents this window instead of 4.
Recommendations
Immediate actions:
Config changes:
3. Either raise max_patch_size for large-binary-removal alert classes in Code Scanning Fixer, or have the agent redirect to a descriptive issue/comment instead of a direct PR when the estimated diff would exceed the cap.
Process improvements:
4. Do not trust the summary-level failure_kind tag for safe-output health monitoring; cross-check job_details[].safe_outputs.conclusion per run, as this audit and the 2026-08-02 audit both had to do manually.
Work item plan:
Historical Context
Metrics/KPIs
Next Steps
References:
All reactions