{
  "at": "2026-11-04T02:55:44.586100+00:00",
  "python": "3.12.14",
  "node": "v24.19.0",
  "input_bytes": 386,
  "input_sha256": "7c54d384ea992a17a22582b21cd985b9d4894d02efba04bbc1ea32c64320b1bb",
  "method": "Python stdlib json + csv.writer vs Node JSON.parse + explicit minimal CSV encoder; same union headers and CRLF, no type sidecar in CSV. Independent Python csv.DictReader rereads both files. No online tool or Excel test.",
  "python_parsed": [
    {
      "case": "missing",
      "present": false,
      "type": "missing",
      "value": null
    },
    {
      "case": "null",
      "present": true,
      "type": "null",
      "value": null
    },
    {
      "case": "empty",
      "present": true,
      "type": "str",
      "value": ""
    },
    {
      "case": "number-zero",
      "present": true,
      "type": "int",
      "value": 0
    },
    {
      "case": "string-zero",
      "present": true,
      "type": "str",
      "value": "0"
    },
    {
      "case": "boolean-false",
      "present": true,
      "type": "bool",
      "value": false
    },
    {
      "case": "string-false",
      "present": true,
      "type": "str",
      "value": "false"
    },
    {
      "case": "large-number",
      "present": true,
      "type": "int",
      "value": 9007199254740993
    },
    {
      "case": "large-string",
      "present": true,
      "type": "str",
      "value": "9007199254740993"
    },
    {
      "case": "quoted",
      "present": true,
      "type": "str",
      "value": "a,\"b\"\nCafé"
    }
  ],
  "node_parsed": [
    {
      "case": "missing",
      "present": false,
      "type": "missing"
    },
    {
      "case": "null",
      "present": true,
      "type": "null",
      "value": null
    },
    {
      "case": "empty",
      "present": true,
      "type": "string",
      "value": ""
    },
    {
      "case": "number-zero",
      "present": true,
      "type": "number",
      "value": 0
    },
    {
      "case": "string-zero",
      "present": true,
      "type": "string",
      "value": "0"
    },
    {
      "case": "boolean-false",
      "present": true,
      "type": "boolean",
      "value": false
    },
    {
      "case": "string-false",
      "present": true,
      "type": "string",
      "value": "false"
    },
    {
      "case": "large-number",
      "present": true,
      "type": "number",
      "value": 9007199254740992
    },
    {
      "case": "large-string",
      "present": true,
      "type": "string",
      "value": "9007199254740993"
    },
    {
      "case": "quoted",
      "present": true,
      "type": "string",
      "value": "a,\"b\"\nCaf茅"
    }
  ],
  "outputs": [
    {
      "path": "python.csv",
      "bytes": 214,
      "sha256": "5fa78ac9912a7b25c80d9e4583a2a3326a9f814d330bf45a0b97a2fb0f97c58d",
      "headers": [
        "case",
        "value",
        "later"
      ],
      "reread": [
        {
          "case": "missing",
          "value": "",
          "later": ""
        },
        {
          "case": "null",
          "value": "",
          "later": ""
        },
        {
          "case": "empty",
          "value": "",
          "later": ""
        },
        {
          "case": "number-zero",
          "value": "0",
          "later": ""
        },
        {
          "case": "string-zero",
          "value": "0",
          "later": ""
        },
        {
          "case": "boolean-false",
          "value": "false",
          "later": ""
        },
        {
          "case": "string-false",
          "value": "false",
          "later": ""
        },
        {
          "case": "large-number",
          "value": "9007199254740993",
          "later": ""
        },
        {
          "case": "large-string",
          "value": "9007199254740993",
          "later": ""
        },
        {
          "case": "quoted",
          "value": "a,\"b\"\nCafé",
          "later": "tail"
        }
      ],
      "all_reloaded_values_are_strings": true
    },
    {
      "path": "node.csv",
      "bytes": 214,
      "sha256": "b0d93e4df00e8a45382c31dc62d6365f6b83064012e7fde09707da00afc14bea",
      "headers": [
        "case",
        "value",
        "later"
      ],
      "reread": [
        {
          "case": "missing",
          "value": "",
          "later": ""
        },
        {
          "case": "null",
          "value": "",
          "later": ""
        },
        {
          "case": "empty",
          "value": "",
          "later": ""
        },
        {
          "case": "number-zero",
          "value": "0",
          "later": ""
        },
        {
          "case": "string-zero",
          "value": "0",
          "later": ""
        },
        {
          "case": "boolean-false",
          "value": "false",
          "later": ""
        },
        {
          "case": "string-false",
          "value": "false",
          "later": ""
        },
        {
          "case": "large-number",
          "value": "9007199254740992",
          "later": ""
        },
        {
          "case": "large-string",
          "value": "9007199254740993",
          "later": ""
        },
        {
          "case": "quoted",
          "value": "a,\"b\"\nCafé",
          "later": "tail"
        }
      ],
      "all_reloaded_values_are_strings": true
    }
  ],
  "difference_offsets": [
    149
  ]
}