Commit graph

1 commit

Author SHA1 Message Date
93ed0d361f feat(classifier): "By existing" tab + multi-select directory picker
Reshape the catalog from a button+overlay into a proper tab and let the user
choose which directories feed it.

- Tabs: the Catalog button becomes a third tab "By existing", grouped with "By
  tracking number" (both assign a tracking number) and visually separated from
  "By transmittal" (which assigns the path). A brief goal line above the tabs
  states the workflow. The overlay #mdlPanel becomes a normal in-flow tab panel.
- Load: instead of auto-scanning a whole project, "Load…" opens a lazy,
  multi-select (checkbox) directory tree (new classifier/js/dir-picker.js).
  Ticking a directory includes its whole subtree; confirm resolves the topmost
  ticked handles. Scope follows where the classifier is served: /_apps/… → all
  accessible projects, under <project>/… → that one project, file:// → a picked
  folder. The picker is handle-agnostic (HttpDirectoryHandle or native FS).
- Rows: every ticked directory is walked recursively into the union of existing
  files (zddc.parseFilename) and MDL deliverables (mdl/*.yaml → inMdl + title),
  deduped to one row per tracking number. The "Archive revs" (all) column
  becomes a single informational "Latest rev" computed via zddc.compareRevisions.
  Drop still assigns the tracking number only; the Revision cell stays blank.
- classify.js is unchanged — the mdl axis model and row shape are reused as-is
  (Latest rev derives from the preserved archiveRevisions).
- Tests: the catalog test now asserts latest-rev; new unit tests cover
  walkDirInto union/dedupe-to-latest, _latestRevOf draft/modifier ordering,
  _detectScope routing, and the dir-picker topmost-ticked resolution. 61 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 19:39:55 -05:00