FA-48106 / Delimited text / Open access
Default application coerces structured values to text · case 01
A structured table violates the declared record or column contract.
ROOT CAUSE
Typed schema defaults are passed through the text-cell conversion path.
VERIFIED REPAIR
Preserve the named invariant at the faulty decision: else: out.append(data['defaults'][i])
Unsuccessful approach: Special-casing null still stringifies structured defaults.
Case contract
Bind a two-column comma row to [a,b] with per-column defaults. An absent cell uses its default only if its required flag is false; a present empty cell stays empty. Surplus cells reject. Return ordered values. Defaults may be null or lists and must remain typed.
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):
values = data['row'].split(',')
if len(values) > 2: return None
out = []
for i in range(2):
if i < len(values): out.append(values[i])
elif data['required'][i]: return None
else: out.append(str(data['defaults'][i]))
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('missing optional', solve(_vary({'row': '@', 'required': [True, False], 'defaults': ['x', 'y']})), _vary(['@', 'y']))
check('present empty', solve(_vary({'row': '@,', 'required': [True, False], 'defaults': ['x', 'y']})), _vary(['@', '']))
check('missing required', solve(_vary({'row': '@', 'required': [False, True], 'defaults': ['x', 'y']})), _vary(None))
check('typed default', solve(_vary({'row': '@', 'required': [False, False], 'defaults': [0, [1, 2]]})), _vary(['@', [1, 2]]))
check('null default', solve(_vary({'row': '@', 'required': [False, False], 'defaults': [0, None]})), _vary(['@', None]))
check('extra', solve(_vary({'row': 'a,b,c', 'required': [False, False], 'defaults': [0, 1]})), _vary(None))
check('both present', solve(_vary({'row': '@,z', 'required': [True, True], 'defaults': [0, 1]})), _vary(['@', 'z']))
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 |
|---|---|---|---|
| missing optional | ['cell', 'y'] | ['cell', 'y'] | Passed |
| present empty | ['cell', ''] | ['cell', ''] | Passed |
| missing required | None | None | Passed |
| typed default | ['cell', '[1, 2]'] | ['cell', [1, 2]] | Failed |
| null default | ['cell', 'None'] | ['cell', None] | Failed |
| extra | None | None | Passed |
| both present | ['cell', 'z'] | ['cell', 'z'] | Passed |
SHA-256 / 4a1f93a449bc405e1db58477b7c3dd148ada1e8cbbaac79099d6faa72e4811a4
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):
values = data['row'].split(',')
if len(values) > 2: return None
out = []
for i in range(2):
if i < len(values): out.append(values[i])
elif data['required'][i]: return None
else: out.append('' if data['defaults'][i] is None else str(data['defaults'][i]))
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('missing optional', solve(_vary({'row': '@', 'required': [True, False], 'defaults': ['x', 'y']})), _vary(['@', 'y']))
check('present empty', solve(_vary({'row': '@,', 'required': [True, False], 'defaults': ['x', 'y']})), _vary(['@', '']))
check('missing required', solve(_vary({'row': '@', 'required': [False, True], 'defaults': ['x', 'y']})), _vary(None))
check('typed default', solve(_vary({'row': '@', 'required': [False, False], 'defaults': [0, [1, 2]]})), _vary(['@', [1, 2]]))
check('null default', solve(_vary({'row': '@', 'required': [False, False], 'defaults': [0, None]})), _vary(['@', None]))
check('extra', solve(_vary({'row': 'a,b,c', 'required': [False, False], 'defaults': [0, 1]})), _vary(None))
check('both present', solve(_vary({'row': '@,z', 'required': [True, True], 'defaults': [0, 1]})), _vary(['@', 'z']))
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 |
|---|---|---|---|
| missing optional | ['cell', 'y'] | ['cell', 'y'] | Passed |
| present empty | ['cell', ''] | ['cell', ''] | Passed |
| missing required | None | None | Passed |
| typed default | ['cell', '[1, 2]'] | ['cell', [1, 2]] | Failed |
| null default | ['cell', ''] | ['cell', None] | Failed |
| extra | None | None | Passed |
| both present | ['cell', 'z'] | ['cell', 'z'] | Passed |
SHA-256 / 565278616489732ce736b99d7440c60d9cf404eb8d132383e89891c74d70c1c1
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):
values = data['row'].split(',')
if len(values) > 2: return None
out = []
for i in range(2):
if i < len(values): out.append(values[i])
elif data['required'][i]: return None
else: out.append(data['defaults'][i])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('missing optional', solve(_vary({'row': '@', 'required': [True, False], 'defaults': ['x', 'y']})), _vary(['@', 'y']))
check('present empty', solve(_vary({'row': '@,', 'required': [True, False], 'defaults': ['x', 'y']})), _vary(['@', '']))
check('missing required', solve(_vary({'row': '@', 'required': [False, True], 'defaults': ['x', 'y']})), _vary(None))
check('typed default', solve(_vary({'row': '@', 'required': [False, False], 'defaults': [0, [1, 2]]})), _vary(['@', [1, 2]]))
check('null default', solve(_vary({'row': '@', 'required': [False, False], 'defaults': [0, None]})), _vary(['@', None]))
check('extra', solve(_vary({'row': 'a,b,c', 'required': [False, False], 'defaults': [0, 1]})), _vary(None))
check('both present', solve(_vary({'row': '@,z', 'required': [True, True], 'defaults': [0, 1]})), _vary(['@', 'z']))
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 |
|---|---|---|---|
| missing optional | ['cell', 'y'] | ['cell', 'y'] | Passed |
| present empty | ['cell', ''] | ['cell', ''] | Passed |
| missing required | None | None | Passed |
| typed default | ['cell', [1, 2]] | ['cell', [1, 2]] | Passed |
| null default | ['cell', None] | ['cell', None] | Passed |
| extra | None | None | Passed |
| both present | ['cell', 'z'] | ['cell', 'z'] | Passed |
SHA-256 / f801dbaa204d403ef7cce6a57d5ee283120fddf28c218c32fcb182f32d2c5088
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:47.696555+00:00.
Case digest / 5f968dc3f16ef339640551587d28cefa83090f4c1b5d35d13de68b4f4174ff5d