Docs: move point-in-time records to exploration/, trim build-narration, lift open items to plan

This commit is contained in:
2026-06-14 23:58:06 +03:00
parent de9dbf3ec8
commit 66c123e15e
16 changed files with 77 additions and 68 deletions
+30 -8
View File
@@ -65,7 +65,7 @@ Vite + React + Zustand + TypeScript + Vitest (happy-dom) + vite-plugin-pwa.
`src/core``src/app` split, `useAppStore`, design tokens, three-pane placeholder
shell, first core module (`format-detection`) with tests.
**Verified:** `npm run typecheck`, `npm test` (14 passing), `npm run build` (PWA SW generated).
**Verified:** `npm run typecheck`, `npm test`, `npm run build` (PWA SW generated).
---
@@ -167,7 +167,7 @@ and the companion `visual-specimen.html`.
- Keyboard focus ring visible; text/UI contrast passes AA in light and dark.
- No placeholder styling remains on the M1 surfaces.
**Verified:** `typecheck` + `test` (61 passing, incl. `vega-themes.test.ts`) +
**Verified:** `typecheck` + `test` (incl. `vega-themes.test.ts`) +
`build` (Plex woff2, all script subsets, bundled & precached via the PWA
`globPatterns`). Both themes screenshotted via the real
app (chrome + Monaco + chart all repaint on theme flip); focus ring visible.
@@ -216,7 +216,7 @@ assistance, and the fit-mode rendering contract.
- Invalid spec shows inline error; autocomplete suggests Vega-Lite properties.
- Each fit mode resizes the chart as specified; choice survives reload.
**Verified:** `typecheck` + `test` (83 passing — `rendering` fit-mode incl.
**Verified:** `typecheck` + `test` (`rendering` fit-mode incl.
nested layer/concat/facet specs, `SnippetStore` draft/publish/revert/editorView,
`settings-store` `previewFitMode` round-trip) + `build` (PWA, 41 precache
entries) + `eslint` clean. Implementation notes: editing now writes the
@@ -290,9 +290,9 @@ the reference.
**Goal:** no-JSON chart composition from a dataset → a new snippet.
> **Enhancement push (post-M4).** The forward plan now lives in
> [`docs/chart-builder-enhancement-scope.md`](chart-builder-enhancement-scope.md) — it merges
> the Tier-B backlog ([`chart-builder-research.md`](chart-builder-research.md) §8) with the
> Lyra interaction review ([`lyra-review.md`](lyra-review.md)) and sets a **Tier-C** target.
> [`docs/exploration/chart-builder-enhancement-scope.md`](exploration/chart-builder-enhancement-scope.md) — it merges
> the Tier-B backlog ([`chart-builder-research.md`](exploration/chart-builder-research.md) §8) with the
> Lyra interaction review ([`lyra-review.md`](exploration/lyra-review.md)) and sets a **Tier-C** target.
> Shipped beyond the Tier-B floor so far: per-channel aggregate/bin/`timeUnit`, sort/stack;
> **actionable hints** (one-click warning fixes); and a builder UX/perf batch (near-fullscreen
> modal, canvas preview + canvas max-dimension guard, data-aware default pre-population). See
@@ -326,7 +326,7 @@ canon): this is where Astrolabe stops being a pass-through JSON editor and start
chart-shaped suggestions/defaults, so "_which chart, and why_" becomes a decision the app
owns — the one thing Carbon's data-viz styling doesn't cover. Rather than a styling-only
seating, we ran a full **research-first** pass (FT + Datawrapper + the formal engines
**Draco** and **Voyager**), recorded in [`docs/chart-builder-research.md`](chart-builder-research.md),
**Draco** and **Voyager**), recorded in [`docs/exploration/chart-builder-research.md`](exploration/chart-builder-research.md),
and chose the **Tier B "smart + guarded"** design: smart default mark for the data shape,
valid-type-locked field-type menus, Size-channel discipline, and non-blocking guidance.
The convergent rules and citations live in that doc; the spec (§06) was amended to match.
@@ -372,7 +372,7 @@ debounces only keystroke (`shownText`-only) changes.
**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,
**Verified:** `typecheck` + `test` (`snippet` duplicate factory,
`SnippetStore` rename/comment/duplicate, a `SnippetLibrary` render test guarding the
auto-save effect against a render loop) + `eslint` clean + `build` (PWA, 41 precache
entries).
@@ -507,6 +507,28 @@ not a silent drift:
---
## Open items (carried from the exploration memos)
Deferred features whose reasoning lives in `docs/exploration/`; pulled here so the backlog
is in the maintained plan, not the archive.
**Chart theming** (`exploration/chart-theming-scope.md`):
- **User font upload** — FontFace-from-IndexedDB tier; theme `fonts: { family, source: 'file' }`.
- **Google Fonts opt-in CDN tier** — keyless catalog, opt-in only.
- **SVG export font embedding** — embed face data so exported SVGs render off-app.
- **Theme↔font pairing metadata** — a suggestion nicety.
- **Built-in expressive theme preset gallery** — e.g. "Editorial", "Terminal", "Sketch".
**Chart Builder** (`exploration/chart-builder-enhancement-scope.md`):
- **Transform-aware data inspector** — show resolved post-transform rows
(`exploration/data-inspector-exploration.md`).
- **Field-chip drag-and-drop** — click/keyboard-first shipped; drag deferred.
- **Calculated-field autocomplete popup** — Monaco-style completion for expressions.
---
## Architecture reference
The **how** behind each milestone is documented self-containedly in