{
  "broken-quotes": {
    "testedAt": "2026-10-11T12:39:48.799Z",
    "environment": "Node v24.19.0; actual worker handler with File-compatible byte input; no Shopify live import",
    "source": "broken-quotes.csv",
    "sha256": "e32eaebd557ed2d961fdf6b4f3c3c2b0484430037041a16b68af87c7f355f203",
    "outputSha256": "d4fa729fb5de9a7f28ec46addf4c876c0b8e145de7abe871f738c1091d5cd199",
    "explanation": "Manual structural example: close the quote after Blue Shirt. These are synthetic fixture values, not recovered customer data.",
    "before": {
      "fileName": "broken-quotes.csv",
      "fileSize": 65,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 1,
      "columnCount": 3,
      "score": 64,
      "issues": [
        {
          "severity": "error",
          "code": "column-count",
          "title": "Inconsistent column count",
          "message": "Expected 3 columns but found 1.",
          "row": 2
        },
        {
          "severity": "error",
          "code": "MissingQuotes",
          "title": "Broken or unclosed quoted field",
          "message": "Quoted field unterminated",
          "row": 2
        }
      ],
      "totalIssueCount": 2,
      "canRepair": false
    },
    "after": {
      "fileName": "broken-quotes-corrected.csv",
      "fileSize": 65,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 2,
      "columnCount": 3,
      "score": 100,
      "issues": [],
      "totalIssueCount": 0,
      "canRepair": true,
      "fixedCsv": "name,price,sku\r\nBlue Shirt,19.99,SKU-001\r\nRed Shirt,24.50,SKU-002"
    },
    "corrected": "name,price,sku\n\"Blue Shirt\",19.99,SKU-001\nRed Shirt,24.50,SKU-002"
  },
  "column-count-mismatch": {
    "testedAt": "2026-10-11T12:39:48.811Z",
    "environment": "Node v24.19.0; actual worker handler with File-compatible byte input; no Shopify live import",
    "source": "column-count-mismatch.csv",
    "sha256": "5d0e6b2a1998bfc1eab47f847a20885e64e6300953d0a8f0460b8b47c413ebe2",
    "outputSha256": "725aa897245627e021efb309404747b94804a2ed696069d5c293cd74abdea141",
    "explanation": "Manual example using the explicitly defined synthetic schema: add SKU-002 and remove the deliberately inserted EXTRA field. This is not an automatic inference.",
    "before": {
      "fileName": "column-count-mismatch.csv",
      "fileSize": 88,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 3,
      "columnCount": 3,
      "score": 64,
      "issues": [
        {
          "severity": "error",
          "code": "column-count",
          "title": "Inconsistent column count",
          "message": "Expected 3 columns but found 2.",
          "row": 3
        },
        {
          "severity": "error",
          "code": "column-count",
          "title": "Inconsistent column count",
          "message": "Expected 3 columns but found 4.",
          "row": 4
        }
      ],
      "totalIssueCount": 2,
      "canRepair": false
    },
    "after": {
      "fileName": "column-count-mismatch-corrected.csv",
      "fileSize": 89,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 3,
      "columnCount": 3,
      "score": 100,
      "issues": [],
      "totalIssueCount": 0,
      "canRepair": true,
      "fixedCsv": "name,price,sku\r\nBlue Shirt,19.99,SKU-001\r\nRed Shirt,24.50,SKU-002\r\nGreen Shirt,15.00,SKU-003"
    },
    "corrected": "name,price,sku\nBlue Shirt,19.99,SKU-001\nRed Shirt,24.50,SKU-002\nGreen Shirt,15.00,SKU-003"
  },
  "duplicate-header": {
    "testedAt": "2026-10-11T12:39:48.819Z",
    "environment": "Node v24.19.0; actual worker handler with File-compatible byte input; no Shopify live import",
    "source": "duplicate-header.csv",
    "sha256": "5fa6783c02c288057305921e552973d7523fde59bc39e59b92f0453d815fc295",
    "outputSha256": "5b8723642b829e0076b2f8e18c3010d29a617c178d7da46a6e38dea81dfc0b41",
    "explanation": "Manual example: the synthetic schema defines the third column as currency. A production file needs its own source schema.",
    "before": {
      "fileName": "duplicate-header.csv",
      "fileSize": 58,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 2,
      "columnCount": 3,
      "score": 82,
      "issues": [
        {
          "severity": "error",
          "code": "duplicate-header",
          "title": "Duplicate header",
          "message": "Header \"price\" appears more than once."
        }
      ],
      "totalIssueCount": 1,
      "canRepair": false
    },
    "after": {
      "fileName": "duplicate-header-corrected.csv",
      "fileSize": 60,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 2,
      "columnCount": 3,
      "score": 100,
      "issues": [],
      "totalIssueCount": 0,
      "canRepair": true,
      "fixedCsv": "name,price,currency\r\nBlue Shirt,19.99,USD\r\nRed Shirt,24.50,USD"
    },
    "corrected": "name,price,currency\nBlue Shirt,19.99,USD\nRed Shirt,24.50,USD"
  },
  "semicolon-delimiter-import": {
    "testedAt": "2026-10-11T12:39:48.830Z",
    "environment": "Node v24.19.0; actual worker handler with File-compatible byte input; no Shopify live import",
    "source": "semicolon-delimiter.csv",
    "sha256": "80ff86f2848e440ce8ff25df96a9699607075bb27870a1ff6e12fb509b958744",
    "outputSha256": "b69deebfddf7de4214190a0cfa1817252fa9e4bd0e10689e2fe2bbc7f5295c1a",
    "explanation": "Automatic normalization. Parsed fields must be identical before and after serialization.",
    "before": {
      "fileName": "semicolon-delimiter.csv",
      "fileSize": 64,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ";",
      "rowCount": 2,
      "columnCount": 3,
      "score": 95,
      "issues": [
        {
          "severity": "warning",
          "code": "delimiter",
          "title": "Detected Semicolon delimiter",
          "message": "The file can be re-serialized using commas if your destination requires comma-separated CSV."
        }
      ],
      "totalIssueCount": 1,
      "canRepair": true,
      "fixedCsv": "name,price,sku\r\nBlue Shirt,19.99,SKU-001\r\nRed Shirt,24.50,SKU-002"
    },
    "after": {
      "fileName": "semicolon-delimiter-import-corrected.csv",
      "fileSize": 65,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 2,
      "columnCount": 3,
      "score": 100,
      "issues": [],
      "totalIssueCount": 0,
      "canRepair": true,
      "fixedCsv": "name,price,sku\r\nBlue Shirt,19.99,SKU-001\r\nRed Shirt,24.50,SKU-002"
    },
    "corrected": "name,price,sku\r\nBlue Shirt,19.99,SKU-001\r\nRed Shirt,24.50,SKU-002"
  },
  "windows-1252-to-utf8": {
    "auto": {
      "fileName": "fixture.csv",
      "fileSize": 68,
      "encoding": "non-UTF-8",
      "encodingConfidence": "guess",
      "delimiter": ",",
      "rowCount": 2,
      "columnCount": 3,
      "score": 82,
      "issues": [
        {
          "severity": "error",
          "code": "encoding",
          "title": "File is not valid UTF-8",
          "message": "Auto mode does not guess legacy encodings. Choose the source encoding above before converting this file to UTF-8."
        },
        {
          "severity": "info",
          "code": "encoding-confirmation",
          "title": "Source encoding confirmation required",
          "message": "The current preview preserves CSV structure, but repair stays disabled until you select the actual source encoding."
        }
      ],
      "totalIssueCount": 2,
      "canRepair": false
    },
    "testedAt": "2026-10-11T12:39:48.840Z",
    "environment": "Node v24.19.0; actual worker handler with File-compatible byte input; no Shopify live import",
    "source": "windows-1252.csv",
    "sha256": "23bdd6e3312acafaa07e8b2628d020e2a3754cabe7a5217aa63cc1b70d3c429f",
    "outputSha256": "9ff4ccaec5c2c20110064491b3fb765edf45fa68cd9f2d2d0d442a48e340e459",
    "explanation": "Source encoding is known from fixture construction. Auto is also tested and must block repair.",
    "before": {
      "fileName": "windows-1252.csv",
      "fileSize": 68,
      "encoding": "windows-1252",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 2,
      "columnCount": 3,
      "score": 82,
      "issues": [
        {
          "severity": "error",
          "code": "encoding",
          "title": "File is not UTF-8",
          "message": "Decoded as windows-1252. If the CSV structure is safe, the repaired download will be re-exported as UTF-8."
        }
      ],
      "totalIssueCount": 1,
      "canRepair": true,
      "fixedCsv": "name,city,note\r\nJosé,Montréal,Café résumé\r\nMüller,Zürich,Crème brûlée"
    },
    "after": {
      "fileName": "windows-1252-to-utf8-corrected.csv",
      "fileSize": 79,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 2,
      "columnCount": 3,
      "score": 100,
      "issues": [],
      "totalIssueCount": 0,
      "canRepair": true,
      "fixedCsv": "name,city,note\r\nJosé,Montréal,Café résumé\r\nMüller,Zürich,Crème brûlée"
    },
    "corrected": "name,city,note\r\nJosé,Montréal,Café résumé\r\nMüller,Zürich,Crème brûlée"
  },
  "shopify-missing-title": {
    "testedAt": "2026-10-11T12:39:48.848Z",
    "environment": "Node v24.19.0; actual worker handler with File-compatible byte input; no Shopify live import",
    "source": "shopify-missing-title.csv",
    "sha256": "116fc878b6a7911fb709a731c3a5798af017b759fd31189c89fea57f78d93154",
    "outputSha256": "70d38288f81b0ccd21db5541b3ce5aed20dfc286adff02152d61643df3aa2690",
    "explanation": "Manual example: titles are supplied as synthetic product data. Passing offline header checks does not prove Shopify import acceptance.",
    "before": {
      "fileName": "shopify-missing-title.csv",
      "fileSize": 45,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 2,
      "columnCount": 2,
      "score": 82,
      "issues": [
        {
          "severity": "error",
          "code": "shopify-title",
          "title": "Missing Title column",
          "message": "A product CSV needs a Title column for product creation."
        }
      ],
      "totalIssueCount": 1,
      "canRepair": false
    },
    "after": {
      "fileName": "shopify-missing-title-corrected.csv",
      "fileSize": 71,
      "encoding": "utf-8",
      "encodingConfidence": "exact",
      "delimiter": ",",
      "rowCount": 2,
      "columnCount": 3,
      "score": 100,
      "issues": [],
      "totalIssueCount": 0,
      "canRepair": false
    },
    "corrected": "Handle,Title,Vendor\nblue-shirt,Blue Shirt,Acme\nred-shirt,Red Shirt,Acme"
  }
}