Skip to content

The composite Action's single --write slot can leave its unconditional coverage/assurance/severity floors without a structured report

Index: Known gaps

Status (re-verified 2026-10-09 at 456989f): POLICY_NOTE. The SARIF/text fallback part is superseded. The remaining non-JSON --write blindness is an explicitly accepted limitation per action/AGENTS.md 'Known, accepted limitation'.

Superseded (ADR-063 Phase 6, Track T8): the SARIF-fallback/HTML-gap account this entry used to carry is retired along with the rendered-prose readers it described. _report_compat_verdict/_severity_gate_exit/ _coverage_gated/_assurance_gated no longer have a "rendered markdown/ text" fallback tier at all (_text_report_content is deleted), nor a SARIF runs[0].properties.abiVerdict branch — every one of them is JSON-only now (run_outcome, then the legacy per-field JSON, then nothing), per action/AGENTS.md's "How run.sh resolves the verdict it publishes". A format: html primary was never coherent evidence for this group of readers, so its own absence is no longer a special case either.

What remains, narrower than before: the CLI's --write option is still single-valued (secondary_output.py's --write FORMAT=PATH, not multiple=True), and scan/compare's own internal --write json=$PR_JSON sidecar injection (unconditional since Track T8 — no longer gated on pr-comment, closing the gap this same track's own Codex review found in the pr-comment: false case) is still skipped whenever the step's own extra-args already supplies a --write of any format (_extra_args_has_write_flag), since extra-args is appended after the injection and Click keeps only the last occurrence of a repeated non-multiple option — a second, JSON-targeted --write this script appended would always lose to the user's own later one and never execute. When that user-supplied --write targets json=, _extra_args_write_json_ path already recovers it, so _json_report_src still finds structured evidence. When it targets a non-JSON format (-o text=..., -o markdown=..., ...), there is no JSON anywhere, and ADR-049's unconditional contract-coverage/analysis-assurance floors plus the severity-category gate genuinely go blind for that one run — accepted, not fixed, per action/AGENTS.md's own "Known, accepted limitation" paragraph, since closing it would mean either silently discarding the user's explicit --write choice or unconditionally re-running the analysis a second time purely to obtain JSON (a materially larger, separate trade-off _maybe_post_pr_comment only accepts today for the sticky-comment feature, under its own narrower guards). If this becomes a real reported problem rather than a review-found edge case, the honest fix is the same one this entry always named: make --write accept multiple FORMAT=PATH operands (a real CLI capability change touching secondary_output.py and every command that declares the option, not just this Action script) — not another per-reader special case.