ZDDC/classifier/js
ZDDC 1d09abdc8b feat(classifier): workspaces — scan-once, resume from snapshot (phase 6)
The classifier re-scanned the source on every session; on cloud-backed mounts
(OneDrive/Samba) that's minutes of per-op latency. Workspaces fix it: scan a
folder ONCE, snapshot the completed tree, and resume instantly — all
classification runs on the data model; the filesystem is only touched at copy.

- persist.js v2: multi-workspace IndexedDB (tiny 'index' store for the welcome
  list + 'data' store holding the source handle, tree snapshot, and map). DB v2.
- scanner.js: snapshotTree()/loadSnapshot() (compact, handle-less, marked done,
  totals recomputed) + lazy resolveFileHandle/resolveDirHandle from the root.
- workspace.js: welcome manager (new/open/rename/delete), debounced autosave of
  the active workspace, 'Refresh from disk' (re-scan → re-snapshot, path-keyed
  map carries over). New workspace = the one slow full scan; reopen = instant.
- copy.js: resolves snapshot files' handles from the workspace root with a
  one-click read permission re-grant; missing-on-disk files surface as errors.
- app.js: enterAppShell() shared by rename/workspace flows; exposes setMode;
  classify.js decoupled from persistence.
- template/css: welcome workspace list + header 'Workspaces' button.
- tests: snapshot round-trip, persist CRUD + classify-only-preserves-tree,
  copy-from-snapshot via mock root handle (28 classify/classifier tests green).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 15:07:40 -05:00
..
app.js feat(classifier): workspaces — scan-once, resume from snapshot (phase 6) 2026-06-09 15:07:40 -05:00
classify.js feat(classifier): workspaces — scan-once, resume from snapshot (phase 6) 2026-06-09 15:07:40 -05:00
copy.js feat(classifier): workspaces — scan-once, resume from snapshot (phase 6) 2026-06-09 15:07:40 -05:00
dnd.js feat(classifier): drag-and-drop assignment (phase 3) 2026-06-09 12:23:38 -05:00
excel.js feat(shared): non-blocking toast helper available to every tool 2026-05-09 19:04:41 -05:00
filter.js Initial commit 2026-04-27 11:05:47 -05:00
persist.js feat(classifier): workspaces — scan-once, resume from snapshot (phase 6) 2026-06-09 15:07:40 -05:00
preview.js feat(shared): bake xlsx + utif + jszip + docx-preview into every tool 2026-05-10 15:09:38 -05:00
resize.js Initial commit 2026-04-27 11:05:47 -05:00
scanner.js feat(classifier): workspaces — scan-once, resume from snapshot (phase 6) 2026-06-09 15:07:40 -05:00
selection.js Initial commit 2026-04-27 11:05:47 -05:00
sort.js Initial commit 2026-04-27 11:05:47 -05:00
spreadsheet.js fix(classifier): drop vestigial Save-All delays that masked a fixed await bug 2026-05-21 17:07:28 -05:00
store.js Initial commit 2026-04-27 11:05:47 -05:00
target-tree.js feat(classifier): copy-out with duplicate detection + map restore (phase 5) 2026-06-09 12:37:44 -05:00
tree.js feat(classifier): left-tree markers, exclude, cross-tree find (phase 4) 2026-06-09 12:32:42 -05:00
utils.js Initial commit 2026-04-27 11:05:47 -05:00
validator.js Initial commit 2026-04-27 11:05:47 -05:00
workspace.js feat(classifier): workspaces — scan-once, resume from snapshot (phase 6) 2026-06-09 15:07:40 -05:00