Awesome-claude-code create-retry-pattern
Generates Retry pattern for PHP 8.4. Creates resilience component with exponential backoff, jitter, and configurable retry strategies. Includes unit tests.
install
source · Clone the upstream repo
git clone https://github.com/dykyi-roman/awesome-claude-code
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/dykyi-roman/awesome-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/create-retry-pattern" ~/.claude/skills/dykyi-roman-awesome-claude-code-create-retry-pattern && rm -rf "$T"
manifest:
skills/create-retry-pattern/SKILL.mdsource content
Retry Pattern Generator
Creates Retry pattern infrastructure for handling transient failures.
When to Use
| Scenario | Example |
|---|---|
| Transient failures | Network timeouts, temporary unavailability |
| External API calls | HTTP requests to third-party services |
| Database operations | Deadlock recovery, connection issues |
| Message processing | Queue message handling with retries |
Component Characteristics
RetryPolicy
- Configures retry behavior
- Maximum attempts
- Delay strategy (fixed, exponential, linear)
- Jitter support to prevent thundering herd
RetryExecutor
- Executes operations with retry logic
- Tracks attempt count
- Applies delay between retries
- Logs retry attempts
Backoff Strategies
- Fixed: Same delay every time
- Linear: Delay increases linearly
- Exponential: Delay doubles (with optional jitter)
Generation Process
Step 1: Generate Core Components
Path:
src/Infrastructure/Resilience/Retry/
— Enum for delay strategiesBackoffStrategy.php
— Configuration with shouldRetry/calculateDelayRetryPolicy.php
— Attempt context value objectRetryContext.php
— Exception with attempt historyRetryException.php
Step 2: Generate Executor
Path:
src/Infrastructure/Resilience/Retry/
— Main retry logic with callbacksRetryExecutor.php
— For testabilitySleepInterface.php
Step 3: Generate Tests
— Policy behavior testsRetryPolicyTest.php
— Executor testsRetryExecutorTest.php
File Placement
| Component | Path |
|---|---|
| All Classes | |
| Unit Tests | |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Policy | | |
| Strategy Enum | | |
| Executor | | |
| Context | | |
| Exception | | |
| Test | | |
Quick Template Reference
RetryPolicy
final readonly class RetryPolicy { public function __construct( public int $maxAttempts = 3, public int $baseDelayMs = 100, public int $maxDelayMs = 10000, public float $multiplier = 2.0, public bool $useJitter = true, public BackoffStrategy $strategy = BackoffStrategy::Exponential, public array $retryableExceptions = [], public array $nonRetryableExceptions = [] ) {} public static function exponential(int $maxAttempts = 5, int $baseDelayMs = 100): self; public static function linear(int $maxAttempts = 5, int $baseDelayMs = 500): self; public function shouldRetry(\Throwable $e, int $attempt): bool; public function calculateDelay(int $attempt): int; }
RetryExecutor
final readonly class RetryExecutor { public function execute( callable $operation, RetryPolicy $policy, ?callable $onRetry = null ): mixed; }
Usage Example
$policy = new RetryPolicy( maxAttempts: 3, baseDelayMs: 200, retryableExceptions: [ ConnectionException::class, TimeoutException::class, ], nonRetryableExceptions: [ ClientException::class, ] ); try { $result = $retryExecutor->execute( operation: fn() => $httpClient->get($url), policy: $policy, onRetry: fn($e, $ctx) => $logger->warning('Retrying...', ['attempt' => $ctx->attempt]) ); } catch (RetryException $e) { // All retries exhausted $deadLetter->send($message, $e); }
Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|---|---|---|
| No Max Attempts | Infinite retries | Always set maxAttempts |
| No Backoff | Hammering service | Use exponential backoff |
| Retrying All Exceptions | Retrying unrecoverable errors | Specify retryable exceptions |
| No Jitter | Thundering herd | Enable jitter |
| Ignoring Context | Can't track attempts | Use RetryContext |
| Blocking Forever | Thread exhaustion | Set maxDelayMs cap |
References
For complete PHP templates and examples, see:
— RetryPolicy, BackoffStrategy, RetryExecutor, RetryContext templatesreferences/templates.md
— HTTP client, database, message consumer examples and testsreferences/examples.md