Repository navigation
[safe-output-health] 🏥 Safe Output Health Report - 2026-10-13 #68316
Closed
Replies: 1 comment
|
This discussion has been marked as outdated by Safe Output Health Monitor. A newer discussion is available at Discussion #68596. |
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
safe_outputswith a terminal conclusion; 10 further executions wereskippedand are excluded from the denominator below)Monitoring cadence: ✅ Healthy — 23.95 hours since the previous successful audit (2026-10-12T04:34:23Z, run 38204331412), well inside the 24h-expected / 48h-alert window. This is a return to healthy cadence after the ~144h gap flagged critical in the 2026-10-12 report.
Safe Output Job Statistics
Note: this repository's compiled workflows run all configured safe-output types (create_issue, create_discussion, add_comment, create_pull_request, add_labels, etc.) through a single consolidated
safe_outputsjob (Process Safe Outputsstep), rather than one job per output type, so per-type breakdown reflects which output type was being processed when a job failed, not separate job executions.Error Clusters
Cluster 1: Stale lock file / provenance validation fails closed (
GH_AW_JOB_CHECK_RUN_ID)safe_outputs→Process Safe Outputsstep,create_issueoutput typeworkflow_dispatchsmoke tests, ~03:26 UTC on 2026-10-13GH_AW_JOB_CHECK_RUN_IDis missing or invalid, by design ("Missing or malformed runtime metadata fails closed, preventing publication of unattributed artifacts"). The ADR itself warns: "Existing compiled workflows must be recompiled to supply the publishing check-run context; stale.lock.ymlfiles will fail closed at publish time."smoke-copilot-routed-claude.lock.ymlis confirmed stale: it has noGH_AW_JOB_CHECK_RUN_IDenv var at all in itsProcess Safe Outputsstep — a straightforward recompile fixes this one.smoke-copilot-sdk-routed-claude.lock.ymlis not stale — it already hasGH_AW_JOB_CHECK_RUN_ID: ${{ job.check_run_id }}wired in — yet it still hit the identical failure. That means the GitHub Actionsjob.check_run_idcontext itself resolved empty/invalid at runtime for this job. Both affected workflows share an unusual job shape:engine.bare: truewithmodel-routingandsandbox.agent.id: awf. This suggests the Checks-API check run thatresolvePublishingJobIddepends on may not be available/resolvable yet for this specific engine/sandbox configuration — a second, deeper issue beyond "just recompile."private: true, no user-facing effect), but the underlying provenance-resolution gap could affect any other workflow using the samebare+model-routing+ custom sandbox-agent-id combination, and any other not-yet-recompiled.lock.ymlusing similar patterns.Cluster 2:
create_pull_requestpatch size exceeds configured limitsafe_outputs→Process Safe Outputsstep,create_pull_requestoutput typepkg/linters) totaling ~11.9 MB, roughly 3x the handler's 4 MB patch-size cap, so the whole output was rejected rather than partially applied.Root Cause Analysis
API-Related Issues
None found.
mcp_server_healthwas clean (0 errors, 1 healthy server) for every failing run inspected, and no rate-limit, authentication, or network-layer errors were present in any of the 3 failures.Data Validation Issues
Both clusters above are validation/configuration failures, not transient infra flakiness:
Permission Issues
None found this cycle. The previously-tracked
approve_workflow_run/ fork-PR permission-gap pattern (PR Sous Chef) did not recur.Other Issues
None found.
missing_tools/missing_data/mcp_failuresfields werenullacross every sampled run_summary.json.Recommendations
Critical Issues (Immediate Action Required)
None. Both failure clusters affect low-traffic internal smoke-test / maintenance workflows, not user-facing publishing paths, and no systemic or security-relevant failure was found.
Bug Fixes Required
Recompile
smoke-copilot-routed-claude.md.github/workflows/smoke-copilot-routed-claude.md→.github/workflows/smoke-copilot-routed-claude.lock.ymlGH_AW_JOB_CHECK_RUN_IDenv var in itsProcess Safe Outputsstep, so it fails closed on everycreate_issuepublish.gh aw compile(ormake recompile) to regenerate the lock file with the new provenance wiring.safe_outputs/create_issueInvestigate
job.check_run_idresolution forbare+model-routing+ custom sandbox-agent-id jobsactions/setup/js/execution_provenance.cjsandresolvePublishingJobId(referenced frompkg/workflow/compiler_safe_outputs_steps.go,safe_jobs.go)smoke-copilot-sdk-routed-claude.lock.ymlalready suppliesGH_AW_JOB_CHECK_RUN_ID: ${{ job.check_run_id }}, yet the value was missing/invalid at runtime, meaning the GitHub-providedjob.check_run_idcontext (or its downstream resolution against the recorded run ID/attempt) did not resolve correctly for this job shape.engine.bare: true+model-routing+sandbox.agent.id: awf, and confirm whether the Checks API check-run is created/available at the pointresolvePublishingJobIdqueries it for this configuration. This is a provenance-feature regression risk for any workflow sharing this job shape, not just these two smoke tests.Configuration Changes
create-pull-requestmax patch size of 4096 KB.Process Improvements
.lock.ymlfiles were not recompiled (one fully stale, one partially)..lock.ymlfiles missing the newly-required env var/field before merging, rather than discovering staleness via this next-day audit.Work Item Plans
Work Item 1: Recompile stale smoke-test lock file
smoke-copilot-routed-claude.lock.ymlis missing theGH_AW_JOB_CHECK_RUN_IDenv var that ADR-68077 requires, causing everycreate_issuesafe-output publish in that workflow to fail closed.gh aw compilerun againstsmoke-copilot-routed-claude.md, diff reviewed and committedmake recompile(or targetedgh aw compile .github/workflows/smoke-copilot-routed-claude.md), verify the new lock file includesGH_AW_JOB_CHECK_RUN_ID: ${{ job.check_run_id }}in theProcess Safe Outputsstep.Work Item 2: Root-cause
job.check_run_idempty-at-runtime for bare/model-routing/custom-sandbox jobsjob.check_run_idcontext (orresolvePublishingJobId's resolution of it) returned empty/invalid forsmoke-copilot-sdk-routed-claude'ssafe_outputsjob, despite the lock file already being up to date.engine.bare + model-routing + sandbox.agent.idjobsexecution_provenance.cjs/resolvePublishingJobIdwith additional diagnostic logging for this job shape, or trace through the Checks API pagination logic described in ADR-68077 against a reproduction run.Work Item 3: Watch Linter Miner patch-size failure for recurrence
error-patterns.json→create-pull-request-patch-size-exceeds-limit) for next audit to check.Historical Context
Compared against the 2026-10-12 audit (0 failures across 178 executions, 100% success — the first fully clean audit since 2026-09-11):
Trends
approve_workflow_run, Design Decision Gate allowed-files decline, Smoke Issues jira/linear credentials, Smoke Projectupdate_project, Auto-Triage Issuesadd_labels,push_ledger_changesvalidation bugs,ledger_appendinvalid-fields) were absent this cycle.Metrics and KPIs
safe_outputsjob executions succeeded; 10 further executions were skipped and excluded from this ratio)create_issue/create_pull_requestoutput types observed (e.g.create_discussion,add_comment,add_labels) had 0 failures this cyclecreate_issue(2 failures, both from the same new provenance-validation cluster) andcreate_pull_request(1 failure, patch-size limit)Process Safe Outputsstep failed within 1-24 seconds of starting in all 3 cases (fast-failing validation, not a timeout)Next Steps
smoke-copilot-routed-claude.mdto restore itsGH_AW_JOB_CHECK_RUN_IDwiring (Work Item 1)job.check_run_idat runtime forengine.bare+model-routing+ custom-sandbox-agent-id jobs (Work Item 2).lock.ymlfiles are stale relative to ADR-68077's provenance requirementAll reactions