carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

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

  1. The roadmap under review: docs/superpowers/specs/2026-09-07-media-platform-roadmap-design.md (in this worktree).
  2. The prior planning it descends from, as text below (amadan discussions #107, #112, #113 on carlos/platform).
  3. 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.
  4. 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).
  5. 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.
  6. 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.small ARM 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 Ireland t4g.medium realistic? 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:line and 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.