diff --git a/docs/IMPLEMENTATION-PLAN.md b/docs/IMPLEMENTATION-PLAN.md index d2be505..f1d82f2 100644 --- a/docs/IMPLEMENTATION-PLAN.md +++ b/docs/IMPLEMENTATION-PLAN.md @@ -49,8 +49,8 @@ doc before implementing. | **M1.5** | Visual design foundation ✅ | Apply the design language: tokens, IBM Plex, restyled M1 surfaces, chart theme | [arch 09](architecture/09-visual-design.md) | | **M2** | Editor robustness ✅ | Draft/Published, validation, schema autocomplete, fit modes | §03D–E, §04, §07(editor) | | **M3** | Datasets ✅ | Named reusable data + reference resolution in preview | §05, §03F, §09B | -| **M4** | Chart Builder | No-JSON chart composition from a dataset | §06 | -| **M5** | Settings + Import/Export | Preferences + workspace backup/transfer | §07, §08, §09C | +| **M4** | Chart Builder ✅ | No-JSON chart composition from a dataset | §06 | +| **M5** | Settings + Import/Export ✅ | Preferences + workspace backup/transfer | §07, §08, §09C | | **M6** | Shell polish | Resize/toggle panes, routing, shortcuts, toasts, a11y, offline | §01, §10 | **MVP boundary = end of M1** (a genuinely usable single-user chart authoring loop). @@ -284,7 +284,7 @@ the reference. --- -## M4 · Chart Builder +## M4 · Chart Builder ✅ (done) **Goal:** no-JSON chart composition from a dataset → a new snippet. @@ -326,6 +326,12 @@ and chose the **Tier B "smart + guarded"** design: smart default mark for the da 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. +**Verified:** `typecheck` + `test` green — the pure `chart-builder.ts` assembler +(`chart-builder.test.ts`: mark/channel/type permutations, unmapped-channel omission, +validation gate). The Chart Builder modal is wired through the registry, launched from a +selected dataset (`DatasetsModal` → `openModal('chartBuilder')`). Data-aware +cardinality/extent profiling + chart warnings landed (A3/A4). + --- ## M4.5 · Snippet-library consolidation ✅ (done) @@ -368,7 +374,7 @@ entries). --- -## M5 · Settings + Import/Export +## M5 · Settings + Import/Export ✅ (done) **Goal:** preferences and whole-workspace backup/transfer. @@ -409,6 +415,12 @@ entries). - Change theme/debounce/date-format → takes effect; Cancel reverts; Reset confirms. - Export → reimport into a populated workspace merges without overwrite; renames reported. +**Verified:** `typecheck` + `test` green — `import-normalize` (accepted shapes + merge/ +collision/rename), `export-envelope` (round-trip), `settings` (load-with-fallback), +`UserSettingsStore`, `ux-prefs`. Distributed per-pane settings shipped as `SettingsPopover` +disclosures (editor toolbar, preview, library) applying live; header Import/Export wired +through `services/transfer.ts` (→ `normalizeImport` / envelope build), no modal. + --- ## M6 · Shell polish & non-functional