Claude-skill-registry acc-create-bulkhead

Generates Bulkhead pattern for PHP 8.5. Creates resource isolation with semaphore-based concurrency limiting and thread pool isolation. Includes unit tests.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/acc-create-bulkhead" ~/.claude/skills/majiayu000-claude-skill-registry-acc-create-bulkhead && rm -rf "$T"
manifest: skills/data/acc-create-bulkhead/SKILL.md
source content

Bulkhead Pattern Generator

Creates Bulkhead pattern infrastructure for resource isolation and fault containment.

When to Use

ScenarioExample
External API callsLimit concurrent requests to payment gateway
Database connectionsPool size limiting
CPU-intensive workLimit by CPU cores
Multi-instanceRedis-based coordination

Component Characteristics

BulkheadInterface

  • Common interface for all isolation strategies
  • Acquire and release semantics
  • Capacity monitoring

Strategies

  • Semaphore Bulkhead: Limits concurrent executions
  • Thread Pool Bulkhead: Isolates execution with dedicated pool
  • Queue-based Bulkhead: Limits with waiting queue

BulkheadFullException

  • Thrown when bulkhead capacity exhausted
  • Contains bulkhead name and capacity info

Generation Process

Step 1: Generate Core Components

Path:

src/Infrastructure/Resilience/Bulkhead/

  1. BulkheadInterface.php
    — Common interface
  2. BulkheadConfig.php
    — Configuration value object
  3. BulkheadFullException.php
    — Exception with capacity info

Step 2: Generate Bulkhead Implementation

Choose based on use case:

  1. SemaphoreBulkhead.php
    — Local semaphore-based limiting
  2. DistributedSemaphoreBulkhead.php
    — Redis-based for multi-instance

Step 3: Generate Registry (Optional)

  1. BulkheadRegistry.php
    — Manages multiple bulkheads

Step 4: Generate Tests

  1. SemaphoreBulkheadTest.php
    — Bulkhead behavior tests
  2. BulkheadConfigTest.php
    — Configuration tests

File Placement

ComponentPath
All Classes
src/Infrastructure/Resilience/Bulkhead/
Unit Tests
tests/Unit/Infrastructure/Resilience/Bulkhead/

Naming Conventions

ComponentPatternExample
Interface
BulkheadInterface
BulkheadInterface
Semaphore
SemaphoreBulkhead
SemaphoreBulkhead
Distributed
DistributedSemaphoreBulkhead
DistributedSemaphoreBulkhead
Config
BulkheadConfig
BulkheadConfig
Registry
BulkheadRegistry
BulkheadRegistry
Exception
BulkheadFullException
BulkheadFullException
Test
{ClassName}Test
SemaphoreBulkheadTest

Quick Template Reference

BulkheadInterface

interface BulkheadInterface
{
    public function execute(callable $operation): mixed;
    public function tryAcquire(): bool;
    public function release(): void;
    public function getAvailablePermits(): int;
    public function getActiveCount(): int;
    public function getName(): string;
}

BulkheadConfig

final readonly class BulkheadConfig
{
    public function __construct(
        public int $maxConcurrentCalls = 10,
        public int $maxWaitDuration = 0,
        public bool $fairness = true
    ) {}

    public static function default(): self;
    public static function forCpuBound(int $cpuCores): self;
    public static function forIoBound(int $cpuCores): self;
    public static function forExternalService(int $maxConnections): self;
}

Usage Example

// Create limiter
$bulkhead = new SemaphoreBulkhead(
    name: 'payment-gateway',
    config: BulkheadConfig::forExternalService(maxConnections: 20),
    logger: $logger
);

// Execute with isolation
try {
    $result = $bulkhead->execute(fn() => $client->charge($request));
} catch (BulkheadFullException $e) {
    return Result::serviceOverloaded();
}

Use Case Selection

Use CaseBulkhead TypeConfig
External API callsSemaphoreLimited by API rate limits
Database connectionsSemaphoreLimited by pool size
CPU-intensive workSemaphoreLimited by CPU cores
Multi-instanceDistributedRedis-based coordination
Mixed workloadsRegistryPer-service configuration

Anti-patterns to Avoid

Anti-patternProblemSolution
Global BulkheadSingle point of contentionPer-service bulkheads
No ReleasePermit leakAlways release in finally
Wrong SizeToo small = rejected, too large = no protectionRight-size per service
No MetricsCan't monitor usageTrack acquired/rejected
Infinite WaitThread starvationSet maxWaitDuration
No FallbackHard failure on fullProvide degraded response

References

For complete PHP templates and examples, see:

  • references/templates.md
    — BulkheadInterface, Config, SemaphoreBulkhead, DistributedSemaphoreBulkhead, Registry
  • references/examples.md
    — PaymentGatewayAdapter, ConnectionPool, OrderService examples and tests