ci-triage
Investigating CI
ci-watch answers "has it finished, and did it pass?" for one run you are waiting on. This skill answers the two questions you get asked cold: "is anything red?" and "why is this red?" — starting from a branch name or a commit, never from a URL someone hands you.
The rule
Never answer "is it green?" from run-level conclusion. Query the commit's check-runs.
A GitHub Actions run rolls up its jobs into one conclusion, and that rollup is lossy in the exact case that matters:
| What happened | Run conclusion |
Job conclusions | gh run list shows |
|---|---|---|---|
| A job failed | failure |
one failure |
✅ red — you see it |
| A job failed inside a run that also got cancelled | cancelled |
one failure |
❌ nothing — filtered out |
Superseded by cancel-in-progress |
cancelled |
all cancelled |
❌ nothing (correctly) |
The middle row is real and it is what the UI paints red on the commit. It happens whenever a workflow has an aggregation/gate job that runs after its matrix legs: concurrency: cancel-in-progress cancels the legs, the gate still runs, sees cancelled, and fails. The run rolls up cancelled; the gate job is failure.