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.