FA-47931 / Delimited text / Open access
Explicit repeated column selectors are deduplicated · case 01
A structured table violates the declared record or column contract.
ROOT CAUSE
A set-like selector result removes intentionally repeated output columns.
VERIFIED REPAIR
Preserve the named invariant at the faulty decision: return out
Unsuccessful approach: Sorting the deduplicated set also destroys user-specified order.
Case contract
Resolve an ordered comma column selector against width. Decimal selectors are one based, ranges a-b include both endpoints, and * adds every column not selected earlier. Explicit duplicate selections are retained. Reject malformed, reversed or out-of-bound numeric ranges. Return zero-based physical indexes.
Why this case matters
Delimited interchange needs explicit framing, schema and field semantics at ingestion and emission boundaries.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
def _vary(value):
if value == '@END': return 3 + 4*N
if isinstance(value, str): return value.replace('@', 'cell' * N)
if isinstance(value, list): return [_vary(x) for x in value]
if isinstance(value, dict): return {_vary(k): _vary(v) for k,v in value.items()}
return value
N = 1
observations = []
def solve(data):
out = []
for token in data['selector'].split(','):
if token == '*':
out.extend(i for i in range(data['width']) if i not in out)
continue
parts = token.split('-')
if len(parts) not in (1,2) or any(not p.isascii() or not p.isdecimal() for p in parts): return None
start, end = int(parts[0]), int(parts[-1])
if not 1 <= start <= end <= data['width']: return None
out.extend(range(start-1, end))
return list(dict.fromkeys(out))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('ordered', solve(_vary({'selector': '3,1', 'width': 3})), _vary([2, 0]))
check('range', solve(_vary({'selector': '2-4', 'width': 4})), _vary([1, 2, 3]))
check('wildcard', solve(_vary({'selector': '2,*', 'width': 3})), _vary([1, 0, 2]))
check('duplicate', solve(_vary({'selector': '2,2', 'width': 3})), _vary([1, 1]))
check('reversed', solve(_vary({'selector': '3-1', 'width': 3})), _vary(None))
check('zero', solve(_vary({'selector': '0', 'width': 3})), _vary(None))
check('outside', solve(_vary({'selector': '4', 'width': 3})), _vary(None))
check('bad range', solve(_vary({'selector': '1-2-3', 'width': 3})), _vary(None))
check('empty', solve(_vary({'selector': '', 'width': 3})), _vary(None))
check('variable width', solve(_vary({'selector': '1,*', 'width': 4})), _vary([0, 1, 2, 3]))
check('variant selector width', solve({'selector':'1,*','width':N+2}), list(range(N+2)))
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| ordered | [2, 0] | [2, 0] | Passed |
| range | [1, 2, 3] | [1, 2, 3] | Passed |
| wildcard | [1, 0, 2] | [1, 0, 2] | Passed |
| duplicate | [1] | [1, 1] | Failed |
| reversed | None | None | Passed |
| zero | None | None | Passed |
| outside | None | None | Passed |
| bad range | None | None | Passed |
| empty | None | None | Passed |
| variable width | [0, 1, 2, 3] | [0, 1, 2, 3] | Passed |
| variant selector width | [0, 1, 2] | [0, 1, 2] | Passed |
SHA-256 / 8703d4316a65dff7cdd7c6d332d47d3a243225cb4373f432160e623ba0c0b844
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
def _vary(value):
if value == '@END': return 3 + 4*N
if isinstance(value, str): return value.replace('@', 'cell' * N)
if isinstance(value, list): return [_vary(x) for x in value]
if isinstance(value, dict): return {_vary(k): _vary(v) for k,v in value.items()}
return value
N = 1
observations = []
def solve(data):
out = []
for token in data['selector'].split(','):
if token == '*':
out.extend(i for i in range(data['width']) if i not in out)
continue
parts = token.split('-')
if len(parts) not in (1,2) or any(not p.isascii() or not p.isdecimal() for p in parts): return None
start, end = int(parts[0]), int(parts[-1])
if not 1 <= start <= end <= data['width']: return None
out.extend(range(start-1, end))
return sorted(set(out))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('ordered', solve(_vary({'selector': '3,1', 'width': 3})), _vary([2, 0]))
check('range', solve(_vary({'selector': '2-4', 'width': 4})), _vary([1, 2, 3]))
check('wildcard', solve(_vary({'selector': '2,*', 'width': 3})), _vary([1, 0, 2]))
check('duplicate', solve(_vary({'selector': '2,2', 'width': 3})), _vary([1, 1]))
check('reversed', solve(_vary({'selector': '3-1', 'width': 3})), _vary(None))
check('zero', solve(_vary({'selector': '0', 'width': 3})), _vary(None))
check('outside', solve(_vary({'selector': '4', 'width': 3})), _vary(None))
check('bad range', solve(_vary({'selector': '1-2-3', 'width': 3})), _vary(None))
check('empty', solve(_vary({'selector': '', 'width': 3})), _vary(None))
check('variable width', solve(_vary({'selector': '1,*', 'width': 4})), _vary([0, 1, 2, 3]))
check('variant selector width', solve({'selector':'1,*','width':N+2}), list(range(N+2)))
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| ordered | [0, 2] | [2, 0] | Failed |
| range | [1, 2, 3] | [1, 2, 3] | Passed |
| wildcard | [0, 1, 2] | [1, 0, 2] | Failed |
| duplicate | [1] | [1, 1] | Failed |
| reversed | None | None | Passed |
| zero | None | None | Passed |
| outside | None | None | Passed |
| bad range | None | None | Passed |
| empty | None | None | Passed |
| variable width | [0, 1, 2, 3] | [0, 1, 2, 3] | Passed |
| variant selector width | [0, 1, 2] | [0, 1, 2] | Passed |
SHA-256 / 865429da65dc9815438dfedd2e4247420d4d3a053d0f54c3455f91e20aee5f0f
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
def _vary(value):
if value == '@END': return 3 + 4*N
if isinstance(value, str): return value.replace('@', 'cell' * N)
if isinstance(value, list): return [_vary(x) for x in value]
if isinstance(value, dict): return {_vary(k): _vary(v) for k,v in value.items()}
return value
N = 1
observations = []
def solve(data):
out = []
for token in data['selector'].split(','):
if token == '*':
out.extend(i for i in range(data['width']) if i not in out)
continue
parts = token.split('-')
if len(parts) not in (1,2) or any(not p.isascii() or not p.isdecimal() for p in parts): return None
start, end = int(parts[0]), int(parts[-1])
if not 1 <= start <= end <= data['width']: return None
out.extend(range(start-1, end))
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('ordered', solve(_vary({'selector': '3,1', 'width': 3})), _vary([2, 0]))
check('range', solve(_vary({'selector': '2-4', 'width': 4})), _vary([1, 2, 3]))
check('wildcard', solve(_vary({'selector': '2,*', 'width': 3})), _vary([1, 0, 2]))
check('duplicate', solve(_vary({'selector': '2,2', 'width': 3})), _vary([1, 1]))
check('reversed', solve(_vary({'selector': '3-1', 'width': 3})), _vary(None))
check('zero', solve(_vary({'selector': '0', 'width': 3})), _vary(None))
check('outside', solve(_vary({'selector': '4', 'width': 3})), _vary(None))
check('bad range', solve(_vary({'selector': '1-2-3', 'width': 3})), _vary(None))
check('empty', solve(_vary({'selector': '', 'width': 3})), _vary(None))
check('variable width', solve(_vary({'selector': '1,*', 'width': 4})), _vary([0, 1, 2, 3]))
check('variant selector width', solve({'selector':'1,*','width':N+2}), list(range(N+2)))
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| ordered | [2, 0] | [2, 0] | Passed |
| range | [1, 2, 3] | [1, 2, 3] | Passed |
| wildcard | [1, 0, 2] | [1, 0, 2] | Passed |
| duplicate | [1, 1] | [1, 1] | Passed |
| reversed | None | None | Passed |
| zero | None | None | Passed |
| outside | None | None | Passed |
| bad range | None | None | Passed |
| empty | None | None | Passed |
| variable width | [0, 1, 2, 3] | [0, 1, 2, 3] | Passed |
| variant selector width | [0, 1, 2] | [0, 1, 2] | Passed |
SHA-256 / 74afbb7e06e63c43d3bbd867097175cfafa89b4a57bf8a1323f72da59acdf1c5
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:44:46.155781+00:00.
Case digest / e507edcd9ee47d6e0cc94f3e52f1391f556f4f9c31c1e01b252e71207537bf9c