Skip to content

releases

mock data logout
04 distribution

sys: net-new — no releases table, no r2 binding, no download routes exist today

releases

publish, channel state, and yank for the seven products. everything here writes the shared mock store — the portal app dossiers read it live in this browser.

product latest stable latest beta last published open
owlette v3.2.4 v3.3.0-beta.1 2026-09-02
Moonshine v2.4.0 v2.5.0-beta.2 2026-08-27
Transmission v5.1.0 2026-08-11
Starlight v1.8.2 2026-07-08
Constellation v4.2.0 2026-06-30
phase v0.9.4 2026-08-24
Latticus v2.1.0 2026-05-19
§7 distribution contract

sys: net-new — proposed routes — none deployed

# public — cacheable; product sites + in-app update checks
GET /v1/products/:slug/releases?channel=stable|beta
  → [{ version, channel, published_at, notes_md, yanked,
       artifacts: [{ os, arch, size_bytes, sha256 }] }]

GET /v1/products/:slug/releases/latest?channel=stable
  → { version: "3.2.4", channel: "stable", published_at: "2026-09-02",
      notes_md: "…", artifacts: [{ os:"windows", arch:"x64",
      size_bytes: 88300544, sha256: "9f2c…" }],
      download_url: "https://id.tridant.io/apps/owlette" }

# gated — verifies entitlement + live standing + major_version_cap (vmax),
# logs a download_event, 302s to a short-lived signed R2 URL
POST /v1/me/downloads { product, version, os, arch }        # portal session
POST /v1/licenses/:key/download { version, os, arch }       # app / S2S

# admin — R2 direct-upload + finalize; yank
POST /v1/admin/products/:id/releases
POST /v1/admin/releases/:id/yank

· product sites render their own version badge + notes from the public read and route the download click to id.tridant.io/apps/:slug

· products.current_version becomes derived — the latest non-yanked stable in this table, single source of truth

· major_version_cap finally enforced — at the gated endpoint and visibly in the portal ledger

10 stations