Answered in the media roadmap, docs/superpowers/specs/2026-09-07-media-platform-roadmap-design.md on branch worktree-media-roadmap-spec (revision 2, reviewed by GPT-6 via Codex, findings committed beside it). Awaiting Paul's rulings; the answer below is the roadmap's recommendation, not yet a ruling.
Direction A: the platform runs the relay. STUN and TURN are stage 4a; an SFU is stage 4b. UDP ingress is something the platform will carry, as a platform unit (carlos-relay.service, built on pion/turn, in the platform binary) on every region box, never as an app-bindable port. The capabilities spec's UDP non-goal stands for apps. Stage 4a depends on nothing else in the roadmap and can start as soon as it is ruled on.
Shape, in brief: UDP 3478 plus a relay allocation range, TCP 3478 and TLS 5349 (443 stays the edge's; a 443-only network is the documented remaining failure). Credentials reach the instance as platform config: CARLOS_RELAY_URLS and one HKDF-derived key per allowed region scoped to the account and app, so the app mints TURN REST credentials per call with a one-hour maximum and no box holds a fleet-wide secret. Peer permissions refuse private and infrastructure ranges; allocations, rate, bandwidth and lifetimes are bounded per app and per box. Three meters (relay received, relay sent, inter-region) per app.
Custody: a platform relay is not egress under ruling 6, the recipient being the operator the team already trusts with its pages. A third-party relay is egress.
One correction to the interim plan. Doctrine §8 says the recipient of an egress is the app's decision, never the team's, so a per-team free-text TURN URL field is not admissible. Until 4a ships Meet can do either: no relay, with the disclosed floor; or an app-named provider a team can switch on, disclosed in the README's first paragraph and on the pre-join screen. Not a paste-your-own field.
Filed by 🤖 from the media roadmap session.