FAILURE MAP
← Case archive

FA-47461 / Delimited text / Open access

Ordinary null-aware cells are normalized destructively · case 01

A structured table violates the declared record or column contract.

Verified by executionVariant 1 · 10 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Normalization changes values after marker recognition.

VERIFIED REPAIR

Preserve the named invariant at the faulty decision: else: out.append(text)

Unsuccessful approach: Changing case rather than spaces still corrupts ordinary cell text.

Case contract

Read already lexed cells represented as [text, was_quoted]. Only unquoted NULL is null. An unquoted empty cell is absent, encoded as {missing:True}; quoted empties are empty strings. Unquoted !DEFAULT expands to supplied default. Ordinary whitespace is significant.

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 text, quoted in data['cells']:
        if not quoted and text == 'NULL': out.append(None)
        elif not quoted and text == '': out.append({'missing': True})
        elif not quoted and text == '!DEFAULT': out.append(data['default'])
        else: out.append(text.strip())
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('null origin', solve(_vary({'cells': [['NULL', False], ['NULL', True]], 'default': '@'})), _vary([None, 'NULL']))
check('empty origin', solve(_vary({'cells': [['', False], ['', True]], 'default': '@'})), _vary([{'missing': True}, '']))
check('default origin', solve(_vary({'cells': [['!DEFAULT', False], ['!DEFAULT', True]], 'default': '@'})), _vary(['@', '!DEFAULT']))
check('spaces', solve(_vary({'cells': [[' NULL ', False], [' ', True]], 'default': '@'})), _vary([' NULL ', ' ']))
check('case', solve(_vary({'cells': [['null', False]], 'default': '@'})), _vary(['null']))
check('normal', solve(_vary({'cells': [['@', False]], 'default': 'z'})), _vary(['@']))
check('no columns', solve(_vary({'cells': [], 'default': '@'})), _vary([]))
check('bare space', solve(_vary({'cells': [[' ', False]], 'default': '@'})), _vary([' ']))
check('unknown directive', solve(_vary({'cells': [['!hello', False]], 'default': '@'})), _vary(['!hello']))
check('typed default', solve(_vary({'cells': [['!DEFAULT', False]], 'default': 7})), _vary([7]))
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 fixtureActualExpectedOutcome
null origin[None, 'NULL'][None, 'NULL']Passed
empty origin[{'missing': True}, ''][{'missing': True}, '']Passed
default origin['cell', '!DEFAULT']['cell', '!DEFAULT']Passed
spaces['NULL', ''][' NULL ', ' ']Failed
case['null']['null']Passed
normal['cell']['cell']Passed
no columns[][]Passed
bare space[''][' ']Failed
unknown directive['!hello']['!hello']Passed
typed default[7][7]Passed

SHA-256 / 175e4ab2a9d0131e07b8f4a20438bf1a0a4d08b84f78c9e027d05a1270643973

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 text, quoted in data['cells']:
        if not quoted and text == 'NULL': out.append(None)
        elif not quoted and text == '': out.append({'missing': True})
        elif not quoted and text == '!DEFAULT': out.append(data['default'])
        else: out.append(text.lower())
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('null origin', solve(_vary({'cells': [['NULL', False], ['NULL', True]], 'default': '@'})), _vary([None, 'NULL']))
check('empty origin', solve(_vary({'cells': [['', False], ['', True]], 'default': '@'})), _vary([{'missing': True}, '']))
check('default origin', solve(_vary({'cells': [['!DEFAULT', False], ['!DEFAULT', True]], 'default': '@'})), _vary(['@', '!DEFAULT']))
check('spaces', solve(_vary({'cells': [[' NULL ', False], [' ', True]], 'default': '@'})), _vary([' NULL ', ' ']))
check('case', solve(_vary({'cells': [['null', False]], 'default': '@'})), _vary(['null']))
check('normal', solve(_vary({'cells': [['@', False]], 'default': 'z'})), _vary(['@']))
check('no columns', solve(_vary({'cells': [], 'default': '@'})), _vary([]))
check('bare space', solve(_vary({'cells': [[' ', False]], 'default': '@'})), _vary([' ']))
check('unknown directive', solve(_vary({'cells': [['!hello', False]], 'default': '@'})), _vary(['!hello']))
check('typed default', solve(_vary({'cells': [['!DEFAULT', False]], 'default': 7})), _vary([7]))
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 fixtureActualExpectedOutcome
null origin[None, 'null'][None, 'NULL']Failed
empty origin[{'missing': True}, ''][{'missing': True}, '']Passed
default origin['cell', '!default']['cell', '!DEFAULT']Failed
spaces[' null ', ' '][' NULL ', ' ']Failed
case['null']['null']Passed
normal['cell']['cell']Passed
no columns[][]Passed
bare space[' '][' ']Passed
unknown directive['!hello']['!hello']Passed
typed default[7][7]Passed

SHA-256 / 64cb1f1570151cc06c145a1ecd68d7b3f37f7224fbb046d4d0aa1daad5892fd3

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 text, quoted in data['cells']:
        if not quoted and text == 'NULL': out.append(None)
        elif not quoted and text == '': out.append({'missing': True})
        elif not quoted and text == '!DEFAULT': out.append(data['default'])
        else: out.append(text)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('null origin', solve(_vary({'cells': [['NULL', False], ['NULL', True]], 'default': '@'})), _vary([None, 'NULL']))
check('empty origin', solve(_vary({'cells': [['', False], ['', True]], 'default': '@'})), _vary([{'missing': True}, '']))
check('default origin', solve(_vary({'cells': [['!DEFAULT', False], ['!DEFAULT', True]], 'default': '@'})), _vary(['@', '!DEFAULT']))
check('spaces', solve(_vary({'cells': [[' NULL ', False], [' ', True]], 'default': '@'})), _vary([' NULL ', ' ']))
check('case', solve(_vary({'cells': [['null', False]], 'default': '@'})), _vary(['null']))
check('normal', solve(_vary({'cells': [['@', False]], 'default': 'z'})), _vary(['@']))
check('no columns', solve(_vary({'cells': [], 'default': '@'})), _vary([]))
check('bare space', solve(_vary({'cells': [[' ', False]], 'default': '@'})), _vary([' ']))
check('unknown directive', solve(_vary({'cells': [['!hello', False]], 'default': '@'})), _vary(['!hello']))
check('typed default', solve(_vary({'cells': [['!DEFAULT', False]], 'default': 7})), _vary([7]))
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 fixtureActualExpectedOutcome
null origin[None, 'NULL'][None, 'NULL']Passed
empty origin[{'missing': True}, ''][{'missing': True}, '']Passed
default origin['cell', '!DEFAULT']['cell', '!DEFAULT']Passed
spaces[' NULL ', ' '][' NULL ', ' ']Passed
case['null']['null']Passed
normal['cell']['cell']Passed
no columns[][]Passed
bare space[' '][' ']Passed
unknown directive['!hello']['!hello']Passed
typed default[7][7]Passed

SHA-256 / b98970a593fb05d078fcc9fdc54c8292a657af691f44a73438939e286aaba864

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:41.755352+00:00.

Case digest / 4b2c398855c70ee976f5d53f22f6b6bbbb3ccb71bde3f5a61d50239504a5e374