Skip to content
Back to skills

2532 L1 Task 002 Port Allocator 4329b160

ASecurity

Implement ephemeral port allocation (49152-65535) for worker isolation.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
testingpythonbash

Works with

  • mcp

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 2532-l1-task-002-port-allocator_4329b160 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 2532 L1 Task 002 Port Allocator 4329b160?

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

Security grade badge for 2532 L1 Task 002 Port Allocator 4329b160
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-2532-l1-task-002-port-allocator-4329b160/badge)](https://www.skillsdirectory.com/skills/tools-only-2532-l1-task-002-port-allocator-4329b160)

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

SKILL.md
# L1-TASK-002: Port Allocator

## Objective

Implement ephemeral port allocation (49152-65535) for worker isolation.

## Context

**Depends on**: L0-TASK-001 (Orchestrator Core)

Each worker needs a unique port for its MCP server. The port allocator manages the ephemeral range and tracks assignments.

## Files to Create

```
.zerg/
└── ports.py          # PortAllocator class
```

## Implementation Requirements

### PortAllocator Class

```python
import socket
import random
from dataclasses import dataclass
from typing import Optional

@dataclass
class PortAssignment:
    """Represents a port assignment."""
    port: int
    worker_id: str
    assigned_at: datetime

class PortAllocator:
    """Manages port allocation for workers."""
    
    EPHEMERAL_START = 49152
    EPHEMERAL_END = 65535
    
    def __init__(self):
        self.assignments: dict[str, PortAssignment] = {}
        self.used_ports: set[int] = set()
    
    def allocate(self, worker_id: str) -> int:
        """Allocate a port for a worker."""
        if worker_id in self.assignments:
            return self.assignments[worker_id].port
        
        port = self._find_available_port()
        assignment = PortAssignment(
            port=port,
            worker_id=worker_id,
            assigned_at=datetime.now()
        )
        self.assignments[worker_id] = assignment
        self.used_ports.add(port)
        return port
    
    def release(self, worker_id: str) -> None:
        """Release a worker's port."""
        if worker_id in self.assignments:
            port = self.assignments[worker_id].port
            self.used_ports.discard(port)
            del self.assignments[worker_id]
    
    def _find_available_port(self) -> int:
        """Find an available port in the ephemeral range."""
        max_attempts = 100
        
        for _ in range(max_attempts):
            port = random.randint(self.EPHEMERAL_START, self.EPHEMERAL_END)
            if port not in self.used_ports and self._is_port_available(port):
                return port
        
        raise RuntimeError("No available ports in ephemeral range")
    
    def _is_port_available(self, port: int) -> bool:
        """Check if port is available on the system."""
        try:
            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
                s.bind(('127.0.0.1', port))
                return True
        except OSError:
            return False
    
    def get_assignment(self, worker_id: str) -> Optional[PortAssignment]:
        """Get port assignment for a worker."""
        return self.assignments.get(worker_id)
```

## Acceptance Criteria

- [ ] Allocate ports in range 49152-65535
- [ ] Track assignments per worker
- [ ] Verify port availability before assignment
- [ ] Release ports on worker completion
- [ ] Handle concurrent allocation requests

## Verification

```bash
cd .zerg && python -c "
from ports import PortAllocator

pa = PortAllocator()

# Allocate ports
p1 = pa.allocate('worker-1')
p2 = pa.allocate('worker-2')

assert 49152 <= p1 <= 65535
assert 49152 <= p2 <= 65535
assert p1 != p2

# Same worker gets same port
assert pa.allocate('worker-1') == p1

# Release and verify
pa.release('worker-1')
assert pa.get_assignment('worker-1') is None

print(f'OK: Ports allocated: {p1}, {p2}')
"
```

## Test Cases

```python
# .zerg/tests/test_ports.py
import pytest
from ports import PortAllocator

def test_allocate_unique():
    pa = PortAllocator()
    ports = [pa.allocate(f'w{i}') for i in range(10)]
    assert len(set(ports)) == 10

def test_same_worker_same_port():
    pa = PortAllocator()
    p1 = pa.allocate('w1')
    p2 = pa.allocate('w1')
    assert p1 == p2

def test_release():
    pa = PortAllocator()
    pa.allocate('w1')
    pa.release('w1')
    assert pa.get_assignment('w1') is None

def test_port_in_range():
    pa = PortAllocator()
    port = pa.allocate('w1')
    assert 49152 <= port <= 65535
```

## Definition of Done

1. All acceptance criteria checked
2. Verification command passes
3. Unit tests pass: `pytest .zerg/tests/test_ports.py`

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.