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>