From break-things
Use when designing tests for a feature, bugfix, or acceptance criterion — especially when asking "what tests do I need?", "how do I test this?", "what should I assert?". Triggers on writing implementation code that needs tests, acceptance criteria that need verification, test design decisions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/break-things:what-to-testThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Predict how the code will break before writing the test. Sources: DeMillo, Lipton & Sayward (1978), Hoare (1969).
Predict how the code will break before writing the test. Sources: DeMillo, Lipton & Sayward (1978), Hoare (1969).
Not every test needs the full sequence. If the guard is obvious, the causal claim is a single assertion, and the failure mode has one plausible shape — answer the three questions in one sentence each and write the test. Run the mutation gate if the test guards something non-trivial. Scale the ceremony to the cost of a missed regression.
| Question | What it produces | Source |
|---|---|---|
| What are you guarding against? | The specific regression or acceptance criterion — a thing that could go wrong, not a vague "it should work." | — |
| What's the causal claim? | "If [condition], then [behavior]." The test's contract — its reason to exist. | Hoare (1969): precondition, operation, postcondition. |
| How does it most likely break? | The predicted failure mode. Determines test placement (unit vs integration), assertion shape, and what negative cases matter. | DeMillo et al. (1978): real faults are small deviations from correct programs (Competent Programmer Hypothesis). |
After writing the test, verify it guards what you claimed:
Don't reason about whether the test would catch the mutation. Introduce it and run the test. Computed results are more reliable than inferred ones.
This is targeted mutation testing (DeMillo et al., 1978): one predicted mutation, one verification. The Coupling Effect suggests tests that catch simple mutations also catch complex ones.
| Thought | Reality |
|---|---|
| "Obviously it needs a test for X" | Obvious tests often test the framework, not the behavior. State the causal claim. |
| "I'll add more tests later" | Later means never, or means after the regression ships. Guard the predicted failure now. |
| "High coverage means it's tested" | Coverage measures execution, not falsification. A test that runs code but asserts nothing has 100% coverage and 0% value. |
| "The mutation gate is overkill" | One edit + one test run. It costs less than debugging the regression it would have caught. |
| "I know this test works" | You know it passes. You don't know it guards. Mutate and verify. |
"Testing shows the presence, not the absence of bugs" (Dijkstra). This skill guards against predicted failures. The most dangerous bugs are the ones nobody anticipated. For systematic exploration of the failure space beyond prediction, use is-it-tested.
what-to-test decides what; TDD executes how.what-to-test is predictive: what will break, and does the test catch it?
npx claudepluginhub jackwillis/claude-plugins --plugin break-thingsProvides a checklist for code reviews covering functionality, security, performance, maintainability, tests, and quality. Use for pull requests, audits, team standards, and developer training.