Skip to content

SCRUM-255 — AdminUI release composer

Plan ref: UI-10 (docs/11-admin-plane-plan.md). Publishes through Config's release route (SCRUM-218).

What exists

Piece Notes
Entry point "Compose release" (live_ops+) on the namespace list with a channel picker; live offered to admins only. Route /config/releases/:channel/compose
Composer channel head (release, min client version, base_release_id); per client namespace a version select defaulting to the latest (or "not included"; "no version yet" disabled); server-audience namespaces listed greyed "server-only, never shipped to clients"; packs pre-checked from the head; min_client_version (semver); required message
Preview the would-be change against the head via the shared ReleaseDiffPanel (extracted from the release diff page); nothing to change → publish disabled
Live the publish button stays disabled until live is typed ("This publishes to players"), in danger styling
Results 201 → toast and the release diff page; 409 stale_release → "Someone published to since you opened this" with Review the new head (reload, keep selections, recompute) or Cancel; 400/404 inline

How to verify

cd services/adminui
npm run typecheck && npm run lint && npm run format:check && npx vitest run && npm run build
npx playwright test

Results at time of writing

  • typecheck, lint, prettier, vitest (390 tests), build: pass; Playwright 27/27 incl. publish to dev as live_ops, live gated on typing live (and refused to live_ops), and the stale-head dialog after another publish.
  • Screenshots checked (live composer, confirmation box).

How it was built

DeepSeek run scoped (Landlock) to services/adminui (1599 s, ~68k output tokens, reasoning effort low). Claude review (screenshots): widened the release message box, which rendered about 175 px wide.