Update plan: mark M6 library/monitor/preview/import/modals delivered

This commit is contained in:
2026-06-07 20:05:29 +03:00
parent 123f1498b4
commit 50d3079b24
+34 -23
View File
@@ -354,8 +354,8 @@ load / Draft↔Published switch incurred a 300 ms blank instead of the spec's **
render. `LivePreview` now renders immediately on `bufferEpoch`/`editorView` change and render. `LivePreview` now renders immediately on `bufferEpoch`/`editorView` change and
debounces only keystroke (`shownText`-only) changes. debounces only keystroke (`shownText`-only) changes.
**Still deferred to M5/M6 (per §02):** Search, Sort controls + persistence, two distinct **Deferred at the time to M5/M6 (per §02):** Search, Sort controls + persistence, two
empty-state messages, Storage Monitor. distinct empty-state messages, Storage Monitor — all now delivered in M6.
**Verified:** `typecheck` + `test` (287 passing — `snippet` duplicate factory, **Verified:** `typecheck` + `test` (287 passing — `snippet` duplicate factory,
`SnippetStore` rename/comment/duplicate, a `SnippetLibrary` render test guarding the `SnippetStore` rename/comment/duplicate, a `SnippetLibrary` render test guarding the
@@ -411,30 +411,41 @@ entries).
**Goal:** the workspace feels finished and meets §10. **Goal:** the workspace feels finished and meets §10.
- **Panes:** ~~drag-resize handles with min widths; widths persist~~**pulled - **Panes:** ~~drag-resize handles with min widths; widths persist~~(pulled
forward after M2** (coupled to the preview's container sizing — see forward after M2). ~~Per-pane show/hide **toggle strip** + visibility persist +
[arch 05 §8](architecture/05-rendering-theming-preview.md)). Side panes carry proportional redistribution on hide (§01A, §09D)~~ ✅.
remembered widths, the editor flexes between them, widths persist to - **Routing:** ~~URL hash view-state (`#snippet-<id>`, `#datasets/...`) with Back/Forward;
`astrolabe:ux-prefs`. **Remaining:** per-pane show/hide **toggle strip** + restore on load (§01E)~~ ✅.
visibility persist + proportional redistribution on hide (§01A, §09D). - **Shortcuts:** ~~Cmd/Ctrl+Shift+N / +K / +S / +, / Esc via a single key router
- **Routing:** URL hash view-state (`#snippet-<id>`, `#datasets/...`) with Back/Forward; (§01D)~~ ✅.
restore on load (§01E). _(see [Architecture 04 · Routing & Events](architecture/04-routing-and-events.md))_ - **Toasts:** ~~success/error/warning/info, stacking, auto-dismiss, reduced-motion;
- **Shortcuts:** Cmd/Ctrl+Shift+N / +K / +S / +, / Esc via a single key router appear/disappear with a brief fade (§01F)~~ ✅ (fade-out two-phase dismiss landed last).
(§01D). _(see [Architecture 04 · Routing & Events](architecture/04-routing-and-events.md))_ - **Library search / sort / empty states** (§02, §09D): ~~live search across
- **Toasts:** success/error/warning/info, stacking, auto-dismiss, reduced-motion (§01F). name/comment/draft spec; Sort by Modified/Created/Name/Size with a disclosure +
- **Storage monitor** for the snippet tier (§02). flip-on-reselect, persisted to `astrolabe:ux-prefs`; the two distinct empty states~~ ✅
- **A11y:** modal focus trap + return, labelled icon buttons, contrast in both themes (§10). (council-guided — see [arch 10](architecture/10-interaction-and-feedback.md)).
- **Storage monitor** for the snippet tier ~~(§02)~~ ✅ (`role="meter"` fill bar,
escalating ok/warning/critical at 0.8/0.95).
- **Live-preview busy indicator** (§04, §10): ~~non-blocking overlay + `aria-busy` for
renders past ~1s~~ ✅.
- **Import atomicity** (§08): ~~roll back on storage-quota failure so no partial import is
committed; actionable error~~ ✅ (effective at the service boundary; true cross-record
IDB-transaction atomicity would require exposing a raw transaction from `db.ts` — see
[arch 02](architecture/02-persistence.md)).
- **A11y:** modal focus trap + return, labelled icon buttons, contrast in both themes (§10) — ✅ in place.
- **About & Privacy** and **Donate** modals ~~(§01)~~ ✅ (Donate URL is a placeholder
`DONATE_URL` pending the real link).
- **Offline/installable:** verify the SW + manifest give a working offline + installed app. - **Offline/installable:** verify the SW + manifest give a working offline + installed app.
- **About & Privacy** and **Donate** modals. **⏳ Remaining** — needs manual verification in a running/installed app.
- **Council** — seat **web.dev** for the PWA/offline/storage surfaces that none of the - **Council** — seat **web.dev** for the PWA/offline/storage surfaces none of the seated
seated members cover: the service-worker **update-available** prompt members cover: the service-worker **update-available** prompt (`registerType: 'prompt'`),
(`registerType: 'prompt'`), storage **persistence** (`navigator.storage.persist()`), and storage **persistence** (`navigator.storage.persist()`), and the quota **estimate**
the quota **estimate** (`StorageManager.estimate()`) behind the storage monitor (§02). (`StorageManager.estimate()`). **⏳ Remaining** (storage monitor is its consumer; seating
(The storage-monitor work above is its most concrete consumer; seating triggers a one-off triggers a one-off backfill — see [`/council`](../.claude/skills/council/SKILL.md)).
backfill — see [`/council`](../.claude/skills/council/SKILL.md).)
**Manual checks:** keyboard-only run-through; reload restores view from URL; **Manual checks:** keyboard-only run-through; reload restores view from URL;
offline reload works; install as standalone; reduced-motion honored. offline reload works; install as standalone; reduced-motion honored. **⏳ Still owed**
(plus visual verification of the new library/monitor/modals/busy-indicator surfaces).
--- ---