ci-triage
Skill412 starsChanged 4 months agoApache-2.0View on GitHub
Triage Cacti CI failures on a PR or main branch, fetch failing job logs via gh CLI, categorize root causes, and produce a structured markdown report at docs/ci-reports/. Use when the user asks why CI is failing, asks for a CI failure report, references a failing PR or run, mentions GitHub Actions failures, or asks to analyze/diagnose pipeline issues in the Hyperledger Cacti monorepo.
17 other projects use a version of this.
Adopted by
Most recently taken up by
- TanKaizokuO/claude-skillstheir own version, first seen Nov 8, 2026
- wannanbigpig/ai-engineering-collaborationtheir own version, first seen Nov 6, 2026
- me-cedric/agent-compasstheir own version, first seen Nov 1, 2026
- juzorei/ci-autopsytheir own version, first seen Nov 1, 2026
- andymai/brepjstheir own version, first seen Oct 9, 2026
- hyperledger-labs/splicetheir own version, first seen Oct 9, 2026
Other versions17 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 17
- NewFuture/DDNS★ 4.7ksame name
- nubjs/nub★ 4.4ksame name
- Mentra-Community/MentraOS★ 2.4ksame name
- levy-street/world-of-claudecraft★ 2.3ksame name
- ls1intum/Artemis★ 829same name
- andymai/brepjs★ 140same name
- hyperledger-labs/splice★ 122same name
- fair-acc/gnuradio4★ 117same name
- 5throck/ai-workspace-standards★ 25same name
- syndicalt/zaxy★ 17same name
7 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository8 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- codeql-scanningSkill
- code-reviewSkill
- doublecheckSkill
- package-removalSkill
- refactor-planSkill
- <skill-name>Skill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 2 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 13 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 48
Prefer the API (works while runs are in progress and is more reliable than gh run view --log-failed):
- Distinctive: line 78
Use templates/report-template.md.
- Distinctive: line 81
Run metadata (PR/sha, run id, date)
“Common” is measured: kept by at least 6 in 10 of the 13 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Cacti CI Triage Skill
End-to-end workflow for diagnosing failing GitHub Actions runs on the
hyperledger-cacti/cacti monorepo and producing a fixable report.
Quick Start
# Triage a PR end-to-end and write a report
.github/skills/ci-triage/scripts/triage-pr.sh 4152
# Triage main branch HEAD (aggregates all workflows on that commit)
.github/skills/ci-triage/scripts/triage-main.sh
# Triage one specific workflow run (handy for workflow_dispatch URLs)
.github/skills/ci-triage/scripts/triage-run.sh 26411751837Each script writes a report to docs/ci-reports/ that the agent then
refines using the categorization rules below.
Workflow
1. Enumerate failing checks
For a PR:
gh pr checks <PR> --repo hyperledger-cacti/cacti --json name,state,link \
--jq '.[] | select(.state=="FAILURE" or .state=="CANCELLED")'For a commit/main:
gh api "repos/hyperledger-cacti/cacti/commits/<sha>/check-runs?per_page=100" \
--jq '.check_runs[] | select(.conclusion=="failure" or .conclusion=="cancelled")
| {name, html_url, id:.id}'2. Fetch failing job logs
Prefer the API (works while runs are in progress and is more reliable than
gh run view --log-failed):
gh api repos/hyperledger-cacti/cacti/actions/jobs/<job_id>/logs \
| grep -iE "FAIL |error|exit code|timeout|no tests found|undefined:|cannot find" \
| grep -vE "YN0|deprecat|warning|notice|test-reporter|##\[group" \
| tail -403. Categorize each failure
Match each failure to a root-cause bucket (see REFERENCE.md for the full pattern catalog and historical examples). Common buckets:
| Bucket | Signal | Action |
| PR-caused regression | New error in code/config the PR touched | Block merge, fix in PR |
| Self-inflicted by ignore pattern | No tests found, exiting with code 1 | Add --passWithNoTests or remove the job |
| Jest config regex | SyntaxError: Invalid regular expression: Nothing to repeat | Fix jest.config.js (glob != regex) |
| Polkadot/ESM | dynamic import callback was invoked without --experimental-vm-modules | Add Jest ESM flag |
| Go toolchain | undefined: min in protobuf package | Bump actions/setup-go to 1.23 |
| Long-running integration timeout | Exceeded timeout of 3600000 ms for a hook | Pre-existing flake; document, don't block PR |
| Removed package job | Job exists for archived package | Remove from *-workflow.yaml |
| GHA infra flake | Cache service responded with 400, Create Artifact Container failed, Bad credentials | Re-run; pin perms/token if recurring |
| Permissions / OIDC | Bad credentials on dorny/paths-filter | Add permissions: block + explicit token |
Empty github.base_ref | fatal: Not a valid object name origin/ exit 128 on dispatch/schedule | Guard with if [[ -z "$BASE_REF" ]] fallback |
4. Write the report
Use templates/report-template.md. Required sections:
- Run metadata (PR/sha, run id, date)
- Summary table (job → bucket → caused-by-PR)
- Per-failure details with log excerpts (5-10 lines)
- Recommended fixes ordered by priority
- Pre-existing vs PR-caused split
5. Verify report before sharing
- Every failing job has a category and recommendation
- Log excerpts include the actual error line, not just
##[error] - Pre-existing flakes are clearly separated from PR regressions
- File saved at
docs/ci-reports/pr-<N>-ci-failures.md
Cacti-specific Gotchas
Cacti CIworkflow removedpushtrigger (commitce833fd95). Onmainit only runs viaschedule(Mon/Thu 08:00 UTC) orworkflow_dispatch. Trigger manually:gh workflow run "Cacti CI" --ref main.gh run view --log-failedoften returns empty for long runs. Usegh api .../actions/jobs/<id>/logsinstead.testPathIgnorePatternsinjest.config.jsare RegExp, not globs.workspace:protocol resolves locally even when the version is unpublished on npm — don't confuseYN0002workspace warnings with real failures.- Per-job
JEST_TEST_PATTERN+ a matchingtestPathIgnorePatternsentry results in "No tests found, exiting with code 1". Remove the job, not the ignore.
Files
- scripts/triage-pr.sh — full PR triage pipeline
- scripts/triage-main.sh — main branch triage
- scripts/triage-run.sh — single workflow run triage (good for
workflow_dispatchURLs) - scripts/fetch-job-log.sh — single-job log fetch + filter (high-signal grep with SARIF/JSON noise stripped)
- REFERENCE.md — full pattern catalog
- templates/report-template.md — report skeleton
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

