Skip to content
cccskills
FreePublished on GitHub

add-addressing-mode

Add a new addressing mode to Turnfleet - implement Planner and Renderer, golden tests, an e2e case and an ADR. Use when a new way of assigning relay addresses or port ranges is needed.

The English summary is being prepared. Showing the original description.

Hazmi35/turnfleet2 stars(GitHub 2 + cccskills 0)

Run score Not tested

See how to install

Files included (1)

  • SKILL.md2.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Adding an addressing mode

An addressing mode answers two questions: which node does a relay run on, and which public relay identity (address, port range) does it own. Anything that does not change capacity accounting is not a new mode.

  1. Extend the enum. api/v1alpha1/AddressingMode plus the +kubebuilder:validation:Enum marker. Adding a value breaks every switch over the type by design, so fix them all (exhaustive enforces it).
  2. Implement internal/relay.Planner for the mode:
    • Deterministic ordering (sort nodes and addresses) so identities are stable across restarts and controller failover.
    • A candidate set of relay identities: (address, disjoint port range). Prove disjointness, do not assume it.
    • A relay moves only when its node or its address disappears. Anything else is a capacity bug the e2e suite will not catch.
    • Capacity honesty: if the mode shares one IP between relays, the plan must say so (portsTotal sums to one IP's port space, not more).
  3. Implement internal/relay.Renderer for the mode: listening address, relay address, -E/-X mapping, port range, listeners, realm, secret, denied peers. Every coturn flag must already appear in internal/relay/testdata/coturn-4.18.0-r0-help.txt. Before adding a flag, re-capture that file from the pinned image (docker run --rm <pinned coturn> turnserver --help) and update docs/adr/0008-coturn-config-rendering.md.
  4. Golden tests, one file per mode under internal/relay/testdata/, plus a planner test for stability, rebalancing and disjointness. The FuzzRenderer target must still pass.
  5. Webhook validation for mode-specific config in internal/webhook/v1alpha1/turnpool_webhook.go: required fields present, forbidden fields absent, ranges partitioned without overlap.
  6. An e2e case in test/e2e/ that proves the mode with real relays: the advertised address is the expected one, the ranges are disjoint, and each relay answers a real TURN Allocate. Fixtures go in test/fixtures/.
  7. An ADR docs/adr/NNNN-addressing-mode-<name>.md: what the mode is for, what it costs, what capacity it actually adds (often none), and what it forbids. Update the modes table in docs/adr/0001-addressing-modes.md and docs/capacity-model.md in the same change.
  8. Prove it: make ci then make test-e2e.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Change the TURNPool API types safely - edit types and markers, regenerate, update webhooks, tests and docs. Use whenever a field is added, removed or re-marked in api/v1alpha1.

The English summary is being prepared. Showing the original description.

Hazmi35/turnfleet2Updated Oct 25, 2026

Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes: Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/spec asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to "review since X".

The English summary is being prepared. Showing the original description.

Hazmi35/turnfleet2Updated Oct 25, 2026

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

The English summary is being prepared. Showing the original description.

Hazmi35/turnfleet2Updated Oct 25, 2026

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.

The English summary is being prepared. Showing the original description.

Hazmi35/turnfleet2Updated Oct 25, 2026

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

The English summary is being prepared. Showing the original description.

Hazmi35/turnfleet2Updated Oct 25, 2026

Debug a failing relay end to end - inspect the kind cluster, relay logs and rendered coturn config, and run turnfleet-probe by hand. Use when a relay never forms, a probe fails, or an e2e case breaks.

The English summary is being prepared. Showing the original description.

Hazmi35/turnfleet2Updated Oct 25, 2026

See all skills by Hazmi35

Report a problem with this skill