ZDDC/classifier/js
ZDDC 420f735e89 feat(classifier): copy-out with duplicate detection + map restore (phase 5)
The Copy button (enabled once >=1 file is fully classified) copies the mapped
files into a user-chosen output directory under their canonical names/layout
<party>/{received,issued}/<transmittal>/<filename> — reading the source, never
writing it.

- copy.js: plan() (complete, non-excluded files) → conflict scan (two sources
  → same output path are reported + skipped) → copyTo() engine on the generic
  FS-Access shape (ensureDir + getFileHandle + createWritable). Per-file dedup:
  identical target (sha256) is skipped; existing-but-different is left
  untouched and reported; live footer progress; completion toast.
- app.js: restores the saved map on launch (keyed by source-relative path, so
  it re-attaches when the same directory is re-opened) and persists the source
  handle on open; Copy button wired.
- target-tree.js: enables/labels the Copy button from the done count.
- 2 copy-engine tests with mock FS handles (copy/skip/differ + conflict);
  24 classify+classifier tests green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 12:37:44 -05:00
..
app.js feat(classifier): copy-out with duplicate detection + map restore (phase 5) 2026-06-09 12:37:44 -05:00
classify.js feat(classifier): left-tree markers, exclude, cross-tree find (phase 4) 2026-06-09 12:32:42 -05:00
copy.js feat(classifier): copy-out with duplicate detection + map restore (phase 5) 2026-06-09 12:37:44 -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): Classify & Copy state model + persistence (phase 1) 2026-06-09 12:11:04 -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 perf+ux(classifier): continuous 16-way scan pool; accurate FS error text 2026-06-09 11:09:14 -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