[safe-output-health] Safe Output Health Report - 2026-05-23 (clean day, 100% success) #34174
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by Safe Output Health Monitor. A newer discussion is available at Discussion #34375. |
Beta Was this translation helpful? Give feedback.
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_outputsjob slot: 21safe_outputsjobs actually executed: 8 (13 gated off bysafe_outputs.if)safe_outputsjobs failed: 0This is a clean audit day. All 8 safe_outputs jobs that ran completed with
Failed: 0and emitted no##[error]/##[warning]entries. Three handler types were exercised in production beyond signaling:create_issue,create_discussion, andcreate_pull_request(PR #34165 was created and merged end-to-end). Caveat: today is Saturday with materially lower workflow volume (8 executions vs. 24 yesterday, 48 the day before), and the Smoke Claude/Copilot workflows that produced the prior two days' issue clusters did not run, so the two open patterns are dormant-but-untested rather than confirmed fixed.Safe Output Job Statistics
Per-run breakdown (8 executed safe_outputs jobs)
5288def)Why 13 of 21 safe_outputs slots were skipped
These runs are not failures — they are working-as-intended gating. The
safe_outputs.ifcondition is:In all 13 cases, either:
needs.agent.result == 'skipped'(agent never ran), orneeds.detection.result != 'success'(detection job failed or was skipped — these are out of scope for safe-output health and are tracked by a separate monitor).Examples: runs 26324232375, 26324236738, 26324231633, 26324146164, 26323929451, 26323916405/390/361, 26323914272, 26324183213, 26323901865, 26323390667, 26323206790. All exited at the
if-evaluation step withResult: falseand no further work.Error Clusters
None identified for this audit window.
A repository-wide grep across all 8 executed safe_outputs job logs for
##[error],##[warning],✗ Message,Failed: [1-9], andexited with code [1-9]returned zero matches. The 12_/13_/8_Process Safe Outputsstep in every executing run ended with the=== Processing Summary ===block reportingFailed: 0and "Safe Output Handler Manager completed".Status of Previously-Identified Clusters
review_path_unresolved_422(first seen 2026-05-21)submit_pull_request_reviewmessages emitted in the last 24h).solutions.jsonas a Medium-priority follow-up — would save the recovery round-trip and surface clearer errors.target_star_review_comment_no_pr_number_fallback(first seen 2026-05-22)create_pull_request_review_commentmessages emitted in the last 24h; Smoke Claude did not run).Root Cause Analysis
No new root causes to analyze today. The two open patterns from prior audits are preserved verbatim in
/tmp/gh-aw/cache-memory/safe-output-health/error-patterns.jsonand remain candidates for upstream remediation regardless of today's clean reading.Recommendations
Critical Issues (Immediate Action Required)
None. No active incidents in the audit window.
Bug Fixes Required (Carried Forward from 2026-05-22)
Unify
target:"*"resolution across safe-output handlers (highest priority carryover)actions/safe_output_handler_manager.cjs,create_pull_request_review_commenthandler branch that triggers when item explicitly carriestarget:"*".target:"*"and nopull_request_number, sibling handlers (update_pull_request,submit_pull_request_review) auto-resolve to the triggering PR;create_pull_request_review_commentrejects. Sibling code paths inside the same handler do auto-resolve correctly whentargetis omitted, so the gap is the explicit-"*"branch.resolveTargetPRNumber(item, ctx)helper used by all three handlers. Whentarget === "*"anditem.pull_request_numberis absent, fall back toctx.triggering_pr_number(fromGITHUB_REF: refs/pull/{n}/merge).create_pull_request_review_comment.Improve error-message granularity for handler rejections (carried)
Message 2 (create_pull_request_review_comment): target is "*" but item has no pull_request_number).Configuration / Process Improvements
review_path_unresolved_422)(path, position/line)maps to a diff hunk. Reject invalid items individually with precise errors rather than letting the bulkPOST /pulls/{n}/reviewsfail.Work Item Plans
Work Item 1: Unify
target:"*"resolution in safe-output handlersresolveTargetPRNumber(item, ctx)helper used bycreate_pull_request_review_comment,update_pull_request, andsubmit_pull_request_review. Whentarget === "*"and nopull_request_numberis provided, fall back to the triggering PR (fromGITHUB_REF).resolveTargetPRNumbervia one code path.actions/setup/js/awf_reflect.test.cjs(lines :25 / :214 mentioned in cache) passes without per-item rejection.target:"*"review-comment items completes withFailed: 0.actions/safe_output_handler_manager.cjs. Add unit test covering the explicit-"*"-with-no-PR-number case.Work Item 2: Per-item validation for review-comment paths/lines
create_pull_request_review_comment, validate(path, position/line)against the PR's files list. Drop invalid items individually with a clear error message rather than failing the entire review submission and falling back to body-only.Work Item 3: Improve handler rejection error messages
Message N (handler_type): <field> <reason>.Historical Context
review_path_unresolved_422target_star_review_comment_no_pr_number_fallbackTrends:
review_path_unresolved_422recovery path is in place but thetarget_star_review_commentfix is still open.noop(×4),create_issue(×1),create_discussion(×1),create_pull_request(×1, PR merged). End-to-end success on a non-trivial code path (create_pull_request→ merged commit5288def).Metrics and KPIs
noop(4 of 7 successful messages)create_pull_request(1/1, downstream merge confirmed)create_pull_request_review_comment(the only handler with a still-open root-cause cluster) — but not exercised in this window.Next Steps
target:"*"resolution) — High priority, still open from 2026-05-22.target_star_review_comment_no_pr_number_fallbackcluster.submit_pull_request_review422 → body-only fallback continues to recover cleanly.2026-05-23.jsonwritten; index, recurring-failures, error-patterns reflect the dormant-but-open status of both prior clusters.References:
Beta Was this translation helpful? Give feedback.
All reactions