carlos / platform Public

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

Plain git — no account needed to clone.

Download

Download this file

Review brief: temporary static sites

You are an independent second reader of a design spec for the CARLOS platform (this repository). Read cold and adversarially.

Spec: docs/superpowers/specs/2026-09-25-temporary-static-sites-design.md at the commit named in the prompt.

Fixed rulings, do not re-argue

§1 of the spec lists the rulings the product owner has taken. Do not propose alternatives to them. Report only mechanisms that fail to honour a ruling, or that break something else in the platform.

What to check

Verify against the code, not the spec's description of it. Cite file:line for every claim about existing code. The places that matter:

  • internal/release/trash.go (tombstone, TrashCooloff, PurgeApp, PurgeReady), internal/release/production.go (signed flag envelope).
  • internal/domains/reconcile.go (trash listing 1a, route drop 1c, auto-purge 1d, platform/canary minting).
  • internal/host/housekeeper.go, internal/host/agent.go (which boxes run the domains reconcile, and whether they hold bucket write).
  • internal/console/apicli.go (handleAPITrashApp, handleAPIRestoreApp), internal/console/domainattach.go, internal/console/apiinstances.go, internal/console/authcli.go.
  • internal/console/store.go (apps table, CreateAppIn, trash rows), internal/console/materialize.go, internal/console/ownership.go, internal/console/server.go (claimApp), accounts.go (migrate).
  • deploy.go (runDeploy, mintPlatformHost, deployTargets, ship-then-promote order), apps.go, retention.go.

Questions worth your time:

  1. Can a real, permanent site end up expired, or purged on the 3-day window? Look for any path: races, restore, keep, the brand-new checks, legacy unqualified keys, apps with object stores, apps created by carlos instances create rather than deploy.
  2. Can a temporary app escape expiry or the cap (keep races, restore loops, manual trash, apps ttl bounds, renaming, the listing)?
  3. Does the fail-safe table in §2 hold at every consumer, including boxes running old code and keyless boxes?
  4. Does the spec's claim that only the housekeeper writes the trash marker on expiry match how reconcile is actually scheduled? What bucket authority does that box have?
  5. Ordering: expiry-record-first creation, restore's rewrite-then- untrash, and purge's re-read. Any window left?
  6. Anything the spec relies on that does not exist, or exists with a different shape.

Output

A numbered list of findings, each with: severity (P1 breaks a ruling or loses data, P2 wrong behaviour, P3 clarity/gap), the spec section, the code evidence with file:line, and a concrete fix. Then a one-line verdict: accept, or revise. Do not rewrite the spec. No praise.

On a later round you will be given your earlier findings files. Start with a disposition table (finding → fixed / declined-with-reason acceptable / not fixed), then only new findings.