{
  "date": "2026-10-24",
  "method": "Generated UTF-8 and byte samples; SHA-256 and direct byte comparison; ZIP round trip; deliberate missing and changed sample.",
  "scope": "12 generated regular files only. No personal files, permissions, timestamps, symlinks, cloud history or disaster recovery were tested.",
  "python": "3.9.6",
  "files": {
    "archive/notes-copy.txt": {
      "bytes": 5,
      "sha256": "a6328afc76e9db71da297ebff4b0d3e7a7eb3b01d917c05a6573fef121b6ecb6"
    },
    "case/same-size-a.txt": {
      "bytes": 9,
      "sha256": "5152d0cab87f906ca6de828f3dd50e3e14a92d5627bc10aad0d81783053b50a7"
    },
    "case/same-size-b.txt": {
      "bytes": 9,
      "sha256": "85cc1d239b05ed3037daa33cfc0aaa24970eb0c3471dab36256545f52bd2dea3"
    },
    "line/crlf.txt": {
      "bytes": 11,
      "sha256": "e13c3385d232d125157b872e5e9a08af8014218f072aaadccdf079f599375c74"
    },
    "line/lf.txt": {
      "bytes": 10,
      "sha256": "4df58fc6c3aa99f698353b2cb26524658c6ee14fc424ab11bb520e70c01a0a0d"
    },
    "reports/january.txt": {
      "bytes": 23,
      "sha256": "47c030530fa40841f9e743502f31f5d4260740802ee4d8494fa3aad2af8a63d8"
    },
    "reports/notes.txt": {
      "bytes": 5,
      "sha256": "a6328afc76e9db71da297ebff4b0d3e7a7eb3b01d917c05a6573fef121b6ecb6"
    },
    "reports-copy/january.txt": {
      "bytes": 23,
      "sha256": "47c030530fa40841f9e743502f31f5d4260740802ee4d8494fa3aad2af8a63d8"
    },
    "reports-final/january.txt": {
      "bytes": 23,
      "sha256": "1cf9132f41c0f82c697c07d0603e7e874e4dd48e94f1f434e983446271bd2152"
    },
    "unicode/nfc.txt": {
      "bytes": 11,
      "sha256": "14693cd495cb2237589774c9c4b70795d38bd8837856e47128f72d947d25bba0"
    },
    "unicode/nfd.txt": {
      "bytes": 20,
      "sha256": "0ecb03c708050df3503a8ac6277567bfebacc309a55ad5a6b56b9225fae80cf4"
    },
    "zero/empty.txt": {
      "bytes": 0,
      "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    }
  },
  "file_count": 12,
  "distinct_byte_contents": 10,
  "duplicate_byte_groups": [
    [
      "archive/notes-copy.txt",
      "reports/notes.txt"
    ],
    [
      "reports-copy/january.txt",
      "reports/january.txt"
    ]
  ],
  "comparisons": [
    {
      "case": "same_name_same_bytes",
      "left": "reports/january.txt",
      "right": "reports-copy/january.txt",
      "same_basename": true,
      "left_bytes": 23,
      "right_bytes": 23,
      "same_sha256": true,
      "bytes_equal": true
    },
    {
      "case": "same_name_different_bytes",
      "left": "reports/january.txt",
      "right": "reports-final/january.txt",
      "same_basename": true,
      "left_bytes": 23,
      "right_bytes": 23,
      "same_sha256": false,
      "bytes_equal": false
    },
    {
      "case": "different_name_same_bytes",
      "left": "reports/notes.txt",
      "right": "archive/notes-copy.txt",
      "same_basename": false,
      "left_bytes": 5,
      "right_bytes": 5,
      "same_sha256": true,
      "bytes_equal": true
    },
    {
      "case": "same_size_different_bytes",
      "left": "case/same-size-a.txt",
      "right": "case/same-size-b.txt",
      "same_basename": false,
      "left_bytes": 9,
      "right_bytes": 9,
      "same_sha256": false,
      "bytes_equal": false
    },
    {
      "case": "line_endings",
      "left": "line/lf.txt",
      "right": "line/crlf.txt",
      "same_basename": false,
      "left_bytes": 10,
      "right_bytes": 11,
      "same_sha256": false,
      "bytes_equal": false
    },
    {
      "case": "unicode_normalization",
      "left": "unicode/nfc.txt",
      "right": "unicode/nfd.txt",
      "same_basename": false,
      "left_bytes": 11,
      "right_bytes": 20,
      "same_sha256": false,
      "bytes_equal": false
    }
  ],
  "zip_restore": {
    "missing": [],
    "unexpected": [],
    "content_mismatch": [],
    "matching": 12,
    "direct_byte_matches": 12
  },
  "deliberately_damaged_restore": {
    "missing": [
      "zero/empty.txt"
    ],
    "unexpected": [],
    "content_mismatch": [
      "reports-final/january.txt"
    ],
    "matching": 10
  }
}
