{"abstract":"A structured table violates the declared record or column contract.","category":"Delimited text","checks":8,"contract":"Assign unique output names to repeated raw column names. First occurrence keeps its name; later duplicates append _2, _3, etc, skipping names already present anywhere in the raw header and names already assigned. Empty raw names use column<one-based-position> before collision handling. Preserve order.","evaluation_group":"s3-delimited-text-header-disambiguation","failed_approach":"Using total width gives all empty positions the same base label.","family":"s3-delimited-text-header-disambiguation-empty-position","id":"FA-47951","implementations":{"attempt":{"sha256":"75ea31fe5c28f9e135c5df4acfa4784c3a0bf5d43dbaf61d3cd348a05e13a44e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\ndef _vary(value):\n    if value == '@END': return 3 + 4*N\n    if isinstance(value, str): return value.replace('@', 'cell' * N)\n    if isinstance(value, list): return [_vary(x) for x in value]\n    if isinstance(value, dict): return {_vary(k): _vary(v) for k,v in value.items()}\n    return value\nN = 1\nobservations = []\ndef solve(data):\n    raw = data.split(',')\n    base = [name if name else 'column' + str(len(raw)) for i,name in enumerate(raw)]\n    reserved, used, out = set(base), set(), []\n    for name in base:\n        candidate = name\n        suffix = 2\n        while candidate in used:\n            candidate = name + '_' + str(suffix)\n            suffix += 1\n            while candidate in reserved:\n                candidate = name + '_' + str(suffix)\n                suffix += 1\n        out.append(candidate)\n        used.add(candidate)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('duplicates', solve(_vary('@,@,@')), _vary(['@', '@_2', '@_3']))\ncheck('reserved', solve(_vary('a,a,a_2')), _vary(['a', 'a_3', 'a_2']))\ncheck('multiple reserves', solve(_vary('a,a,a_2,a_3')), _vary(['a', 'a_4', 'a_2', 'a_3']))\ncheck('blanks', solve(_vary(',x,')), _vary(['column1', 'x', 'column3']))\ncheck('ordinary', solve(_vary('a,b')), _vary(['a', 'b']))\ncheck('nested base', solve(_vary('a,a,a_2,a_2')), _vary(['a', 'a_3', 'a_2', 'a_2_2']))\ncheck('empty', solve(_vary('')), _vary(['column1']))\ncheck('reserved generated', solve(_vary('column2,,column2')), _vary(['column2', 'column2_2', 'column2_3']))\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"7838436ae119af83b7c7528b4ca5ec214d0d5797356d05aa9bac822604e3314f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\ndef _vary(value):\n    if value == '@END': return 3 + 4*N\n    if isinstance(value, str): return value.replace('@', 'cell' * N)\n    if isinstance(value, list): return [_vary(x) for x in value]\n    if isinstance(value, dict): return {_vary(k): _vary(v) for k,v in value.items()}\n    return value\nN = 1\nobservations = []\ndef solve(data):\n    raw = data.split(',')\n    base = [name if name else 'column' + str(i) for i,name in enumerate(raw)]\n    reserved, used, out = set(base), set(), []\n    for name in base:\n        candidate = name\n        suffix = 2\n        while candidate in used:\n            candidate = name + '_' + str(suffix)\n            suffix += 1\n            while candidate in reserved:\n                candidate = name + '_' + str(suffix)\n                suffix += 1\n        out.append(candidate)\n        used.add(candidate)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('duplicates', solve(_vary('@,@,@')), _vary(['@', '@_2', '@_3']))\ncheck('reserved', solve(_vary('a,a,a_2')), _vary(['a', 'a_3', 'a_2']))\ncheck('multiple reserves', solve(_vary('a,a,a_2,a_3')), _vary(['a', 'a_4', 'a_2', 'a_3']))\ncheck('blanks', solve(_vary(',x,')), _vary(['column1', 'x', 'column3']))\ncheck('ordinary', solve(_vary('a,b')), _vary(['a', 'b']))\ncheck('nested base', solve(_vary('a,a,a_2,a_2')), _vary(['a', 'a_3', 'a_2', 'a_2_2']))\ncheck('empty', solve(_vary('')), _vary(['column1']))\ncheck('reserved generated', solve(_vary('column2,,column2')), _vary(['column2', 'column2_2', 'column2_3']))\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"fb4f4c33c5e2de48d6932ee009ec47fcbfbb0b5994c9917f6343315548438bfe","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\ndef _vary(value):\n    if value == '@END': return 3 + 4*N\n    if isinstance(value, str): return value.replace('@', 'cell' * N)\n    if isinstance(value, list): return [_vary(x) for x in value]\n    if isinstance(value, dict): return {_vary(k): _vary(v) for k,v in value.items()}\n    return value\nN = 1\nobservations = []\ndef solve(data):\n    raw = data.split(',')\n    base = [name if name else 'column' + str(i+1) for i,name in enumerate(raw)]\n    reserved, used, out = set(base), set(), []\n    for name in base:\n        candidate = name\n        suffix = 2\n        while candidate in used:\n            candidate = name + '_' + str(suffix)\n            suffix += 1\n            while candidate in reserved:\n                candidate = name + '_' + str(suffix)\n                suffix += 1\n        out.append(candidate)\n        used.add(candidate)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('duplicates', solve(_vary('@,@,@')), _vary(['@', '@_2', '@_3']))\ncheck('reserved', solve(_vary('a,a,a_2')), _vary(['a', 'a_3', 'a_2']))\ncheck('multiple reserves', solve(_vary('a,a,a_2,a_3')), _vary(['a', 'a_4', 'a_2', 'a_3']))\ncheck('blanks', solve(_vary(',x,')), _vary(['column1', 'x', 'column3']))\ncheck('ordinary', solve(_vary('a,b')), _vary(['a', 'b']))\ncheck('nested base', solve(_vary('a,a,a_2,a_2')), _vary(['a', 'a_3', 'a_2', 'a_2_2']))\ncheck('empty', solve(_vary('')), _vary(['column1']))\ncheck('reserved generated', solve(_vary('column2,,column2')), _vary(['column2', 'column2_2', 'column2_3']))\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Deterministic bounded in-memory model. No claim of complete CSV or external format conformance. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-delimited-text-header-disambiguation-empty-position","generated_at":"2026-09-29T14:44:46.356861+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Delimited interchange needs explicit framing, schema and field semantics at ingestion and emission boundaries.","repair":"Preserve the named invariant at the faulty decision: 'column' + str(i+1)","root_cause":"Fallback labels expose internal indexes rather than physical one-based positions.","sha256":"e32f8e807692a9d257d72490a40e1c10111ea03eba5952662c8cba953aacf0d3","title":"Unnamed columns receive zero-based fallback names · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.419,"exit_code":1,"observations":[{"actual":["cell","cell_2","cell_3"],"check":"duplicates","expected":["cell","cell_2","cell_3"],"passed":true},{"actual":["a","a_3","a_2"],"check":"reserved","expected":["a","a_3","a_2"],"passed":true},{"actual":["a","a_4","a_2","a_3"],"check":"multiple reserves","expected":["a","a_4","a_2","a_3"],"passed":true},{"actual":["column3","x","column3_2"],"check":"blanks","expected":["column1","x","column3"],"passed":false},{"actual":["a","b"],"check":"ordinary","expected":["a","b"],"passed":true},{"actual":["a","a_3","a_2","a_2_2"],"check":"nested base","expected":["a","a_3","a_2","a_2_2"],"passed":true},{"actual":["column1"],"check":"empty","expected":["column1"],"passed":true},{"actual":["column2","column3","column2_2"],"check":"reserved generated","expected":["column2","column2_2","column2_3"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"duplicates\", \"actual\": [\"cell\", \"cell_2\", \"cell_3\"], \"expected\": [\"cell\", \"cell_2\", \"cell_3\"], \"passed\": true}, {\"check\": \"reserved\", \"actual\": [\"a\", \"a_3\", \"a_2\"], \"expected\": [\"a\", \"a_3\", \"a_2\"], \"passed\": true}, {\"check\": \"multiple reserves\", \"actual\": [\"a\", \"a_4\", \"a_2\", \"a_3\"], \"expected\": [\"a\", \"a_4\", \"a_2\", \"a_3\"], \"passed\": true}, {\"check\": \"blanks\", \"actual\": [\"column3\", \"x\", \"column3_2\"], \"expected\": [\"column1\", \"x\", \"column3\"], \"passed\": false}, {\"check\": \"ordinary\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"nested base\", \"actual\": [\"a\", \"a_3\", \"a_2\", \"a_2_2\"], \"expected\": [\"a\", \"a_3\", \"a_2\", \"a_2_2\"], \"passed\": true}, {\"check\": \"empty\", \"actual\": [\"column1\"], \"expected\": [\"column1\"], \"passed\": true}, {\"check\": \"reserved generated\", \"actual\": [\"column2\", \"column3\", \"column2_2\"], \"expected\": [\"column2\", \"column2_2\", \"column2_3\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.329,"exit_code":1,"observations":[{"actual":["cell","cell_2","cell_3"],"check":"duplicates","expected":["cell","cell_2","cell_3"],"passed":true},{"actual":["a","a_3","a_2"],"check":"reserved","expected":["a","a_3","a_2"],"passed":true},{"actual":["a","a_4","a_2","a_3"],"check":"multiple reserves","expected":["a","a_4","a_2","a_3"],"passed":true},{"actual":["column0","x","column2"],"check":"blanks","expected":["column1","x","column3"],"passed":false},{"actual":["a","b"],"check":"ordinary","expected":["a","b"],"passed":true},{"actual":["a","a_3","a_2","a_2_2"],"check":"nested base","expected":["a","a_3","a_2","a_2_2"],"passed":true},{"actual":["column0"],"check":"empty","expected":["column1"],"passed":false},{"actual":["column2","column1","column2_2"],"check":"reserved generated","expected":["column2","column2_2","column2_3"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"duplicates\", \"actual\": [\"cell\", \"cell_2\", \"cell_3\"], \"expected\": [\"cell\", \"cell_2\", \"cell_3\"], \"passed\": true}, {\"check\": \"reserved\", \"actual\": [\"a\", \"a_3\", \"a_2\"], \"expected\": [\"a\", \"a_3\", \"a_2\"], \"passed\": true}, {\"check\": \"multiple reserves\", \"actual\": [\"a\", \"a_4\", \"a_2\", \"a_3\"], \"expected\": [\"a\", \"a_4\", \"a_2\", \"a_3\"], \"passed\": true}, {\"check\": \"blanks\", \"actual\": [\"column0\", \"x\", \"column2\"], \"expected\": [\"column1\", \"x\", \"column3\"], \"passed\": false}, {\"check\": \"ordinary\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"nested base\", \"actual\": [\"a\", \"a_3\", \"a_2\", \"a_2_2\"], \"expected\": [\"a\", \"a_3\", \"a_2\", \"a_2_2\"], \"passed\": true}, {\"check\": \"empty\", \"actual\": [\"column0\"], \"expected\": [\"column1\"], \"passed\": false}, {\"check\": \"reserved generated\", \"actual\": [\"column2\", \"column1\", \"column2_2\"], \"expected\": [\"column2\", \"column2_2\", \"column2_3\"], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":45.746,"exit_code":0,"observations":[{"actual":["cell","cell_2","cell_3"],"check":"duplicates","expected":["cell","cell_2","cell_3"],"passed":true},{"actual":["a","a_3","a_2"],"check":"reserved","expected":["a","a_3","a_2"],"passed":true},{"actual":["a","a_4","a_2","a_3"],"check":"multiple reserves","expected":["a","a_4","a_2","a_3"],"passed":true},{"actual":["column1","x","column3"],"check":"blanks","expected":["column1","x","column3"],"passed":true},{"actual":["a","b"],"check":"ordinary","expected":["a","b"],"passed":true},{"actual":["a","a_3","a_2","a_2_2"],"check":"nested base","expected":["a","a_3","a_2","a_2_2"],"passed":true},{"actual":["column1"],"check":"empty","expected":["column1"],"passed":true},{"actual":["column2","column2_2","column2_3"],"check":"reserved generated","expected":["column2","column2_2","column2_3"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"duplicates\", \"actual\": [\"cell\", \"cell_2\", \"cell_3\"], \"expected\": [\"cell\", \"cell_2\", \"cell_3\"], \"passed\": true}, {\"check\": \"reserved\", \"actual\": [\"a\", \"a_3\", \"a_2\"], \"expected\": [\"a\", \"a_3\", \"a_2\"], \"passed\": true}, {\"check\": \"multiple reserves\", \"actual\": [\"a\", \"a_4\", \"a_2\", \"a_3\"], \"expected\": [\"a\", \"a_4\", \"a_2\", \"a_3\"], \"passed\": true}, {\"check\": \"blanks\", \"actual\": [\"column1\", \"x\", \"column3\"], \"expected\": [\"column1\", \"x\", \"column3\"], \"passed\": true}, {\"check\": \"ordinary\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"nested base\", \"actual\": [\"a\", \"a_3\", \"a_2\", \"a_2_2\"], \"expected\": [\"a\", \"a_3\", \"a_2\", \"a_2_2\"], \"passed\": true}, {\"check\": \"empty\", \"actual\": [\"column1\"], \"expected\": [\"column1\"], \"passed\": true}, {\"check\": \"reserved generated\", \"actual\": [\"column2\", \"column2_2\", \"column2_3\"], \"expected\": [\"column2\", \"column2_2\", \"column2_3\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}