Skip to content

SCRUM-256 — AdminUI release history, rollback and promote

Plan ref: UI-11 (docs/11-admin-plane-plan.md). Uses Config's history, rollback and promote routes (SCRUM-219). Stacked on SCRUM-255.

What exists

Piece Notes
/config/releases "Releases" (viewer, nav: content) channel tabs dev · staging · live in the URL; head card with "View changes"; history table (head marked) with "Load older"; "Compose release" (live for admins only)
Rollback (admin) on every non-head row; dialog shows the diff head → that release; typed live confirmation on live
Promote (admin) dev → staging and staging → live, with the diff, a required message, and typed live on live
After success head and history refetched at once, toast; 409 stale_release → the shared "someone published since you opened this" dialog; 409 no_changes → "Already the head" inline

Also: uplot and @tanstack/vue-virtual are pre-bundled in dev. They are imported only from lazy routes, so a cold dev server discovered them late and reloaded mid-test.

How to verify

cd services/adminui
npm run typecheck && npm run lint && npm run format:check && npx vitest run && npm run build
rm -rf node_modules/.vite && npx playwright test

Results at time of writing

  • typecheck, lint, prettier, vitest (405 tests), build: pass.
  • Playwright 31/31 three times from a cold Vite cache (one of two cold runs failed before the pre-bundle fix), incl. an admin rollback updating the head immediately, promote dev → staging, live rollback gated on typing live, and a live_ops user seeing neither action.

How it was built

DeepSeek run scoped (Landlock) to services/adminui (928 s, ~61k output tokens, reasoning effort low). Claude review: traced the cold-start failure DeepSeek reported to lazily imported dependencies missing from the pre-bundle list, and fixed it.