mirror of
https://github.com/olehomelchenko/astrolabe.git
synced 2026-08-08 02:02:33 +00:00
Update plan: mark M6 library/monitor/preview/import/modals delivered
This commit is contained in:
+34
-23
@@ -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
|
||||
debounces only keystroke (`shownText`-only) changes.
|
||||
|
||||
**Still deferred to M5/M6 (per §02):** Search, Sort controls + persistence, two distinct
|
||||
empty-state messages, Storage Monitor.
|
||||
**Deferred at the time to M5/M6 (per §02):** Search, Sort controls + persistence, two
|
||||
distinct empty-state messages, Storage Monitor — all now delivered in M6.
|
||||
|
||||
**Verified:** `typecheck` + `test` (287 passing — `snippet` duplicate factory,
|
||||
`SnippetStore` rename/comment/duplicate, a `SnippetLibrary` render test guarding the
|
||||
@@ -411,30 +411,41 @@ entries).
|
||||
|
||||
**Goal:** the workspace feels finished and meets §10.
|
||||
|
||||
- **Panes:** ~~drag-resize handles with min widths; widths persist~~ ✅ **pulled
|
||||
forward after M2** (coupled to the preview's container sizing — see
|
||||
[arch 05 §8](architecture/05-rendering-theming-preview.md)). Side panes carry
|
||||
remembered widths, the editor flexes between them, widths persist to
|
||||
`astrolabe:ux-prefs`. **Remaining:** per-pane show/hide **toggle strip** +
|
||||
visibility persist + proportional redistribution on hide (§01A, §09D).
|
||||
- **Routing:** URL hash view-state (`#snippet-<id>`, `#datasets/...`) with Back/Forward;
|
||||
restore on load (§01E). _(see [Architecture 04 · Routing & Events](architecture/04-routing-and-events.md))_
|
||||
- **Shortcuts:** Cmd/Ctrl+Shift+N / +K / +S / +, / Esc via a single key router
|
||||
(§01D). _(see [Architecture 04 · Routing & Events](architecture/04-routing-and-events.md))_
|
||||
- **Toasts:** success/error/warning/info, stacking, auto-dismiss, reduced-motion (§01F).
|
||||
- **Storage monitor** for the snippet tier (§02).
|
||||
- **A11y:** modal focus trap + return, labelled icon buttons, contrast in both themes (§10).
|
||||
- **Panes:** ~~drag-resize handles with min widths; widths persist~~ ✅ (pulled
|
||||
forward after M2). ~~Per-pane show/hide **toggle strip** + visibility persist +
|
||||
proportional redistribution on hide (§01A, §09D)~~ ✅.
|
||||
- **Routing:** ~~URL hash view-state (`#snippet-<id>`, `#datasets/...`) with Back/Forward;
|
||||
restore on load (§01E)~~ ✅.
|
||||
- **Shortcuts:** ~~Cmd/Ctrl+Shift+N / +K / +S / +, / Esc via a single key router
|
||||
(§01D)~~ ✅.
|
||||
- **Toasts:** ~~success/error/warning/info, stacking, auto-dismiss, reduced-motion;
|
||||
appear/disappear with a brief fade (§01F)~~ ✅ (fade-out two-phase dismiss landed last).
|
||||
- **Library search / sort / empty states** (§02, §09D): ~~live search across
|
||||
name/comment/draft spec; Sort by Modified/Created/Name/Size with a disclosure +
|
||||
flip-on-reselect, persisted to `astrolabe:ux-prefs`; the two distinct empty states~~ ✅
|
||||
(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.
|
||||
- **About & Privacy** and **Donate** modals.
|
||||
- **Council** — seat **web.dev** for the PWA/offline/storage surfaces that none of the
|
||||
seated members cover: the service-worker **update-available** prompt
|
||||
(`registerType: 'prompt'`), storage **persistence** (`navigator.storage.persist()`), and
|
||||
the quota **estimate** (`StorageManager.estimate()`) behind the storage monitor (§02).
|
||||
(The storage-monitor work above is its most concrete consumer; seating triggers a one-off
|
||||
backfill — see [`/council`](../.claude/skills/council/SKILL.md).)
|
||||
**⏳ Remaining** — needs manual verification in a running/installed app.
|
||||
- **Council** — seat **web.dev** for the PWA/offline/storage surfaces none of the seated
|
||||
members cover: the service-worker **update-available** prompt (`registerType: 'prompt'`),
|
||||
storage **persistence** (`navigator.storage.persist()`), and the quota **estimate**
|
||||
(`StorageManager.estimate()`). **⏳ Remaining** (storage monitor is its consumer; seating
|
||||
triggers a one-off backfill — see [`/council`](../.claude/skills/council/SKILL.md)).
|
||||
|
||||
**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).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user