Skip to content
Back to skills

Acc Create Bulkhead

ASecurity

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

  • 666 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 2, 2026
ai-agentsphpapidatabase

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add majiayu000/claude-skill-registry --skill acc-create-bulkhead --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Acc Create Bulkhead?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Acc Create Bulkhead
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-acc-create-bulkhead-claude-skill-registry/badge)](https://www.skillsdirectory.com/skills/majiayu000-acc-create-bulkhead-claude-skill-registry)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: acc-create-bulkhead
description: Generates Bulkhead pattern for PHP 8.5. Creates resource isolation with semaphore-based concurrency limiting and thread pool isolation. Includes unit tests.
---

# Bulkhead Pattern Generator

Creates Bulkhead pattern infrastructure for resource isolation and fault containment.

## When to Use

| Scenario | Example |
|----------|---------|
| External API calls | Limit concurrent requests to payment gateway |
| Database connections | Pool size limiting |
| CPU-intensive work | Limit by CPU cores |
| Multi-instance | Redis-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

| Component | Path |
|-----------|------|
| All Classes | `src/Infrastructure/Resilience/Bulkhead/` |
| Unit Tests | `tests/Unit/Infrastructure/Resilience/Bulkhead/` |

---

## Naming Conventions

| Component | Pattern | Example |
|-----------|---------|---------|
| 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

```php
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

```php
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

```php
// 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 Case | Bulkhead Type | Config |
|----------|---------------|--------|
| External API calls | Semaphore | Limited by API rate limits |
| Database connections | Semaphore | Limited by pool size |
| CPU-intensive work | Semaphore | Limited by CPU cores |
| Multi-instance | Distributed | Redis-based coordination |
| Mixed workloads | Registry | Per-service configuration |

---

## Anti-patterns to Avoid

| Anti-pattern | Problem | Solution |
|--------------|---------|----------|
| Global Bulkhead | Single point of contention | Per-service bulkheads |
| No Release | Permit leak | Always release in finally |
| Wrong Size | Too small = rejected, too large = no protection | Right-size per service |
| No Metrics | Can't monitor usage | Track acquired/rejected |
| Infinite Wait | Thread starvation | Set maxWaitDuration |
| No Fallback | Hard failure on full | Provide 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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.