Sub-issue of #81. Batch 1/3 of the shared/ui follow-up integration deferred from #68.
Refs: PRD-018 SC-2 · RFC-016 · EVID-022 · closing EvidencePack EVID-023.
Closed by PR #85 (commit 434e179 for this batch).
Why
widgets/version-footer/ is the smallest integration surface and is a good first batch — it exercises ~half of the visual-atom primitives (Badge, Button, Progress, Spinner, Alert) on a single, well-contained widget. Landing it first establishes the migration pattern (atom-by-atom replacement, no behavioural change) before the larger mosaic surface in batch 2.
What landed
widgets/version-footer/ui/UpdateButton.svelte (commit 434e179):
- Inline
<button class="update-btn"> → <Button variant="secondary" size="sm">
- Outer
.update-btn-pos wrapper kept for fixed positioning (50/50 split: positioning stays inline, visual atom is now a primitive).
- Inner glow dot + UPDATE label + arrow + version chip kept as decorative spans.
UpdateDialog.svelte and VersionFooter.svelte reviewed and intentionally not modified — UpdateDialog already uses Dialog/Button/Code primitives; VersionFooter is fixed-positioned chrome (single bordered pill spanning two text segments), not an atom-mappable surface. Documented in PR description.
Acceptance criteria
Sub-issue of #81. Batch 1/3 of the shared/ui follow-up integration deferred from #68.
Refs: PRD-018 SC-2 · RFC-016 · EVID-022 · closing EvidencePack EVID-023.
Closed by PR #85 (commit
434e179for this batch).Why
widgets/version-footer/is the smallest integration surface and is a good first batch — it exercises ~half of the visual-atom primitives (Badge,Button,Progress,Spinner,Alert) on a single, well-contained widget. Landing it first establishes the migration pattern (atom-by-atom replacement, no behavioural change) before the largermosaicsurface in batch 2.What landed
widgets/version-footer/ui/UpdateButton.svelte(commit434e179):<button class="update-btn">→<Button variant="secondary" size="sm">.update-btn-poswrapper kept for fixed positioning (50/50 split: positioning stays inline, visual atom is now a primitive).UpdateDialog.svelteandVersionFooter.sveltereviewed and intentionally not modified —UpdateDialogalready uses Dialog/Button/Code primitives;VersionFooteris fixed-positioned chrome (single bordered pill spanning two text segments), not an atom-mappable surface. Documented in PR description.Acceptance criteria
grep -RIn '<style>' template/src/widgets/version-footershows only layout/motion styles, not atom styles. Verified post-merge: 3 style blocks remain (UpdateButton/UpdateDialog/VersionFooter), zero atom selectors (grep -E '\.(btn|badge|alert|progress|spinner)\s*\{'returns nothing).@/shared/ui.npm run checkpasses (0 errors, 0 warnings, 1039 files)./(footer visible) — 0 console errors, dual-theme parity (light + dark verified via MCP).develop: net diff is −7 LOC in this widget (33 lines removed, 26 added), so primitive use does not increase JS by any measurable amount. Pre-Create and promote components #68 cumulative baseline not re-measured (would require checkout-and-build of the old commit), but PR-internal effect is neutral/negative.