What problem does it solve? TypeScript backends often end up with inconsistent error handling: message-string matching, swallowed catch blocks, raw infrastructure errors leaking into caller contracts, and confusion over when to throw versus return explicit error values. This Skill provides a disciplined framework for modeling failures and deciding where errors are created, enriched, translated, and shaped across layer boundaries. ## Core Features & Use Cases - Failure-Family Classification: Splits failures into programmer bugs, operational infrastructure failures, expected branching outcomes, and cancellation, then assigns the right signal form (exception, explicit error value, or nullable return) to each. - Stable Error Identity: Enforces machine-readable identity through code or kind discriminants instead of fragile message matching, with cause-based context preservation and caught-unknown normalization. - Boundary Ownership Mapping: Assigns explicit create, enrich, translate, and shape ownership across infrastructure, domain, and transport layers, including Node delivery boundaries like promise rejections and EventEmitter or stream 'error' events. - Use Case: When refactoring a service where route handlers catch raw database errors and branch on error.message, use this Skill to audit the real translation seams, introduce a stable AppError.code contract at handler boundaries, and eliminate swallow-to-null patterns. ## Quick Start Ask the assistant to review your TypeScript service's error handling and recommend where each failure should throw, return an explicit error value, or be translated into an AppError at the route boundary.