carlos / platform Public
Review brief: media roadmap
You are GPT-6 reviewing a design roadmap independently of its author. Your output is a findings report, not an edit. Do not modify any file.
What to read
- The roadmap under review:
docs/superpowers/specs/2026-09-07-media-platform-roadmap-design.md(in this worktree). - The prior planning it descends from, as text below (amadan discussions #107, #112, #113 on carlos/platform).
- The platform code it cites, in this worktree:
internal/edge/edge.go,internal/edge/cache.go,internal/edge/static.go,internal/edge/storedoor.go,internal/edge/purge_header.go,internal/provision/provision.go,internal/caps/,internal/objstore/,internal/schedule/,internal/activator/,infra/modules/region-host/main.tf,.amadan/ci.d/20-cross@5,go.mod. - The private specs it cites, at
/home/paulca/github.com/carlosframework/platform-infrastructure/platform-design/superpowers/specs/(ignore.worktrees/): the object-storage primitive (2026-08-10), app capabilities (2026-08-03), app config and secrets (2026-08-02), route-scoped config delivery (2026-08-16), static platform host (2026-08-23), multi-region ingress (2026-08-20), remote host Pi (2026-08-04), unit economics (2026-08-11). - The suite doctrine the roadmap must not contradict:
/home/paulca/amadan.net/oficina/suite/docs/superpowers/specs/2026-09-05-suite-sharing-doctrine.md, especially rulings 3, 6, 8 and 15, §4.2, §8, and leak item 11. - The home identity design:
/home/paulca/amadan.net/oficina/home/docs/superpowers/specs/2026-08-30-home-design.md§5.
What matters most
- Doctrine. Does the public/secret/private mapping in §2 honour the suite doctrine, in particular ruling 3 (authorisation never cached) and leak item 11? Is the ask-the-app subrequest for private media sound, and what does it leak or cache that the roadmap does not admit?
- Security of the serving class. The bucket-policy grant, the Ed25519 signed links (URL shape, what the signature covers, prefix scope, rotation), the separate media origin and headers, the per-route cache. Look for a way to read a private or secret object without authorisation, to poison a cache entry, or to make one tenant's cache evict another's.
- The relay. TURN REST credentials with the per-account secret held on every region box. Is there a better shape that keeps verification local to the relay? Anything wrong about the port plan, placement, or the egress claim under ruling 6?
- Feasibility on the fleet as it is:
t4g.smallARM boxes, no cgo in the Go tree, no package installs today. Are the helper-binary rule in §3, the transform engine candidates, and the media worker on the Irelandt4g.mediumrealistic? Name what will fall over first. - Staging and order. Is anything in a later stage secretly required by an earlier one? Is anything in stage 1 that could wait?
- Claims about the code. Every
file:lineand every "the platform already does X" claim: check it. Report each one that is wrong. - What is missing that an app building on this would hit in the first month.
How to report
Number findings. For each: severity (P1 breaks a trust guarantee or makes a stage unbuildable as written; P2 is a contract or claim defect to fix before the stage spec; P3 is advisory), the section it concerns, the problem, the evidence with citations, and a proposed correction. End with a one-paragraph verdict: accept as a roadmap, accept with the listed corrections, or request changes. Do not soften findings, do not pad with praise, and do not restate the roadmap.
Prior planning, verbatim
#107 Media handling: a kind:media serving class over an app's store
(Brainstormed 2026-08-31. Decided: build the serving class first; media serves public and private; kind:media caches for itself. Open questions 1 to 3 were: what private means, how the edge is granted read, where the signing key lives. Open 4 and 5: abuse surface for transforms, who pays for derivatives. The roadmap answers all five.)
#112 A P2P WebRTC app has no relay
Meet is browser-to-browser WebRTC, rooms capped at four, signalling over HTTP on the app's instance. Platform has no UDP, no TURN, ports capability is 1 to 1023 with no protocol. Asked: is the direction a platform-hosted relay (A) or per-team bring-your-own TURN (B) under suite ruling 6? Meet's later requirements: STUN is the minimum and cannot be a third party's under ruling 6; TURN next with short-lived HMAC credentials as platform config; SFU later; credentials scoped per account; nearest-region placement; keep the "platform relay is not egress, third-party relay is" distinction.
#113 No upgrade over a tunnel-backed host
infra/remote-host.md: a tunnel-backed host cannot carry Connection: Upgrade. Asked: confirm as a design constraint; can an app know or refuse its placement? Meet defaults to SSE plus POST if unanswered.