ZDDC/classifier/js
ZDDC ce6efb0201 feat(classifier): CSV path round-trip — export filtered paths, import old→new mapping
Add an AI-friendly classification round-trip alongside the By-tracking grid:

- "⬇ Export paths" (filetree header): downloads the filtered file list as a
  1-column CSV of full (root-relative) paths — the same keys the importer
  matches on. Hand it to an LLM to classify into
  <party>/<direction>/<transmittal>/<file>.ext.
- "Import paths…" (above the target list): loads a 2-column CSV (old path,
  new path). Each new path drives both axes — the trailing filename sets the
  tracking number (rename, via parseFilename → tracking tree) and the leading
  <party>/<direction>/<transmittal> segments route a transmittal (via
  parseFolder → transmittal tree). MERGE semantics: only files named in the
  CSV are touched; others keep their classification.
- Per-row problems (unknown old path, unparseable filename/transmittal, bad
  direction) are collected and offered as a downloadable errors CSV, with a
  summary toast — scales to thousands of rows. Either axis can apply
  independently, so a filename-only new path is a rename with no error.

This replaces the JSON "Export for editing" / "Import edits" pair (the CSV
path form is fully expressive for this model and simpler to round-trip); the
TSV "Export list" clipboard→Excel button is kept. Buttons can grow into a
modal later if more options are needed.

Includes a Playwright test driving the real file-input import (rename+route,
filename-only, merge-preserves-unlisted, CSV-quoted comma in title, error row).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 16:38:15 -05:00
..
app.js feat(classifier): CSV path round-trip — export filtered paths, import old→new mapping 2026-06-17 16:38:15 -05:00
classify.js feat(classifier): one classify surface — By-tracking grid with Rename, transmittal with Copy 2026-06-16 09:53:04 -05:00
copy.js fix(browse,classifier): backdrop dismiss no longer fires on a drag out of an input 2026-06-15 10:36:07 -05:00
dir-picker.js fix(browse,classifier): backdrop dismiss no longer fires on a drag out of an input 2026-06-15 10:36:07 -05:00
dnd.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
excel.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
filter.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
persist.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
preview.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
rename.js feat(classifier): one classify surface — By-tracking grid with Rename, transmittal with Copy 2026-06-16 09:53:04 -05:00
resize.js feat(classifier): By Tracking Number is now a flat editable grid (one row per file) 2026-06-15 16:51:39 -05:00
scanner.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
selection.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
sort.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
spreadsheet.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
store.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
target-tree.js feat(classifier): multi-select source files + drag to fill a contiguous block of rows 2026-06-16 09:57:57 -05:00
tree.js feat(classifier): CSV path round-trip — export filtered paths, import old→new mapping 2026-06-17 16:38:15 -05:00
utils.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
validator.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00
workspace.js ZDDC: document-control tools + zddc-server 2026-06-11 13:32:31 -05:00