What problem does it solve? Standard Go errors lack context — you see "connection failed" but not which user triggered it, what query was running, or the full call stack. This Skill guides you to write errors as structured data with samber/oops, so every error carries domain, attributes, trace IDs, and stack traces for on-call diagnosis. ## Core Features & Use Cases - Error Builder Chains: Compose errors fluently with .In(), .Tags(), .Code(), .With(), .User(), and .Tenant() to attach structured context at every layer. - Wrapping & Panic Recovery: Wrap existing errors with .Wrapf() (nil-safe), and convert panics to structured errors with .Recover() at goroutine boundaries. - Low-Cardinality Messages: Keep variable data in .With() attributes instead of message strings so APM tools like Datadog, Loki, and Sentry can group errors properly. - Use Case: In a repository layer, wrap a failed database query with the SQL statement, user ID, and domain tags; in the HTTP handler, add the request and trace ID — producing one error with full diagnostic context. ## Quick Start Refactor this Go function to use samber/oops structured errors with domain, tags, and attributes instead of plain fmt.Errorf.