From superpowers
Systematically enumerates failure modes, boundary conditions, and edge cases for a design before implementation begins. Invoked automatically by the brainstorming skill after Phase 1 (architecture) is approved. Produces a categorized list of edge cases that feeds directly into Phase 2 (error handling).
How this skill is triggered — by the user, by Claude, or both
Slash command
/superpowers:edge-case-discoveryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Systematically enumerate what can go wrong before writing any code. The goal is to surface failure modes, boundary conditions, and adversarial inputs that the happy path misses — so Phase 2's error handling addresses *discovered* problems, not *imagined* ones.
Systematically enumerate what can go wrong before writing any code. The goal is to surface failure modes, boundary conditions, and adversarial inputs that the happy path misses — so Phase 2's error handling addresses discovered problems, not imagined ones.
Core principle: You cannot handle what you have not enumerated. Vague statements like "handle errors appropriately" produce vague error handling. Specific enumeration produces specific handling.
Do NOT proceed to Phase 2 of brainstorming until you have completed edge case enumeration and the user has reviewed the results. Every design has edge cases. "This is too simple" is a rationalization — simple designs fail on simple edge cases.This skill is invoked automatically by the brainstorming skill between Phase 1 approval and Phase 2 presentation. You do not need to invoke it manually.
You need the approved Phase 1 design (architecture + components) as context. The enumeration analyzes that specific design — not abstract possibilities.
Work through each category below against the approved architecture. For each category, identify specific edge cases relevant to this design. Skip categories that genuinely do not apply — but state why you are skipping them so the user can correct you.
Examine every input the system accepts — user input, API parameters, file contents, environment variables, configuration values.
For each input, ask:
Edge cases identified:
Examine every state the system can be in and every transition between states.
For each stateful component, ask:
Examine every external system the design touches — databases, APIs, filesystems, network services, hardware.
For each dependency, ask:
Examine every operation where timing or order matters.
Ask:
Examine every resource the system consumes — memory, disk, connections, file handles, API quotas.
Ask:
After completing the general categories, apply the domain-specific checklist that matches your project type. These are in companion files in this directory:
If multiple checklists apply (e.g., a CLI that manages infrastructure), use all relevant ones. If none apply, skip this step and note what kind of system you are working with — the general categories above still apply.
Present the enumerated edge cases as a categorized list, grouped by the categories above. For each edge case, include:
The user reviews this list and may add, remove, or reprioritize edge cases. Once confirmed, these feed directly into Phase 2 of the brainstorming design.
| Pattern | Problem |
|---|---|
| "Handle errors appropriately" | Not an edge case. Name the specific error and the specific handling. |
| Listing only happy-path variations | Edge cases are about what goes wrong, not what goes right in different ways. |
| "Validate all inputs" | Which inputs? What validation? Against what rules? Be specific. |
| Skipping categories because "that won't happen" | If you know it won't happen, explain why. Otherwise, enumerate it. |
| Listing 50 edge cases with equal weight | Prioritize by severity. Data loss and crashes come before minor UX annoyances. |
Before presenting the edge case list to the user, verify:
npx claudepluginhub mieubrisse/superpowersCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.