{
  "name": "CSV Dock Edge Case Corpus",
  "version": "1.0.0",
  "release_date": "2026-08-12",
  "description": "Synthetic CSV, TSV and JSON fixtures for testing delimiters, quoting, headers, row shape, Unicode preservation, merging and conversion workflows.",
  "license": "CC0-1.0",
  "synthetic_data_only": true,
  "homepage": "https://csvdock.com/labs/csv-edge-case-dataset",
  "error_code_definitions": {
    "DUPLICATE_HEADER": "Two or more trimmed, case-insensitive header values are identical.",
    "EMPTY_HEADER": "At least one header value is empty after trimming whitespace.",
    "INCONSISTENT_COLUMNS": "At least one non-empty data row has a different field count from the first record.",
    "TRAILING_DELIMITER": "Every non-empty physical line ends with the configured delimiter.",
    "UNCLOSED_QUOTE": "The reference parser reports a missing or invalid closing quote."
  },
  "fixtures": [
    {
      "id": "customers",
      "file": "customers.csv",
      "category": "valid-basic",
      "case": "Basic UTF-8 table",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 3,
        "columns": 4,
        "error_codes": []
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/customers.csv",
      "bytes": 145,
      "sha256": "5ce5a08a7feb5e0e6ee525d6f3159df4f779f853d252039b36821eba767df6ca"
    },
    {
      "id": "multiline-and-quotes",
      "file": "multiline-and-quotes.csv",
      "category": "quoting",
      "case": "Quoted commas, multiline fields and escaped quotes",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 3,
        "columns": 3,
        "error_codes": [],
        "contains": [
          "two physical lines",
          "She said \"hello\""
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/multiline-and-quotes.csv",
      "bytes": 119,
      "sha256": "a27a326df2fe212420807bcc9768ebdf040fa50102a18aaf5c90606c329e0b32"
    },
    {
      "id": "inconsistent-rows",
      "file": "inconsistent-rows.csv",
      "category": "row-shape",
      "case": "Short and long records",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 3,
        "columns": 3,
        "error_codes": [
          "INCONSISTENT_COLUMNS"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/inconsistent-rows.csv",
      "bytes": 57,
      "sha256": "856b4d081ef93049d5575802ab1839ead1a1cbf8654ea570c822a31ccb59bef6"
    },
    {
      "id": "leading-zeros",
      "file": "leading-zeros.csv",
      "category": "data-preservation",
      "case": "Leading zeroes and long identifiers",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 3,
        "error_codes": [],
        "contains": [
          "000184",
          "12345678901234567890",
          "00120"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/leading-zeros.csv",
      "bytes": 107,
      "sha256": "968da7c173ad10c7fd08e75ebd386c1b81a4558a5915fd4bca0a01445f093ac8"
    },
    {
      "id": "international-utf8",
      "file": "international-utf8.csv",
      "category": "encoding",
      "case": "International UTF-8 text",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 3,
        "columns": 3,
        "error_codes": [],
        "contains": [
          "Zoë",
          "東京",
          "日本語",
          "zażółć"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/international-utf8.csv",
      "bytes": 87,
      "sha256": "bbc6a0158463754b3ae8cec3d638095dd0636c0f1a29f2dfb3674075435f5b67"
    },
    {
      "id": "semicolon",
      "file": "semicolon.csv",
      "category": "delimiter",
      "case": "Semicolon dialect and decimal commas",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ";",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 3,
        "error_codes": [],
        "contains": [
          "12,50",
          "19,95"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/semicolon.csv",
      "bytes": 71,
      "sha256": "8d35b223cc2dacd661fd7fdc90a3d44d96352c8db4563b3aafc0a39d68588ea3"
    },
    {
      "id": "tab-separated",
      "file": "tab-separated.tsv",
      "category": "delimiter",
      "case": "Tab-separated values",
      "media_type": "text/tab-separated-values",
      "encoding": "utf-8",
      "delimiter": "\t",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 3,
        "error_codes": []
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/tab-separated.tsv",
      "bytes": 34,
      "sha256": "2da3fcdec73dc8289f162cc3b42057d9445b11d620d4fd8e7e4f40fdd846e50f"
    },
    {
      "id": "pipe-delimited",
      "file": "pipe-delimited.csv",
      "category": "delimiter",
      "case": "Pipe-separated values",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": "|",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 3,
        "error_codes": []
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/pipe-delimited.csv",
      "bytes": 44,
      "sha256": "33205623a475eb3e5d08d3c7e5d25334482cb0b647b2750e56a07a758102eaac"
    },
    {
      "id": "duplicate-headers",
      "file": "duplicate-headers.csv",
      "category": "headers",
      "case": "Duplicate column names",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 3,
        "error_codes": [
          "DUPLICATE_HEADER"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/duplicate-headers.csv",
      "bytes": 43,
      "sha256": "61ba128e7fabfd467a0c990000e1cee8c566ac59965913b8ca7d69e80561ed89"
    },
    {
      "id": "empty-headers",
      "file": "empty-headers.csv",
      "category": "headers",
      "case": "Unnamed columns",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 4,
        "error_codes": [
          "DUPLICATE_HEADER",
          "EMPTY_HEADER",
          "TRAILING_DELIMITER"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/empty-headers.csv",
      "bytes": 33,
      "sha256": "9bf4bbe7186e82f6973f784427ab2844a3c8099e4adf4efdfc2380a7e15a40fb"
    },
    {
      "id": "trailing-delimiters",
      "file": "trailing-delimiters.csv",
      "category": "row-shape",
      "case": "Trailing delimiter on every record",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 4,
        "error_codes": [
          "EMPTY_HEADER",
          "TRAILING_DELIMITER"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/trailing-delimiters.csv",
      "bytes": 37,
      "sha256": "52d47933e7558cd6d6b6756a1ef1458150d59e2d772a2ffbf7d7b0a1a8b6c079"
    },
    {
      "id": "no-header",
      "file": "no-header.csv",
      "category": "headers",
      "case": "Data without a header record",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": false,
      "expected": {
        "rows": 2,
        "columns": 3,
        "error_codes": [],
        "contains": [
          "000184"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/no-header.csv",
      "bytes": 30,
      "sha256": "c477d8015d4e64d12a8831fa14e0121574ac571b36e37f65df9890903edc9d41"
    },
    {
      "id": "one-column",
      "file": "one-column.csv",
      "category": "row-shape",
      "case": "Valid single-column input",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 3,
        "columns": 1,
        "error_codes": []
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/one-column.csv",
      "bytes": 31,
      "sha256": "eabc40003a7d945d8e40f3e69ef483fa1d7f7c7026500026b3ecd1340e2c185f"
    },
    {
      "id": "quoted-delimiters",
      "file": "quoted-delimiters.csv",
      "category": "quoting",
      "case": "Delimiter characters inside quoted fields",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 3,
        "columns": 3,
        "error_codes": [],
        "contains": [
          "comma, inside",
          "semicolon; inside",
          "pipe | inside"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/quoted-delimiters.csv",
      "bytes": 81,
      "sha256": "b4d59670627efdc325fcd6557d708455ee88d309883c50ea2b2bfb8276bf7773"
    },
    {
      "id": "unclosed-quote",
      "file": "unclosed-quote.csv",
      "category": "quoting",
      "case": "Malformed unclosed quoted field",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 1,
        "columns": 2,
        "error_codes": [
          "UNCLOSED_QUOTE"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/unclosed-quote.csv",
      "bytes": 51,
      "sha256": "a2a8f71bdd572bdb6ba9b539dcef0dd5bd14742226478d933c1cece92d3b4b6b"
    },
    {
      "id": "nulls-and-booleans",
      "file": "nulls-and-booleans.csv",
      "category": "data-preservation",
      "case": "Strings that may be inferred as nulls, booleans or numbers",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 4,
        "error_codes": [],
        "contains": [
          "true",
          "false",
          "null"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/nulls-and-booleans.csv",
      "bytes": 61,
      "sha256": "0adbfa25942f45c8ede336d1eec7817cbfbaa4da08e2c5440e03e028f153897f"
    },
    {
      "id": "sparse-columns",
      "file": "sparse-columns.csv",
      "category": "row-shape",
      "case": "Sparse values across otherwise consistent columns",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 3,
        "columns": 5,
        "error_codes": []
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/sparse-columns.csv",
      "bytes": 83,
      "sha256": "b965279194e0656677fbbdb735ed6af81b8ed477c27c8948fe3b9485e87f4e4d"
    },
    {
      "id": "nested-records",
      "file": "nested-records.json",
      "category": "json-conversion",
      "case": "Nested JSON array for flattening into tabular columns",
      "media_type": "application/json",
      "encoding": "utf-8",
      "array_path": "results",
      "expected": {
        "records": 2,
        "keys": [
          "id",
          "customer.name",
          "customer.region",
          "tags"
        ],
        "error_codes": []
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/nested-records.json",
      "bytes": 269,
      "sha256": "5852449fa18853b513f49447ea15e197e30b1da7fd02151cf578f1db5bb5f5dd"
    },
    {
      "id": "merge-east",
      "file": "merge-east.csv",
      "category": "merge",
      "case": "Merge source A",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 3,
        "error_codes": []
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/merge-east.csv",
      "bytes": 60,
      "sha256": "14d23bef388899a4c629e9dd6d3fad335d67c69805035c7a3bbcf87078e5d385"
    },
    {
      "id": "merge-west",
      "file": "merge-west.csv",
      "category": "merge",
      "case": "Merge source B with reordered and different headers",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 2,
        "columns": 3,
        "error_codes": []
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/merge-west.csv",
      "bytes": 64,
      "sha256": "16afd37f6435a291d799da7ac8c93a08d18b79033db7e8da6fc68c073fd407ae"
    },
    {
      "id": "scale-smoke-test",
      "file": "large-preview-sample.csv",
      "category": "scale-smoke-test",
      "case": "Small deterministic fixture for exercising the large-file preview workflow; not a performance benchmark",
      "media_type": "text/csv",
      "encoding": "utf-8",
      "delimiter": ",",
      "has_header": true,
      "expected": {
        "rows": 3,
        "columns": 3,
        "error_codes": [],
        "contains": [
          "000001"
        ]
      },
      "download_url": "/datasets/csv-edge-case-corpus/v1.0.0/fixtures/large-preview-sample.csv",
      "bytes": 74,
      "sha256": "d88507178caaf8ef1b8a07272ae14b90ced851b19cf22972c194fd34db0d3ca3"
    }
  ],
  "generated_at": "2026-08-12T00:00:00Z",
  "fixture_count": 21,
  "validation": {
    "type": "reference-parser",
    "parser": "Papa Parse",
    "parser_version": "5.5.4",
    "note": "Recorded outcomes are checked by the dataset build script; they are not cross-parser compatibility claims."
  }
}
