{
  "version": "1.0.0",
  "date": "2026-09-14",
  "synthetic": true,
  "method": "Original synthetic examples, not exports from a vendor. Expectations authored from the comparison contract, not generated by the comparator.",
  "cases": [
    {
      "id": "zeros",
      "purpose": "Non-key identifiers retain leading zeros; no number conversion.",
      "before": "csv-roundtrip-zeros-before.csv",
      "after": "csv-roundtrip-zeros-after.csv",
      "expected": {
        "status": "compared",
        "summary": {
          "beforeRows": 1,
          "afterRows": 1,
          "addedRows": 0,
          "removedRows": 0,
          "changedRows": 1,
          "changedValues": 1,
          "addedHeaders": 0,
          "removedHeaders": 0
        },
        "differences": [
          {
            "type": "changed-value",
            "key": "row1",
            "header": "account",
            "before": {
              "present": true,
              "value": "0012"
            },
            "after": {
              "present": true,
              "value": "12"
            }
          }
        ]
      },
      "options": {
        "key": "id",
        "delimiterBefore": ",",
        "delimiterAfter": ","
      }
    },
    {
      "id": "dates",
      "purpose": "Ambiguous dates compared as raw strings without locale inference.",
      "before": "csv-roundtrip-dates-before.csv",
      "after": "csv-roundtrip-dates-after.csv",
      "expected": {
        "status": "compared",
        "summary": {
          "beforeRows": 1,
          "afterRows": 1,
          "addedRows": 0,
          "removedRows": 0,
          "changedRows": 1,
          "changedValues": 1,
          "addedHeaders": 0,
          "removedHeaders": 0
        },
        "differences": [
          {
            "type": "changed-value",
            "key": "1",
            "header": "date",
            "before": {
              "present": true,
              "value": "03/04/2026"
            },
            "after": {
              "present": true,
              "value": "2026-03-04"
            }
          }
        ]
      },
      "options": {
        "key": "id",
        "delimiterBefore": ",",
        "delimiterAfter": ","
      }
    },
    {
      "id": "rows",
      "purpose": "Added and missing rows are reported using the selected exact key.",
      "before": "csv-roundtrip-rows-before.csv",
      "after": "csv-roundtrip-rows-after.csv",
      "expected": {
        "status": "compared",
        "summary": {
          "beforeRows": 2,
          "afterRows": 2,
          "addedRows": 1,
          "removedRows": 1,
          "changedRows": 0,
          "changedValues": 0,
          "addedHeaders": 0,
          "removedHeaders": 0
        },
        "differences": [
          {
            "type": "removed-row",
            "key": "2",
            "row": [
              {
                "header": "id",
                "value": {
                  "present": true,
                  "value": "2"
                }
              },
              {
                "header": "note",
                "value": {
                  "present": true,
                  "value": "gone"
                }
              }
            ]
          },
          {
            "type": "added-row",
            "key": "3",
            "row": [
              {
                "header": "id",
                "value": {
                  "present": true,
                  "value": "3"
                }
              },
              {
                "header": "note",
                "value": {
                  "present": true,
                  "value": "new"
                }
              }
            ]
          }
        ]
      },
      "options": {
        "key": "id",
        "delimiterBefore": ",",
        "delimiterAfter": ","
      }
    },
    {
      "id": "duplicates",
      "purpose": "Duplicate row keys make the entire comparison unresolved.",
      "before": "csv-roundtrip-duplicates-before.csv",
      "after": "csv-roundtrip-duplicates-after.csv",
      "expected": {
        "status": "unresolved",
        "issueCodes": [
          "DUPLICATE_KEY"
        ]
      },
      "options": {
        "key": "id",
        "delimiterBefore": ",",
        "delimiterAfter": ","
      }
    },
    {
      "id": "empty-missing",
      "purpose": "An absent trailing cell differs from an explicitly empty cell.",
      "before": "csv-roundtrip-empty-missing-before.csv",
      "after": "csv-roundtrip-empty-missing-after.csv",
      "expected": {
        "status": "compared",
        "summary": {
          "beforeRows": 2,
          "afterRows": 2,
          "addedRows": 0,
          "removedRows": 0,
          "changedRows": 1,
          "changedValues": 1,
          "addedHeaders": 0,
          "removedHeaders": 0
        },
        "differences": [
          {
            "type": "changed-value",
            "key": "1",
            "header": "note",
            "before": {
              "present": false
            },
            "after": {
              "present": true,
              "value": ""
            }
          }
        ]
      },
      "options": {
        "key": "id",
        "delimiterBefore": ",",
        "delimiterAfter": ","
      }
    },
    {
      "id": "unchanged-quotes",
      "purpose": "Quoted delimiters, escaped quotes and embedded newlines remain equal despite row and header reorder.",
      "before": "csv-roundtrip-unchanged-quotes-before.csv",
      "after": "csv-roundtrip-unchanged-quotes-after.csv",
      "expected": {
        "status": "compared",
        "summary": {
          "beforeRows": 2,
          "afterRows": 2,
          "addedRows": 0,
          "removedRows": 0,
          "changedRows": 0,
          "changedValues": 0,
          "addedHeaders": 0,
          "removedHeaders": 0
        },
        "differences": []
      },
      "options": {
        "key": "id",
        "delimiterBefore": ",",
        "delimiterAfter": ","
      }
    },
    {
      "id": "headers",
      "purpose": "Exact header renames are one removed and one added header, with missing-cell differences.",
      "before": "csv-roundtrip-headers-before.csv",
      "after": "csv-roundtrip-headers-after.csv",
      "expected": {
        "status": "compared",
        "summary": {
          "beforeRows": 1,
          "afterRows": 1,
          "addedRows": 0,
          "removedRows": 0,
          "changedRows": 1,
          "changedValues": 2,
          "addedHeaders": 1,
          "removedHeaders": 1
        },
        "differences": [
          {
            "type": "changed-value",
            "key": "1",
            "header": "old",
            "before": {
              "present": true,
              "value": "x"
            },
            "after": {
              "present": false
            }
          },
          {
            "type": "changed-value",
            "key": "1",
            "header": "new",
            "before": {
              "present": false
            },
            "after": {
              "present": true,
              "value": "x"
            }
          }
        ]
      },
      "options": {
        "key": "id",
        "delimiterBefore": ",",
        "delimiterAfter": ","
      }
    },
    {
      "id": "key-change",
      "purpose": "Changed key strings cannot be inferred to identify the same row.",
      "before": "csv-roundtrip-key-change-before.csv",
      "after": "csv-roundtrip-key-change-after.csv",
      "expected": {
        "status": "compared",
        "summary": {
          "beforeRows": 1,
          "afterRows": 1,
          "addedRows": 1,
          "removedRows": 1,
          "changedRows": 0,
          "changedValues": 0,
          "addedHeaders": 0,
          "removedHeaders": 0
        },
        "differences": [
          {
            "type": "removed-row",
            "key": "0012",
            "row": [
              {
                "header": "id",
                "value": {
                  "present": true,
                  "value": "0012"
                }
              },
              {
                "header": "note",
                "value": {
                  "present": true,
                  "value": "x"
                }
              }
            ]
          },
          {
            "type": "added-row",
            "key": "12",
            "row": [
              {
                "header": "id",
                "value": {
                  "present": true,
                  "value": "12"
                }
              },
              {
                "header": "note",
                "value": {
                  "present": true,
                  "value": "x"
                }
              }
            ]
          }
        ]
      },
      "options": {
        "key": "id",
        "delimiterBefore": ",",
        "delimiterAfter": ","
      }
    }
  ]
}
