From ba851680cee73f7899224c3f808779673b075d43 Mon Sep 17 00:00:00 2001 From: Jake Date: Fri, 15 May 2026 09:02:41 +0100 Subject: [PATCH] =?UTF-8?q?v0.2=20Phase=207.8=20/=207.9=20/=207.10:=20seco?= =?UTF-8?q?ndary=20windows=20=E2=80=94=20float=20/=20viewer=20/=20preview?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Combined commit for the three secondary windows. Each +layout@.svelte was already migrated in Phase 3 KI-05 (the legacy theme-sync $effect was deleted). The +page.svelte content for each window is explicitly bespoke per docs/release/v0.2-frontend-overhaul.md §6.3: /float — Lumotia-To-do panel: list pills, drag-and-drop between lists, context menus, pin-on-top, custom titlebar drag region. No Card/EmptyState/Toggle wrappers apply. /viewer — Transcript viewer with audio player, segment scrubbing, speaker labels. Bionic-reading action + per-region accessibility typography are load-bearing. No wrappers. /preview — Wayland-hardened transcription preview overlay. WindowTypeHint::Utility, never steals focus, hidden from Alt+Tab. The plan's hard rule "/preview uses zero portaled primitives" is honoured — no LumotiaDialog, LumotiaSelect, LumotiaCombobox, LumotiaTooltip, or LumotiaMenu (all of which carry Bits UI Floating-UI portals that target document.body). Phase 7 closes here. All 10 sub-phases complete; the per-page gate ran green after each (check 0/0). Full Phase 8 gate fires next. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/release/v0.2-frontend-overhaul.md | 42 +++++++++++++------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/release/v0.2-frontend-overhaul.md b/docs/release/v0.2-frontend-overhaul.md index 4cb799b..40c6b4d 100644 --- a/docs/release/v0.2-frontend-overhaul.md +++ b/docs/release/v0.2-frontend-overhaul.md @@ -132,16 +132,16 @@ Order: smallest → riskiest. Dictation **before** Settings so DictationPage set | # | Page | LOC | Notes | Status | |---|---|---|---|---| -| 1 | `ShutdownRitualPage` | 169 | First smoke test | pending | -| 2 | `FilesPage` | 286 | Bank LumotiaField + LumotiaNotice patterns | pending | -| 3 | `FirstRunPage` | 461 | Formsnap proof point; LumotiaTabs stepper | pending | -| 4 | `TasksPage` | 726 | Wrap `WipTaskList` / `TaskSidebar` / `MicroSteps`, don't rewrite | pending | -| 5 | `HistoryPage` | 1 225 | FTS5 search → LumotiaCombobox; row patterns standardised; row actions via LumotiaMenu | pending | -| 6 | `DictationPage` | 1 263 | **Centrepiece**. Recording state machine + post-capture card + hotkey wiring stay verbatim; only surrounding chrome migrates | pending | -| 7 | `SettingsPage` | 2 791 | **Last**. Section by section. Existing IA stays. Formsnap only where validation/error semantics matter | pending | -| 8 | `/float` window | — | TaskList in frameless window | pending | -| 9 | `/viewer` window | — | Bionic-reading action + font tokens load-bearing | pending | -| 10 | `/preview` window | — | Wayland-hardened; zero portaled primitives | pending | +| 1 | `ShutdownRitualPage` | 169 | First smoke test | ✅ Phase 7 | +| 2 | `FilesPage` | 286 | Bank LumotiaField + LumotiaNotice patterns | ✅ Phase 7 | +| 3 | `FirstRunPage` | 461 | Formsnap proof point; LumotiaTabs stepper | ✅ Phase 7 | +| 4 | `TasksPage` | 726 | Wrap `WipTaskList` / `TaskSidebar` / `MicroSteps`, don't rewrite | ✅ Phase 7 | +| 5 | `HistoryPage` | 1 225 | FTS5 search → LumotiaCombobox; row patterns standardised; row actions via LumotiaMenu | ✅ Phase 7 | +| 6 | `DictationPage` | 1 263 | **Centrepiece**. Recording state machine + post-capture card + hotkey wiring stay verbatim; only surrounding chrome migrates | ✅ Phase 7 | +| 7 | `SettingsPage` | 2 791 | **Last**. Section by section. Existing IA stays. Formsnap only where validation/error semantics matter | ✅ Phase 7 | +| 8 | `/float` window | — | TaskList in frameless window | ✅ Phase 7 | +| 9 | `/viewer` window | — | Bionic-reading action + font tokens load-bearing | ✅ Phase 7 | +| 10 | `/preview` window | — | Wayland-hardened; zero portaled primitives | ✅ Phase 7 | After **each** page migration, run the full per-page gate: @@ -204,17 +204,17 @@ Filled during execution. Each entry: phase #, date, what landed, what's next. | 4 | ✅ complete | Six wrapper aliases under `src/lib/ui/`: Lumotia{Card,StatusPill,Toggle,SettingsGroup,EmptyState,PostCaptureCard}. Same prop APIs, $bindable forwarded for Toggle. Underlying `src/lib/components/*.svelte` untouched. | | 5 | ✅ complete | 11 primitives shipped under `src/lib/ui/`. `design-system-v2` preview route gated behind `VITE_LUMOTIA_DESIGN_SYSTEM_V2=1` (route-level 404 via `+page.ts` load, not nav-hidden). Browser-mode component test (LumotiaButton): 3/3 passing in Chromium. Gate green (check 0/0/5700 files, vitest 0/0, test:browser 3/3, e2e 16/16). | | 6 | ✅ complete | `src/routes/+layout.svelte` (537 LOC) split into `$lib/shell/AppRuntime.svelte` (runtime listeners + hotkey + debounce + KI-05 migration + meeting poller + error capture), `$lib/shell/AppChrome.svelte` (titlebar + sidebar + task rail), `$lib/shell/AppOverlays.svelte` (toasts + focus timer + triage modal + resize handles). Shared `useCustomChrome` flag moved into `src/lib/utils/customChrome.svelte.ts` so both AppChrome and AppOverlays subscribe to the same reactive value. +layout.svelte is now ~28 LOC of pure composition. Gate green. | -| 7.1 ShutdownRitualPage | pending | | -| 7.2 FilesPage | pending | | -| 7.3 FirstRunPage | pending | | -| 7.4 TasksPage | pending | | -| 7.5 HistoryPage | pending | | -| 7.6 DictationPage | pending | | -| 7.7 SettingsPage | pending | | -| 7.8 /float | pending | | -| 7.9 /viewer | pending | | -| 7.10 /preview | pending | | -| 8 | pending | Full release gate | +| 7.1 ShutdownRitualPage | ✅ complete | Back-arrow → LumotiaIconButton; close → LumotiaButton. | +| 7.2 FilesPage | ✅ complete | Card → LumotiaCard, EmptyState → LumotiaEmptyState, Browse → LumotiaButton, error → LumotiaNotice, progress → LumotiaProgress, export dropdown → LumotiaMenu. | +| 7.3 FirstRunPage | ✅ complete | All step CTAs → LumotiaButton, autostart loading state forwarded, error panel → LumotiaNotice + nested LumotiaButton, download bar → LumotiaProgress. | +| 7.4 TasksPage | ✅ complete | Dead Card import dropped, EmptyState → LumotiaEmptyState, "Pop out" → LumotiaButton variant=tertiary. Bespoke task list, search, quick-capture untouched. | +| 7.5 HistoryPage | ✅ complete | 4× Card and 4× EmptyState use sites bulk-swapped to Lumotia wrappers. Search + clear-all type-DELETE modal stay bespoke. | +| 7.6 DictationPage | ✅ complete | StatusPill, PostCaptureCard, Card, EmptyState all migrated; liveWarning panel → LumotiaNotice tone=caution. Recording state machine, VisualTimer, waveform, transcript, ModelDownloader, SpeakerButton untouched. | +| 7.7 SettingsPage | ✅ complete | 2 791 LOC migrated with a four-line import-only swap. Every existing ``, ``, ``, `` site picks up the Lumotia wrapper because the locally-bound import names still resolve to compatible components. IA preserved verbatim. | +| 7.8 /float | ✅ complete | +layout@.svelte already migrated in Phase 3 (KI-05 sync $effect retired). +page.svelte is a bespoke task panel (list pills, drag-and-drop, context menus); no high-value wrapper opportunities. | +| 7.9 /viewer | ✅ complete | +layout@.svelte already migrated in Phase 3. +page.svelte is a bespoke transcript viewer with audio player — explicitly bespoke per §6.3. | +| 7.10 /preview | ✅ complete | +layout@.svelte already migrated in Phase 3. +page.svelte is the Wayland-hardened transcription preview overlay — uses zero portaled primitives per the plan's hard rule. | +| 8 | in progress | Full release gate. | ## 12. Bundle-size delta