← ClaudeAtlas

diagnose-a-lying-signallisted

Use when a status surface and reality disagree: a green check for work that cannot have happened, a badge reading "unknown" or an implausible number, a run that failed with nothing in it, a command that "found nothing" it should have found. Fires on "the check is green but...", "the badge still says unknown", "why did that fail with nothing in the log", "it says it passed but nothing ran", "that number cannot be right". Do NOT fire for an honest failure with a real error in a real log: that is debugging, and the log is already telling the truth.
damson/hard-won-skills · ★ 1 · AI & Automation · score 67
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