FA-47916 / Delimited text / Open access
A wildcard reselects columns already named explicitly · case 01
A structured table violates the declared record or column contract.
ROOT CAUSE
Wildcard expansion does not exclude previously selected physical columns.
VERIFIED REPAIR
Preserve the named invariant at the faulty decision: out.extend(i for i in range(data['width']) if i not in out)
Unsuccessful approach: Excluding only the most recent index misses earlier explicit selections.
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(range(data['width']))
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, 1, 2] | [1, 0, 2] | Failed |
| 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, 0, 1, 2, 3] | [0, 1, 2, 3] | Failed |
| variant selector width | [0, 0, 1, 2] | [0, 1, 2] | Failed |
SHA-256 / 288802f65ba5066ad8a375527297cdd9197353ddc92f1230e976bd0ddbce6ad5
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 != out[-1])
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, 1, 2] | [1, 0, 2] | Failed |
| 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 / 2706e3d7b516f805d9f11af514d329dea6dbc29aa94d7962dcad51b85bed7076
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.037014+00:00.
Case digest / e67b0f978464a8a3de9c3a41b92c292b35b5d0020094c2e6b7db86b8a13c4319