diagnose-a-lying-signallisted
Install: claude install-skill damson/hard-won-skills
# Diagnose a signal that lies
A green check, a badge and an exit code are all summaries, and a summary is
produced by something that can be wrong about it. When the summary disagrees
with what you know, the first move is not to debug the underlying work: it is
to find the authoritative record and read that instead. Every hour lost to this
class of problem is spent fixing something that was never broken.
## Procedure
1. **State the disagreement in one sentence**, in the form "X reports Y, but Z
cannot be true at the same time." If you cannot, this skill does not apply;
see *When to STOP*.
2. **Name the surface and its authoritative source.** They are never the same
object. Common pairs:
| Surface | What actually holds the answer |
|---|---|
| A check on a PR | the run's jobs and steps, and their conclusions |
| A step reported green | the step's own log, plus whether it was allowed to fail |
| A published badge | the service's API record for that commit and branch |
| An exit status | the status of the command you meant, not of a pipeline |
| "No matches" | whether the command ran at all |
3. **Read the source, not a rendering of it.** Fetch the record and quote what
it says. Three renderings that routinely mislead, where `<o>/<r>` is the owner and
repository, `<id>` the run id the surface itself names:
```bash
# A run that failed with no jobs is a startup failure, not your code
gh api repos/<o>/<r>/actions/runs/<id>/jobs --j