Skip to content
Agentmart
Submit a tool

systematic-debugging

Debugging from evidence: read the failure, form one hypothesis, test it.

Skill by ayeo-io

IndexedApache-2.0★ 1
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/ayeo-io-systematic-debugging

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Debugging from evidence: read the failure, form one hypothesis, test it. Load on an unexpected failure.

Use cases: testing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/systematic-debugging

What's inside

Skill name
systematic-debugging
Description
Debugging from evidence: read the failure, form one hypothesis, test it. Load on an unexpected failure.
License
Apache-2.0
Instructions
103 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Systematic Debugging

A test failed and you did not expect it to. The reflex is to change something
plausible and re-run. That reflex is why debugging sessions get long: each
fix you try is a guess, guesses do not accumulate into understanding, and the
fourth one lands on a system you no longer have a model of.

This is the method that replaces the reflex. It is four phases and one escape
clause, and the escape clause is the part Compass adds.

## Root cause investigation (phase 1)

**Read, do not infer.** The single biggest cost in debugging is reasoning about
what the code *should* do instead of observing what it *does*.

- Instrument at every component boundary the failing path crosses - the call in,
  the call out, and the value at each hand-off. Not inside the function you
  suspect: at the edges, so you learn *where* the truth changes.
- Read the whole log, not the last line. The last line is where it surfaced;
  somewhere above is where it started.
- Reproduce it deliberately before changing anything. A failure you cannot
  trigger on demand is one you cannot confirm you fixed.

You leave this phase when you can point at the line where correct becomes
incorrect. Not before.

## Pattern analysis (phase 2)

**Find a working case and compare.** Almost every bug has a neighbor that
works: a sibling test, an earlier commit, a different input, another
environment.

Run the working case and the failing case side by side, and write down the
delta. Keep narrowing it until one difference remains. That difference is not
always the cause, but it is the only honest place to start hypothesizing.

## Single-hypothesis test (phase 3)

**One hypothesis, stated out loud, with a test that can falsify it.**

- State it in a sentence: "the token is expired by the time the validator sees
  it, because the clock is read twice."
- Design the smallest check that would come out differently if it were false.
- Run it. If it does not falsify cleanly, the hypothesis was too vague - sharpen
  it and repeat.

Changing two things at once is what makes a debugging session unrecoverable.
You stop being able to attribute the result, and both changes stay in the code.

## Fix through a failing test (phase 4)

**Write the regression test first, watch it go red, then fix it.**

This is the same red-green discipline the implement stage already runs (`compass tdd-red`,
then `compass tdd-green`) - see `tdd-discipline`. It matters more here, not
less: a bug fixed without a test that failed for the bug's reason is a bug you
cannot prove you fixed, and one that returns without anyone noticing.

If the test does not go red first, you have not reproduced the bug. Go back to
phase 1.

## The escape clause - three failed fixes means the framing is wrong

**After three consecutive fixes that did not hold, stop fixing.** Do not try
a fourth.

Three failures in a row is not bad luck. It means the model you are debugging
against does not match the system - and continuing to make changes against a
wrong model damages code that was not broken. The question stops being "what is
the bug" and becomes "why do I keep being wrong about this".

In Compass terms that is a **re-assessment** signal, not just a debugging one. An issue
whose fixes keep failing is usually an issue whose risk, familiarity or
size was misread at the assess stage - most often familiarity scored `brownfield-mapped`
when the behavior was never actually written down.

So:

```
/compass:assess --reassess --reason "three fixes failed; the familiarity was misread"
```

Re-score the dimensions honestly. If familiarity is genuinely unmapped, the
unmapped-familiarity floor (`RP-FLOOR-002`) will force `behavior-mapping`
(on an atomic or small change with trivial or contained risk and no domain
label, `RP-ADV-002` gives it as advice),
and writing the current behavior down is very often the thing that ends the
bug hunt. A re-assess here is the system working; a fourth guess is not.

## Anti-patterns

- **The plausible change.** Editing something that looks wrong without a
  hypothesis that predicts the failure. If you cannot say what you expect to
  change, you are not testing anything.
- **Debugging by diff.** "It worked before this commit" locates a change, not a
  cause. Use it to build a hypothesis, not to skip phase 1.
- **The silent fourth fix.** Trying one more after three failures because
  this one *feels* right. Feeling right is what the previous three felt like.
- **Fixing the symptom.** Making the test pass without understanding why it
  failed. On a hotfix this is an explicit, recorded follow-up; anywhere
  else it is a bug you have hidden rather than removed.

From ayeo-io/compass, Apache-2.0.

More from ayeo-io/compass

Signals

Stars
1
Forks
0
Open issues
23
Last commit (this folder)
Oct 20, 2026 (9 days ago)
Last release
Oct 20, 2026 (9 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from ayeo-io

Cite this page

systematic-debugging skill. Agent Mart. https://agentmart.dev/skills/ayeo-io-systematic-debugging (last updated 2026-10-24)