Same tracking number + revision ⇒ same document, so the bytes must match: - Pre-flight (and a new "Check" button) groups fully-classified files by their canonical name and SHA-256s any collisions. Identical bytes collapse to ONE copy (deduped); DIFFERENT bytes are a conflict — flagged ≠ in red in the By-tracking table (with a tooltip) and held back from the copy so the user fixes them first. Flags clear when a placement changes. - Every file copied this run is VERIFIED: read the written target back, compare SHA-256 to the source. One re-copy attempt on mismatch; if it still fails, the bad target is removed so a re-run re-copies it — resume converges on a fully-correct archive (skip-if-exists stays the fast path for good files). classify gains transient hash-conflict flags (setHashConflicts/hasHashConflict), copy gains sourceSha (cached), writeTarget, verifyOne, removeTarget, resolvePlan and audit(); copyTo runs the verify pass and reports verifyFailed. Tests: identical pair dedups + differing pair conflicts/flags; a corrupting write fails verification and is removed (54 green). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| app.js | ||
| classify.js | ||
| copy.js | ||
| dnd.js | ||
| excel.js | ||
| filter.js | ||
| persist.js | ||
| preview.js | ||
| resize.js | ||
| scanner.js | ||
| selection.js | ||
| sort.js | ||
| spreadsheet.js | ||
| store.js | ||
| target-tree.js | ||
| tree.js | ||
| utils.js | ||
| validator.js | ||
| workspace.js | ||