{
  "artifact": "BookTranslator authored post-OCR-cleanup demonstration v1",
  "corpus": "12 synthetic strings with author-defined reference structure; not OCR output",
  "testedOn": "2026-10-03",
  "runtime": "v25.2.1",
  "reviewer": "Authoring agent; independent publication review is separate",
  "externalToolsCompared": [],
  "retries": 0,
  "exclusions": "No real scans, OCR recognition, translation, paid tools, or product uploads tested",
  "summary": {
    "cases": 12,
    "naiveMatches": 4,
    "approvedMatches": 12,
    "roundTrips": 12,
    "staleInputRefusals": 12,
    "ambiguousMatchRefusal": true,
    "missingMatchRefusal": true
  },
  "results": [
    {
      "id": "prose-wrap",
      "input": "The archive stores\r\neighteen notebooks.",
      "expected": "The archive stores eighteen notebooks.",
      "patches": [
        {
          "from": "stores\r\neighteen",
          "to": "stores eighteen",
          "reason": "Known authored paragraph; ordinary interword wrap."
        }
      ],
      "inputSha256": "e48d3906b7f2842bb908155cb4e0e04a4e4dd48f3794cf25f03125e1f77c2d6c",
      "approvedOutput": "The archive stores eighteen notebooks.",
      "naiveOutput": "The archive stores eighteen notebooks.",
      "naiveMatchesReference": true,
      "audit": [
        {
          "from": "stores\r\neighteen",
          "to": "stores eighteen",
          "reason": "Known authored paragraph; ordinary interword wrap.",
          "offsetUtf16": 12
        }
      ]
    },
    {
      "id": "intraword",
      "input": "Review the trans-\nlation first.",
      "expected": "Review the translation first.",
      "patches": [
        {
          "from": "trans-\nlation",
          "to": "translation",
          "reason": "Authored reference word is translation; inserted line-end hyphen."
        }
      ],
      "inputSha256": "ba09956aa4805310ed59b1b055c87128b34452721f9f5ec7f777a8357ec78989",
      "approvedOutput": "Review the translation first.",
      "naiveOutput": "Review the translation first.",
      "naiveMatchesReference": true,
      "audit": [
        {
          "from": "trans-\nlation",
          "to": "translation",
          "reason": "Authored reference word is translation; inserted line-end hyphen.",
          "offsetUtf16": 11
        }
      ]
    },
    {
      "id": "compound",
      "input": "A well-\nknown method.",
      "expected": "A well-known method.",
      "patches": [
        {
          "from": "well-\nknown",
          "to": "well-known",
          "reason": "Authored reference retains the compound hyphen."
        }
      ],
      "inputSha256": "e515d69621e8e7c877838b3b1bda3f897eb5d8536a2088ac275c7c862abd2c83",
      "approvedOutput": "A well-known method.",
      "naiveOutput": "A wellknown method.",
      "naiveMatchesReference": false,
      "audit": [
        {
          "from": "well-\nknown",
          "to": "well-known",
          "reason": "Authored reference retains the compound hyphen.",
          "offsetUtf16": 2
        }
      ]
    },
    {
      "id": "german",
      "input": "Die Auf-\ngabe ist klar.",
      "expected": "Die Aufgabe ist klar.",
      "patches": [
        {
          "from": "Auf-\ngabe",
          "to": "Aufgabe",
          "reason": "Authored reference plus Duden Auf|ga|be; no modernization."
        }
      ],
      "inputSha256": "d25b5276021841dcdeab9b9c1ec48e778465cf87b6a68577a8b7c60743575a11",
      "approvedOutput": "Die Aufgabe ist klar.",
      "naiveOutput": "Die Aufgabe ist klar.",
      "naiveMatchesReference": true,
      "audit": [
        {
          "from": "Auf-\ngabe",
          "to": "Aufgabe",
          "reason": "Authored reference plus Duden Auf|ga|be; no modernization.",
          "offsetUtf16": 4
        }
      ]
    },
    {
      "id": "soft-hyphen",
      "input": "Review the trans­lation first.",
      "expected": "Review the translation first.",
      "patches": [
        {
          "from": "trans­lation",
          "to": "translation",
          "reason": "Known U+00AD discretionary marker in this authored reading copy."
        }
      ],
      "inputSha256": "754d48c9b6bcf3d483dca3afa157b45ab179bcb4f750680f96cc4908e77d7e18",
      "approvedOutput": "Review the translation first.",
      "naiveOutput": "Review the translation first.",
      "naiveMatchesReference": true,
      "audit": [
        {
          "from": "trans­lation",
          "to": "translation",
          "reason": "Known U+00AD discretionary marker in this authored reading copy.",
          "offsetUtf16": 11
        }
      ]
    },
    {
      "id": "french-ellipsis",
      "input": "Il attend…\nLe lendemain, il part.",
      "expected": "Il attend…\nLe lendemain, il part.",
      "patches": [],
      "reason": "Authored reference has two paragraphs. Ellipsis alone cannot decide this.",
      "inputSha256": "5cde0684bf88e02d333b3896370b1c4711b4e8d521bc5807c694f58befaa3062",
      "approvedOutput": "Il attend…\nLe lendemain, il part.",
      "naiveOutput": "Il attend… Le lendemain, il part.",
      "naiveMatchesReference": false,
      "audit": []
    },
    {
      "id": "list",
      "input": "1. Keep the scan.\n2. Review the text.",
      "expected": "1. Keep the scan.\n2. Review the text.",
      "patches": [],
      "reason": "Two authored list items.",
      "inputSha256": "8c0534b46ca3f44574c1b87ed2b2fa64128b5e266fc41a6485db54b135e46a31",
      "approvedOutput": "1. Keep the scan.\n2. Review the text.",
      "naiveOutput": "1. Keep the scan. 2. Review the text.",
      "naiveMatchesReference": false,
      "audit": []
    },
    {
      "id": "poem",
      "input": "One lamp above the quay\nOne shadow on the stair",
      "expected": "One lamp above the quay\nOne shadow on the stair",
      "patches": [],
      "reason": "Original two-line verse; preserve lineation.",
      "inputSha256": "3c809b21b38c68e1f3fd5f20803b152c0a6af569d93f0e5b08effc0be197c48c",
      "approvedOutput": "One lamp above the quay\nOne shadow on the stair",
      "naiveOutput": "One lamp above the quay One shadow on the stair",
      "naiveMatchesReference": false,
      "audit": []
    },
    {
      "id": "code",
      "input": "if ready:\n    send_report()",
      "expected": "if ready:\n    send_report()",
      "patches": [],
      "reason": "Synthetic code; newline and indentation are meaningful.",
      "inputSha256": "cf2b597e9d05983f96e67a629bf33c371b0cb7964495b22467ce0be8c502d89a",
      "approvedOutput": "if ready:\n    send_report()",
      "naiveOutput": "if ready:     send_report()",
      "naiveMatchesReference": false,
      "audit": []
    },
    {
      "id": "heading",
      "input": "Archive notes\nThe collection contains eighteen notebooks.",
      "expected": "Archive notes\nThe collection contains eighteen notebooks.",
      "patches": [],
      "reason": "Authored heading plus separate prose block, despite no blank line.",
      "inputSha256": "aafbe7a9e147306a434ff72b550c5fd886cfb7f3e9ab55fe20d7fee776d9aef2",
      "approvedOutput": "Archive notes\nThe collection contains eighteen notebooks.",
      "naiveOutput": "Archive notes The collection contains eighteen notebooks.",
      "naiveMatchesReference": false,
      "audit": []
    },
    {
      "id": "paragraph",
      "input": "The first box is closed.\nThe second box remains open.",
      "expected": "The first box is closed.\nThe second box remains open.",
      "patches": [],
      "reason": "Authored two-paragraph reference; punctuation is insufficient evidence.",
      "inputSha256": "70f3ff6e6957a6ef87a5061a09dc8477c47d81627f5d536dd6957de84b7dfdcf",
      "approvedOutput": "The first box is closed.\nThe second box remains open.",
      "naiveOutput": "The first box is closed. The second box remains open.",
      "naiveMatchesReference": false,
      "audit": []
    },
    {
      "id": "page-boundary",
      "input": "The archive stores\n[page 2]\neighteen notebooks.",
      "expected": "The archive stores\n[page 2]\neighteen notebooks.",
      "patches": [],
      "reason": "Unreviewed page marker retained; do not hide provenance or infer reading order.",
      "inputSha256": "67d0e0c5098301ca4e61dd06ec521abb2687f9e13b721b0452e634c85784cae4",
      "approvedOutput": "The archive stores\n[page 2]\neighteen notebooks.",
      "naiveOutput": "The archive stores [page 2] eighteen notebooks.",
      "naiveMatchesReference": false,
      "audit": []
    }
  ]
}
