error-handlingUse when writing or changing error handling — try/catch, raise/throw, Result or Option returns, validation, retries, resource cleanup, or how failures surface to users and API clients. Load before adding a catch block or deciding what an operation returns when it fails.
naming-and-structureUse when writing a new function, class, or module, or when renaming or restructuring existing code. Covers intent-revealing names, single responsibility, abstraction levels, argument design, and when a comment earns its place. Not for formatting or style questions the linter already decides.
refactoring-triggersUse when asked to clean up, refactor, simplify, or reduce duplication in existing code, or when a function you are editing has grown past comfort. Gives decidable triggers for extracting, splitting, or leaving code alone — and for when refactoring is out of scope.
testing-disciplineUse when writing or modifying tests — choosing what to assert, naming test cases, handling async waits, designing fixtures, or deciding which paths of a change need coverage. Load before writing the first assertion, not after the suite goes red.