{
  "schemaVersion": 1,
  "studyVersion": "1.0.0",
  "studyDate": "2026-09-16",
  "question": "Which local export preserves the exact strings and table shape in a controlled CSV fixture?",
  "testConditions": {
    "runtime": "Node.js 22.23.0",
    "execution": "Single-process deterministic Node.js run with no network access",
    "parser": "Useful Horizons CSV Table Lab parser",
    "encoding": "UTF-8",
    "generatedCsvRecordSeparator": "CRLF",
    "comparisonUnit": "Exact JavaScript string equality for each of 24 data cells; headings and record shape checked separately"
  },
  "fixture": {
    "recordsIncludingHeadings": 5,
    "dataRecords": 4,
    "columns": 6,
    "dataCells": 24,
    "formulaLikeCells": 3,
    "cases": [
      "leading zeros",
      "duplicate headings",
      "blank heading and empty cells",
      "comma and quote characters",
      "LF and CRLF inside quoted fields",
      "Unicode text and emoji",
      "leading and trailing whitespace",
      "tab inside a field",
      "formula-like text"
    ],
    "rows": [
      [
        "record_id",
        "label",
        "note",
        "note",
        "status",
        ""
      ],
      [
        "0017",
        "Pencils, blue",
        "First line\nSecond line",
        "\"quoted\"",
        "",
        "03/04"
      ],
      [
        "0018",
        "Café 東京",
        " leading space ",
        "",
        "0",
        "=1+2"
      ],
      [
        "0019",
        "Folder",
        "",
        "trailing space ",
        "",
        "-12"
      ],
      [
        "0020",
        "🙂",
        "comma, quote \" and CRLF\r\nkept",
        "tab\tkept",
        "",
        "@owner"
      ]
    ],
    "sourceCsv": "\"record_id\",\"label\",\"note\",\"note\",\"status\",\"\"\r\n\"0017\",\"Pencils, blue\",\"First line\nSecond line\",\"\"\"quoted\"\"\",\"\",\"03/04\"\r\n\"0018\",\"Café 東京\",\" leading space \",\"\",\"0\",\"=1+2\"\r\n\"0019\",\"Folder\",\"\",\"trailing space \",\"\",\"-12\"\r\n\"0020\",\"🙂\",\"comma, quote \"\" and CRLF\r\nkept\",\"tab\tkept\",\"\",\"@owner\"\r\n"
  },
  "results": [
    {
      "id": "raw-csv",
      "label": "Raw normalized CSV",
      "purpose": "Faithful text handoff",
      "outputBytes": 293,
      "exactDataCells": 24,
      "totalDataCells": 24,
      "preservationPercent": 100,
      "recordShapePreserved": true,
      "headingsPreserved": true,
      "changedCells": []
    },
    {
      "id": "positional-json",
      "label": "Positional JSON",
      "purpose": "Explicit columns-and-rows handoff",
      "outputBytes": 576,
      "exactDataCells": 24,
      "totalDataCells": 24,
      "preservationPercent": 100,
      "recordShapePreserved": true,
      "headingsPreserved": true,
      "changedCells": []
    },
    {
      "id": "viewing-csv",
      "label": "Protective viewing CSV",
      "purpose": "Human-viewing copy with visible labels",
      "outputBytes": 311,
      "exactDataCells": 21,
      "totalDataCells": 24,
      "preservationPercent": 87.5,
      "recordShapePreserved": true,
      "headingsPreserved": true,
      "changedCells": [
        {
          "dataRecord": 2,
          "field": 6,
          "original": "=1+2",
          "reconstructed": "text: =1+2"
        },
        {
          "dataRecord": 3,
          "field": 6,
          "original": "-12",
          "reconstructed": "text: -12"
        },
        {
          "dataRecord": 4,
          "field": 6,
          "original": "@owner",
          "reconstructed": "text: @owner"
        }
      ]
    }
  ],
  "conclusion": "Raw normalized CSV and positional JSON reconstructed all 24 data strings. The protective viewing CSV deliberately changed three formula-like strings by adding a visible text: prefix; it preserved headings and record shape."
}
