create-timeout
Generates Timeout pattern components for PHP 8.4. Creates execution time limit infrastructure with configurable timeouts, fallback support, stream timeouts, and unit tests.
Best use case
create-timeout is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Generates Timeout pattern components for PHP 8.4. Creates execution time limit infrastructure with configurable timeouts, fallback support, stream timeouts, and unit tests.
Teams using create-timeout should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/create-timeout/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How create-timeout Compares
| Feature / Agent | create-timeout | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Generates Timeout pattern components for PHP 8.4. Creates execution time limit infrastructure with configurable timeouts, fallback support, stream timeouts, and unit tests.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Timeout Pattern Generator
Creates Timeout pattern infrastructure for execution time limits with fallback support.
## When to Use
| Scenario | Example |
|----------|---------|
| External API calls | HTTP requests to third-party services |
| Database queries | Long-running or unoptimized queries |
| Queue consumers | Message processing time limits |
| File operations | Large file uploads/downloads |
| Distributed calls | gRPC, SOAP, or REST inter-service calls |
| Batch processing | Individual item timeout within batch |
## Component Characteristics
### TimeoutConfig
- Immutable value object
- Duration in seconds (float for sub-second precision)
- Optional fallback callable
- Optional shouldRetry flag
- Named presets (fast, standard, slow)
### TimeoutInterface
- Domain layer contract
- execute(callable operation, TimeoutConfig config): mixed
- Single responsibility: enforce time limit
### TimeoutExecutor
- pcntl_alarm + async signal based for CLI
- Catches SIGALRM to throw TimeoutException
- Restores previous signal handler after execution
- Thread-safe via execution context
### StreamTimeoutExecutor
- stream_set_timeout for I/O operations
- Works in both CLI and FPM
- Socket and stream resource support
### TimeoutException
- Extends RuntimeException
- Contains elapsed time and operation context
- Machine-readable properties for monitoring
### TimeoutMiddleware
- PSR-15 compatible for HTTP clients
- Adds timeout to outgoing requests
- Configurable per-route timeouts
---
## Generation Process
### Step 1: Analyze Request
Determine:
- Target use case (API calls, DB queries, queue consumers)
- Timeout strategy (signal-based, stream-based, or both)
- Fallback behavior (exception, default value, cached result)
### Step 2: Generate Core Components
1. **Domain Layer** (`src/Domain/Shared/Timeout/`)
- `TimeoutConfig.php` — Configuration value object
- `TimeoutInterface.php` — Execution contract
- `TimeoutException.php` — Timeout exceeded exception
2. **Infrastructure Layer** (`src/Infrastructure/Resilience/Timeout/`)
- `SignalTimeoutExecutor.php` — pcntl_alarm based implementation
- `StreamTimeoutExecutor.php` — stream_set_timeout based
- `NullTimeoutExecutor.php` — No-op for testing
- `TimeoutExecutorFactory.php` — Environment-aware factory
3. **Presentation Layer** (`src/Presentation/Middleware/`)
- `TimeoutMiddleware.php` — PSR-15 HTTP middleware
4. **Tests**
- `TimeoutConfigTest.php`
- `SignalTimeoutExecutorTest.php`
- `TimeoutExceptionTest.php`
---
## File Placement
| Layer | Path |
|-------|------|
| Domain Types | `src/Domain/Shared/Timeout/` |
| Infrastructure | `src/Infrastructure/Resilience/Timeout/` |
| Middleware | `src/Presentation/Middleware/` |
| Unit Tests | `tests/Unit/{Layer}/{Path}/` |
---
## Key Principles
### Signal-Based Timeout (CLI)
1. Register SIGALRM handler
2. Set pcntl_alarm with timeout duration
3. Execute operation
4. Cancel alarm on completion
5. Restore previous handler
6. If alarm fires → throw TimeoutException
### Stream-Based Timeout (FPM/CLI)
1. Set stream_set_timeout on resource
2. Check stream_get_meta_data for timed_out flag
3. Works for network I/O operations
### Fallback Strategy
1. On timeout, check if fallback provided
2. Execute fallback within separate timeout (prevent cascading)
3. If no fallback, throw TimeoutException
4. Log timeout event with context
---
## Naming Conventions
| Component | Pattern | Example |
|-----------|---------|---------|
| Config VO | `TimeoutConfig` | `TimeoutConfig` |
| Interface | `TimeoutInterface` | `TimeoutInterface` |
| Signal Impl | `SignalTimeoutExecutor` | `SignalTimeoutExecutor` |
| Stream Impl | `StreamTimeoutExecutor` | `StreamTimeoutExecutor` |
| Null Impl | `NullTimeoutExecutor` | `NullTimeoutExecutor` |
| Exception | `TimeoutException` | `TimeoutException` |
| Factory | `TimeoutExecutorFactory` | `TimeoutExecutorFactory` |
| Middleware | `TimeoutMiddleware` | `TimeoutMiddleware` |
| Test | `{ClassName}Test` | `SignalTimeoutExecutorTest` |
---
## Quick Template Reference
### TimeoutConfig
```php
final readonly class TimeoutConfig
{
public function __construct(
public float $durationSeconds,
public ?callable $fallback = null,
public bool $shouldRetry = false,
public string $operationName = 'unknown',
) {}
public static function fast(): self; // 3 seconds
public static function standard(): self; // 10 seconds
public static function slow(): self; // 30 seconds
public static function of(float $seconds): self;
}
```
### TimeoutInterface
```php
interface TimeoutInterface
{
/**
* @template T
* @param callable(): T $operation
* @return T
* @throws TimeoutException
*/
public function execute(callable $operation, TimeoutConfig $config): mixed;
}
```
### TimeoutException
```php
final class TimeoutException extends \RuntimeException
{
public function __construct(
public readonly float $elapsedSeconds,
public readonly float $timeoutSeconds,
public readonly string $operationName,
?\Throwable $previous = null,
) {
parent::__construct(
sprintf('Operation "%s" timed out after %.2fs (limit: %.2fs)', $operationName, $elapsedSeconds, $timeoutSeconds),
0,
$previous,
);
}
}
```
---
## Usage Example
```php
$timeout = $timeoutFactory->create();
try {
$result = $timeout->execute(
operation: fn() => $httpClient->request('GET', $url),
config: TimeoutConfig::of(5.0),
);
} catch (TimeoutException $e) {
$logger->warning('API call timed out', [
'operation' => $e->operationName,
'elapsed' => $e->elapsedSeconds,
'timeout' => $e->timeoutSeconds,
]);
return $cachedResult;
}
```
---
## Composition with Circuit Breaker
```php
$result = $circuitBreaker->execute(
operation: fn() => $timeout->execute(
operation: fn() => $api->call($request),
config: TimeoutConfig::of(5.0),
),
fallback: fn() => $cache->get($cacheKey),
);
```
---
## Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|--------------|---------|----------|
| No timeout | Indefinite blocking | Always set explicit timeout |
| Too aggressive | Fail on normal slow responses | Tune per-operation |
| Global timeout | One size doesn't fit all | Per-operation config |
| No fallback | Hard failure on timeout | Provide degraded response |
| Ignoring context | Can't debug timeouts | Include operation name |
| Nested timeouts | Outer timeout kills inner | Coordinate timeout budgets |
---
## References
For complete PHP templates and examples, see:
- `references/templates.md` — All component templates
- `references/examples.md` — API call, DB query examples and testsRelated Skills
create-visitor
Generates Visitor pattern for PHP 8.4. Creates operations on object structures without modifying element classes, with visitor interface, concrete visitors, and visitable elements. Includes unit tests.
create-value-object
Generates DDD Value Objects for PHP 8.4. Creates immutable, self-validating objects with equality comparison. Includes unit tests.
create-use-case
Generates Application Use Cases for PHP 8.4. Creates orchestration services that coordinate domain objects, handle transactions, and dispatch events. Includes unit tests.
create-unit-test
Generates PHPUnit unit tests for PHP 8.4. Creates isolated tests with AAA pattern, proper naming, attributes, and one behavior per test. Supports Value Objects, Entities, Services.
create-unit-of-work
Generates Unit of Work pattern components for PHP 8.4. Creates transactional consistency infrastructure with aggregate tracking, flush/rollback, domain event collection, and unit tests.
create-test-double
Generates test doubles (Mocks, Stubs, Fakes, Spies) for PHP 8.4. Creates appropriate double type based on testing needs with PHPUnit MockBuilder patterns.
create-test-builder
Generates Test Data Builder and Object Mother patterns for PHP 8.4. Creates fluent builders with sensible defaults and factory methods for test data creation.
create-template-method
Generates Template Method pattern for PHP 8.4. Creates abstract algorithm skeleton with customizable steps, allowing subclasses to override specific parts without changing structure. Includes unit tests.
create-structured-logger
Generates Structured Logger for PHP 8.4. Creates PSR-3 structured logging setup with Monolog processors, correlation ID propagation, and context middleware. Includes unit tests.
create-strategy
Generates Strategy pattern for PHP 8.4. Creates interchangeable algorithm families with context class, strategy interface, and concrete implementations. Includes unit tests.
create-state
Generates State pattern for PHP 8.4. Creates state machines with context, state interface, and concrete states for behavior changes. Includes unit tests.
create-specification
Generates DDD Specification for PHP 8.4. Creates reusable business rule objects for validation, filtering, and querying with composite pattern support. Includes unit tests.