{"version":"2.1.248","anchor":"snapshot-staging-verifies-each-copied-file-by-hash-and-nanos","canonical_anchor":"snapshot-staging-verifies-each-copied-file-by-hash-and-nanos","heading":"Snapshot staging verifies each copied file by hash and nanosecond timestamps","tier":"internal","area":"Checkpoints","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.248\/e\/snapshot-staging-verifies-each-copied-file-by-hash-and-nanos","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.248","markdown":"### Snapshot staging verifies each copied file by hash and nanosecond timestamps\n\nSnapshot copies are hash- and timestamp-checked so a half-written file is not recorded as good.\n\n**What**\n\nFiles copied into a snapshot are now checked to make sure they did not change during the copy: contents are hashed with sha256 while being read, and file size and nanosecond mtime\/ctime are compared before and after. A mismatch marks the file as changed rather than recording a torn copy.\n\n**Details**\n\n- The recorded identity of a copy moved from millisecond ctime to nanosecond ctime plus an identity value.\n- Refusals carry a momentary flag separating transient causes (unreadable parent directory, unclassified system error) from permanent ones.\n- The old \"changed while being read\" refusal is gone; such a file is now returned as changed instead.\n- Case-insensitive or Unicode-normalization collisions between two changed paths are refused with their own message.\n- Optional before-open and after-read hooks were added to the staging options.\n\n**Evidence**\n\n`collides with another changed path that differs only in case or normalization`\n\n- Area: Checkpoints\n- Tier: Under the hood\n- Useful: 2\/5\n- Signal: 1\/5"}