ci-failure-triage — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ci-failure-triage (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Calling a red check "transient / flaky / orphaned / stale" WITHOUT reading its body. This session: a CodeQL check failed; it was dismissed as a "transient 4s orphaned check-run" — twice — when it was reporting 3 real security vulnerabilities (2 critical command-injection + 1 high XSS). The conclusion came before the evidence. (2026 failure-triage practice = taxonomy → read → cluster → gate, a repeatable detection system, not vibes: https://latitude.so/blog/ai-agent-failure-modes-detection-playbook)
You may not use the words "transient", "flaky", "stale", "orphaned", or "unrelated" about a check until you have read its failure body and quoted the actual error. A duration (e.g. "4s") is a hint, never proof.
head=$(gh pr view <N> --json headRefOid -q .headRefOid)
gh pr checks <N> | grep -viP "\t(pass|skipping)\t"gh run view --job <id> --log-failed | tail -40 gh api "repos/<owner>/<repo>/code-scanning/alerts?state=open&per_page=100" \
--jq '.[] | "\(.rule.id) | \(.rule.security_severity_level) | \(.most_recent_instance.location.path):\(.most_recent_instance.location.start_line) | ref=\(.most_recent_instance.ref)"'output.title / output.summary — it usuallystates exactly what failed ("2 new alerts including 2 high severity…").
state on the head commit, so you know what actually blocks:
gh api repos/<owner>/<repo>/branches/main/protection/required_status_checks -q '.contexts[]'
gh api "repos/<owner>/<repo>/commits/$head/check-runs" --paginate \
-q '.check_runs[] | "\(.name)=\(.conclusion)"'main independent of your diff(prove it: query alerts on refs/heads/main). Diff-attributed but not yours; still must be fixed to unblock — fix it or get an explicit dismissal decision.
Only now may you re-run. "It was fast" is not an INFRA verdict.
green-workflow-but-red-check loop forever does nothing if the real blocker is a pinned failed check-run from a prior commit — push a fresh commit instead.
If the CEO asks "are you sure?" about a CI claim, your triage was superficial. Re-run this protocol from step 2 (read the body) before answering. See evidence-first-answer.
| Pattern | Fix |
|---|---|
| "CodeQL failed in 4s — transient, re-running" | Read output.summary + alerts first; 4s ≠ proof |
| Resolving a review/scan thread to clear a gate | Address the finding in code; resolving ≠ fixing |
| Re-running a failed check repeatedly with no log read | One read; classify REAL/PRE-EXISTING/INFRA; act on the class |
| "Unrelated to my change" without checking main | Query alerts on refs/heads/main to prove pre-existing |
Every red required check is classified with quoted evidence and either fixed (REAL/PRE-EXISTING) or re-run after a quoted INFRA log line. Never declare CI green without gh pr checks showing it.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.