What problem does it solve? Flutter and Dart apps often leak low-level exceptions into the UI, swallow errors silently, or lose user-entered data on crashes and mistaken deletes. This Skill enforces a typed-error architecture where recoverable failures are sealed Result values switched on exhaustively, only bugs throw into a global error net, and transactions, autosave drafts, and soft-delete with Undo protect hand-entered data. ## Core Features & Use Cases - Typed Result/Failure spine: Hand-rolled zero-dependency sealed Result<T, F> with one sealed Failure family per boundary, carrying stable codes and typed params instead of localized strings. - Convert-at-boundary discipline: Narrow on-clause catches that log the original error and stack before returning a typed Failure, plus Isolate.run error re-wrapping and exhaustive switches with no default case. - Never-lose-data layer: One transaction per multi-table mutation, debounced autosave drafts, and optimistic soft-delete with Trash and SnackBar Undo behind a single shared filter. - CI guard scripts: check-swallowed-catch.sh and check-softdelete-parity.sh grep for banned catch patterns and analytics queries that bypass the active-only filter. - Use Case: When writing a repository method that calls SQLite, wrap the call once, catch SqliteException narrowly, log it, and return Err(ConstraintViolated(field)) so the Notifier switches every failure case and the UI localizes from the stable code. ## Quick Start Ask the AI to apply the error-handling-typed-results skill when writing a new repository boundary or reviewing a try/catch so failures become sealed Result values with exhaustive switches.