🎯

m13-domain-error

🎯Skill

from goooice/rust-skills

VibeIndex|
What it does

Designs comprehensive domain error handling strategies with categorization, recovery mechanisms, and contextual error management for different audiences.

πŸ“¦

Part of

goooice/rust-skills(35 items)

m13-domain-error

Installation

Add MarketplaceAdd marketplace to Claude Code
/plugin marketplace add ZhangHanDong/rust-skills
Install PluginInstall plugin from marketplace
/plugin install rust-skills@rust-skills
Quick InstallInstall with npx
npx skills add ZhangHanDong/rust-skills
git cloneClone repository
git clone https://github.com/ZhangHanDong/rust-skills.git
πŸ“– Extracted from docs: goooice/rust-skills
4Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

"Use when designing domain error handling. Keywords: domain error, error categorization, recovery strategy, retry, fallback, domain error hierarchy, user-facing vs internal errors, error code design, circuit breaker, graceful degradation, resilience, error context, backoff, retry with backoff, error recovery, transient vs permanent error, ι’†εŸŸι”™θ――, ι”™θ――εˆ†η±», 恒倍策η•₯, 重试, 熔断器, δΌ˜ι›…ι™ηΊ§"

Overview

# Domain Error Strategy

> Layer 2: Design Choices

Core Question

Who needs to handle this error, and how should they recover?

Before designing error types:

  • Is this user-facing or internal?
  • Is recovery possible?
  • What context is needed for debugging?

---

Error Categorization

| Error Type | Audience | Recovery | Example |

|------------|----------|----------|---------|

| User-facing | End users | Guide action | InvalidEmail, NotFound |

| Internal | Developers | Debug info | DatabaseError, ParseError |

| System | Ops/SRE | Monitor/alert | ConnectionTimeout, RateLimited |

| Transient | Automation | Retry | NetworkError, ServiceUnavailable |

| Permanent | Human | Investigate | ConfigInvalid, DataCorrupted |

---

Thinking Prompt

Before designing error types:

  1. Who sees this error?

- End user β†’ friendly message, actionable

- Developer β†’ detailed, debuggable

- Ops β†’ structured, alertable

  1. Can we recover?

- Transient β†’ retry with backoff

- Degradable β†’ fallback value

- Permanent β†’ fail fast, alert

  1. What context is needed?

- Call chain β†’ anyhow::Context

- Request ID β†’ structured logging

- Input data β†’ error payload

---

Trace Up ↑

To domain constraints (Layer 3):

```

"How should I handle payment failures?"

↑ Ask: What are the business rules for retries?

↑ Check: domain-fintech (transaction requirements)

↑ Check: SLA (availability requirements)

```

| Question | Trace To | Ask |

|----------|----------|-----|

| Retry policy | domain-* | What's acceptable latency for retry? |

| User experience | domain-* | What message should users see? |

| Compliance | domain-* | What must be logged for audit? |

---

Trace Down ↓

To implementation (Layer 1):

```

"Need typed errors"

↓ m06-error-handling: thiserror for library

↓ m04-zero-cost: Error enum design

"Need error context"

↓ m06-error-handling: anyhow::Context

↓ Logging: tracing with fields

"Need retry logic"

↓ m07-concurrency: async retry patterns

↓ Crates: tokio-retry, backoff

```

---

Quick Reference

| Recovery Pattern | When | Implementation |

|------------------|------|----------------|

| Retry | Transient failures | exponential backoff |

| Fallback | Degraded mode | cached/default value |

| Circuit Breaker | Cascading failures | failsafe-rs |

| Timeout | Slow operations | tokio::time::timeout |

| Bulkhead | Isolation | separate thread pools |

Error Hierarchy

```rust

#[derive(thiserror::Error, Debug)]

pub enum AppError {

// User-facing

#[error("Invalid input: {0}")]

Validation(String),

// Transient (retryable)

#[error("Service temporarily unavailable")]

ServiceUnavailable(#[source] reqwest::Error),

// Internal (log details, show generic)

#[error("Internal error")]

Internal(#[source] anyhow::Error),

}

impl AppError {

pub fn is_retryable(&self) -> bool {

matches!(self, Self::ServiceUnavailable(_))

}

}

```

Retry Pattern

```rust

use tokio_retry::{Retry, strategy::ExponentialBackoff};

async fn with_retry(f: F) -> Result

where

F: Fn() -> impl Future>,

E: std::fmt::Debug,

{

let strategy = ExponentialBackoff::from_millis(100)

.max_delay(Duration::from_secs(10))

.take(5);

Retry::spawn(strategy, || f()).await

}

```

---

Common Mistakes

| Mistake | Why Wrong | Better |

|---------|-----------|--------|

| Same error for all | No actionability | Categorize by audience |

| Retry everything | Wasted resources | Only transient errors |

| Infinite retry | DoS self | Max attempts + backoff |

| Expose internal errors | Security risk | User-friendly messages |

| No context | Hard to debug | .context() everywhere |

---

Anti-Patterns

| Anti-Pattern | Why Bad | Better |

|--------------|---------|--------|

| String errors | No structure | thiserror types |

| panic! for recoverable | Bad UX | Result with context |

| Ignore errors | Silent failures | Log or propagate |

| Box everywhere | Lost type info | thiserror |

| Error in happy path | Performance | Early validation |

---

Related Skills

| When | See |

|------|-----|

| Error handling basics | m06-error-handling |

| Retry implementation | m07-concurrency |

| Domain modeling | m09-domain |

| User-facing APIs | domain-* |

More from this repository10

🎯
m10-performance🎯Skill

Optimizes code performance by identifying bottlenecks, measuring impact, and guiding strategic improvements across algorithm, data structure, and memory efficiency.

🎯
m14-mental-model🎯Skill

Applies the M14 mental model framework to enhance decision-making and strategic thinking through structured cognitive analysis.

🎯
m04-zero-cost🎯Skill

Guides developers in choosing zero-cost abstractions by analyzing type system constraints and performance trade-offs in Rust generics and traits.

🎯
meta-cognition-parallel🎯Skill

Performs parallel three-layer meta-cognitive analysis by forking subagents to simultaneously analyze language mechanics, design choices, and domain constraints, then synthesizing results.

🎯
unsafe-checker🎯Skill

Identifies and reviews unsafe Rust code patterns, FFI risks, and potential memory unsafety in Rust projects.

🎯
rust-skill-creator🎯Skill

Dynamically generates Claude skills for Rust crates, standard library modules, and documentation by extracting and processing technical details from specified URLs.

🎯
coding-guidelines🎯Skill

Provides comprehensive Rust coding guidelines covering naming conventions, best practices, error handling, memory management, concurrency, and code style recommendations.

🎯
rust-refactor-helper🎯Skill

Performs safe Rust refactoring by analyzing symbol references, checking conflicts, and applying changes across project files using LSP.

🎯
m03-mutability🎯Skill

Diagnoses and guides resolution of Rust mutability and borrowing conflicts by analyzing ownership, mutation patterns, and thread-safety requirements.

🎯
m05-type-driven🎯Skill

Explores and demonstrates type-driven development techniques in Rust, showcasing advanced type system features and pattern matching strategies.