{
  "generated_at": "2026-09-13T03:20:32.397901+00:00",
  "python_version": "3.14.3",
  "platform": "Darwin",
  "corpus": "Entirely self-authored French teaching text; two cues, one known ground truth, five byte representations. No film, customer or translation output.",
  "method": "Python standard library strict UTF-8/cp1252 decoding except deliberate errors=replace in the labeled loss fixture. No autodetection, no model calls, one deterministic pass, no retries or excluded samples.",
  "review": "Exact string, byte and timestamp equality assertions; no language-quality scores or playback reviewer.",
  "limitations": "No GUI, player, fonts, platform BOM compatibility, real-media sync or BookTranslator execution tested. Exact conversion equality is not an accuracy estimate for arbitrary subtitle files.",
  "records": [
    {
      "file": "source-utf8.srt",
      "purpose": "Original self-authored teaching text.",
      "bytes": 132,
      "sha256": "67d72f6b09337c686175f676aaf6a8f633765ed3244261e62e818d21fceb6748",
      "strict_utf8": true,
      "utf8_text_equals_source": true,
      "utf8_persisted_replacement_characters": 0,
      "declared_decode_encoding": "utf-8",
      "declared_decode_equals_source": true,
      "decoded_text": "1\n00:00:01,000 --> 00:00:04,000\nÉmile dit : « Le prix est de 12,50 €. »\n\n2\n00:00:05,000 --> 00:00:08,000\nLe café est fermé.\n\n",
      "timestamps": [
        "00:00:01,000 --> 00:00:04,000",
        "00:00:05,000 --> 00:00:08,000"
      ],
      "timestamps_equal_source": true
    },
    {
      "file": "source-windows1252.srt",
      "purpose": "Same source encoded as Windows-1252.",
      "bytes": 125,
      "sha256": "4ee513b6d611ee7189b46433e1df8f294dfe851ddbc0e3f01130773ca883a1e4",
      "strict_utf8": false,
      "utf8_text_equals_source": null,
      "utf8_persisted_replacement_characters": null,
      "declared_decode_encoding": "cp1252",
      "declared_decode_equals_source": true,
      "decoded_text": "1\n00:00:01,000 --> 00:00:04,000\nÉmile dit : « Le prix est de 12,50 €. »\n\n2\n00:00:05,000 --> 00:00:08,000\nLe café est fermé.\n\n",
      "timestamps": [
        "00:00:01,000 --> 00:00:04,000",
        "00:00:05,000 --> 00:00:08,000"
      ],
      "timestamps_equal_source": true
    },
    {
      "file": "wrong-decoder-resaved-utf8.srt",
      "purpose": "UTF-8 bytes misread as cp1252, then saved as UTF-8.",
      "bytes": 147,
      "sha256": "b25262c124d58da3a8182792eb4cfcfc063f2a9563c16b0bfab9a3934ff21353",
      "strict_utf8": true,
      "utf8_text_equals_source": false,
      "utf8_persisted_replacement_characters": 0,
      "declared_decode_encoding": "utf-8",
      "declared_decode_equals_source": false,
      "decoded_text": "1\n00:00:01,000 --> 00:00:04,000\nÃ‰mile dit : Â« Le prix est de 12,50 â‚¬. Â»\n\n2\n00:00:05,000 --> 00:00:08,000\nLe cafÃ© est fermÃ©.\n\n",
      "timestamps": [
        "00:00:01,000 --> 00:00:04,000",
        "00:00:05,000 --> 00:00:08,000"
      ],
      "timestamps_equal_source": true
    },
    {
      "file": "replacement-resaved-utf8.srt",
      "purpose": "cp1252 bytes misread as UTF-8 with replacement, then saved as UTF-8.",
      "bytes": 137,
      "sha256": "ba0fa5a2e2d382171c4bb38d35d77d24a58fb8641afbdc5ee22578099689ef5c",
      "strict_utf8": true,
      "utf8_text_equals_source": false,
      "utf8_persisted_replacement_characters": 6,
      "declared_decode_encoding": "utf-8",
      "declared_decode_equals_source": false,
      "decoded_text": "1\n00:00:01,000 --> 00:00:04,000\n�mile dit : � Le prix est de 12,50 �. �\n\n2\n00:00:05,000 --> 00:00:08,000\nLe caf� est ferm�.\n\n",
      "timestamps": [
        "00:00:01,000 --> 00:00:04,000",
        "00:00:05,000 --> 00:00:08,000"
      ],
      "timestamps_equal_source": true
    },
    {
      "file": "correctly-converted-utf8.srt",
      "purpose": "Correct explicit cp1252-to-UTF8 conversion.",
      "bytes": 132,
      "sha256": "67d72f6b09337c686175f676aaf6a8f633765ed3244261e62e818d21fceb6748",
      "strict_utf8": true,
      "utf8_text_equals_source": true,
      "utf8_persisted_replacement_characters": 0,
      "declared_decode_encoding": "utf-8",
      "declared_decode_equals_source": true,
      "decoded_text": "1\n00:00:01,000 --> 00:00:04,000\nÉmile dit : « Le prix est de 12,50 €. »\n\n2\n00:00:05,000 --> 00:00:08,000\nLe café est fermé.\n\n",
      "timestamps": [
        "00:00:01,000 --> 00:00:04,000",
        "00:00:05,000 --> 00:00:08,000"
      ],
      "timestamps_equal_source": true
    }
  ],
  "checks": {
    "correct_conversion_equals_original_bytes": true,
    "known_lossless_mojibake_chain_reversed": true,
    "mojibake_utf8_is_valid_but_text_is_wrong": true,
    "loss_fixture_has_six_persisted_replacements": true,
    "all_timestamp_strings_unchanged": true,
    "cp1252_80_is_euro": true,
    "latin1_80_is_control_not_euro": true
  }
}
