SYNBaaS unified IA — Restore inside the section, Jobs → Backups, run detail everywhere
Synced read-only from
/home/synnet/mirrors/synvirt-product/docs/superpowers/specs/2026-07-16-synbaas-unified-ia-design.md. Edit at the source, not here.
SYNBaaS unified IA — Restore inside the section, Jobs → Backups, run detail everywhere
Section titled “SYNBaaS unified IA — Restore inside the section, Jobs → Backups, run detail everywhere”Date: 2026-07-16 · Status: approved (operator-approved via served mockup
https://dev.synvirt.mx/mockup/synbaas-unificado.html) · Scope: frontend only
(crates/web-ux-v2), zero wire change.
Problem
Section titled “Problem”Data protection is split across two top-level sidebar sections — SYNBaaS (Repositories · Jobs · Runs) and Recovery (Restore points) — although they are one workflow (protect ↔ recover). Additionally, the term “Job” is scheduler jargon: for the operator each row is the backup of a VM. Finally, the rich run detail drawer (throughput chart, stage breakdown, bottleneck verdict, streams) only exists in the Runs tab; from the Jobs accordion the operator can see a run’s summary line but cannot open its detail.
Decisions (operator-approved)
Section titled “Decisions (operator-approved)”- Restore moves into SYNBaaS. The top-level Recovery section disappears.
SYNBaaS becomes Backups · Runs · Repositories · Restore, where Restore
is a child row pointing at the unchanged
/recoveryroute (view internals untouched apart from its title, which follows the new label). The SYNBaaS section absorbs the/recoverymatch prefix so highlight + auto-expand keep working.NAV_RECOVERYstops being a section entirely (unlike Hardware it needs no shell-less model:/recoverynow resolves to the backup section, and the palette entry derives from the child row). - Jobs → Backups, label only. Tab label, card title, empty states, “New
backup” button, edit/delete dialog copy. URLs (
/backup/jobs), API paths, store fields, and testids stay exactly as-is — zero churn in tests that navigate by URL, zero wire change. - Section landing = Backups.
/backup(and the stale-segment fallback) redirect to/backup/jobs; the section header and the internal tab bar order follow: Backups · Runs · Repositories. - Full-row expand. Clicking anywhere on a backup row toggles its inline
run history (today only the chevron button does). The chevron stays (it is
the keyboard/a11y control,
aria-expanded); row click is a pointer convenience; Enter/Space on the focused row also toggles. Action cells (menu) stop propagation. - Run detail drawer everywhere, redesigned. The drawer is extracted from
RunsTab.vueinto a sharedcomponents/backup/RunDetailDrawer.vueand upgraded to the approved mockup layout: status chips on top, a metric tile grid (Duration · Data moved · Transport · Avg speed · Peak speed · Restore point), the throughput chart in a framed panel, the busy-per-stage bars with the bottleneck chip on the section header, then the existing honesty blocks (error copy, live transfer panel, restore context, promoted-full note, retention outcome, chain parentage with View, per- dataset streams) and the existing footer actions (Restore… / Cancel run / Close). Clicking a run in the Backups accordion opens this drawer; the Runs tab consumes the same component. Every field shown is real wire data (BackupRun+metrics); tiles render “—” when a run predates Phase D metrics.
Reference-console baseline
Section titled “Reference-console baseline”The reference backup consoles treat the job list as the primary “Backups” surface (the word “job” stays in logs, not in the operator’s face), keep restore one click away from backup in the same console, and open per-run statistics (throughput graph, per-stage bottleneck) directly from the job’s history. This redesign mirrors all three. Deliberate deviation: those consoles label the restore-point inventory “Backups (inventory)”; here the inventory lives under Restore because the Backups tab already owns the protection-unit meaning — stated per the standing baseline rule.
Out of scope
Section titled “Out of scope”Backend, wire, RecoveryView internals (beyond its title), the cloud sidebar shape beyond what it inherits from the shared model, ad-hoc wizard, job stepper. Deploy is a separately gated event.
Evidence bar
Section titled “Evidence bar”vitest full (nav orphan guard, sidebar specs, JobsTab/RunsTab specs), vue-tsc,
eslint, and the full Playwright suite with explicit pass/skip/fail counts
(UI-flow commit rule). Deep links ?expand=<job> and ?job=<id> keep working.