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>
Reframes the By-MDL tab as a "⊞ Catalog" button that opens an overlay over the
target pane (the left filetree stays the drag source). The catalog is the
de-duplicated union of everything the project knows about a tracking number:
its MDL deliverables AND its archive files, merged by tracking number, with an
informational "Archive revs" column (which revisions already exist) and an "MDL"
flag. Nothing is written or altered — the Revision column is classifier-local
and starts blank (never pre-filled from an old archive rev).
- Drag a source file onto a row → assigns the tracking number only (the mdl
axis); set the revision in the bulk-editable Revision column (ctrl-shift
select rows + ctrl-Enter). Per-file Title: MDL/file toggle + ✕ remove kept.
- Columns split the tracking number into the configured pattern fields, each with
its own autofilter (per-column, via the shared seltable). Default pattern is
now the 8-field ORIG-PHASE-PROJECT-AREA-DISC-TYPE-SEQ-SUFFIX.
- Server load merges every party's archive/<party>/mdl/*.yaml with a recursive
walk of the archive documents; local load reads a folder of deliverable yamls.
Test: catalog shows merged archive revisions; drop names a file (tracking only);
bulk revision feeds the derived name.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>