FA-216 / Parsing / Open access
A separator inside nested brackets splits the outer list · case 01
A comma inside a nested expression becomes a top-level boundary, or mismatched brackets pass unchecked.
ROOT CAUSE
The implementation splits raw text or counts only one kind of bracket without a typed nesting stack.
VERIFIED REPAIR
Track matching opening brackets and split only when the stack is empty; reject malformed nesting.
Unsuccessful approach: Counting parentheses misses square/curly nesting and cannot verify matching bracket types.
Case contract
Split a comma-separated expression into trimmed top-level fields using (), [], and {} nesting. Preserve empty fields, return [] for an empty string, and return None for mismatched or unclosed brackets. Quotes and escapes have no special meaning in this restricted grammar.
Why this case matters
Command and configuration mini-languages often embed collections inside argument lists. Typed nesting is needed even before adding full expression parsing.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(text):
return [part.strip() for part in text.split(',')] if text else []
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
nested = '(' * N + 'a,b' + ')' * N
check('nested parentheses', solve(nested + ',tail'), [nested, 'tail'])
check('square brackets', solve('[a,b],tail'), ['[a,b]', 'tail'])
check('mixed nested bracket types', solve('{a,[b,(c,d)]},tail'), ['{a,[b,(c,d)]}', 'tail'])
check('mismatched closer rejected', solve('([a,b)],tail'), None)
check('unclosed nesting rejected', solve('[' * N + 'a,b'), None)
check('unexpected closing bracket rejected', solve('a],tail'), None)
check('whitespace and empty fields', solve(' a , ,b '), ['a', '', 'b'])
check('empty list source', solve(''), [])
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 |
|---|---|---|---|
| nested parentheses | ['(a', 'b)', 'tail'] | ['(a,b)', 'tail'] | Failed |
| square brackets | ['[a', 'b]', 'tail'] | ['[a,b]', 'tail'] | Failed |
| mixed nested bracket types | ['{a', '[b', '(c', 'd)]}', 'tail'] | ['{a,[b,(c,d)]}', 'tail'] | Failed |
| mismatched closer rejected | ['([a', 'b)]', 'tail'] | None | Failed |
| unclosed nesting rejected | ['[a', 'b'] | None | Failed |
| unexpected closing bracket rejected | ['a]', 'tail'] | None | Failed |
| whitespace and empty fields | ['a', '', 'b'] | ['a', '', 'b'] | Passed |
| empty list source | [] | [] | Passed |
SHA-256 / caf013b20c3d368ceea7f154423121b102aadcf93660f27bc922e8a6fa4399b1
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(text):
if not text:
return []
fields, current, depth = [], [], 0
for char in text:
depth += (char == '(') - (char == ')')
if char == ',' and depth == 0:
fields.append(''.join(current).strip())
current = []
else:
current.append(char)
return fields + [''.join(current).strip()]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
nested = '(' * N + 'a,b' + ')' * N
check('nested parentheses', solve(nested + ',tail'), [nested, 'tail'])
check('square brackets', solve('[a,b],tail'), ['[a,b]', 'tail'])
check('mixed nested bracket types', solve('{a,[b,(c,d)]},tail'), ['{a,[b,(c,d)]}', 'tail'])
check('mismatched closer rejected', solve('([a,b)],tail'), None)
check('unclosed nesting rejected', solve('[' * N + 'a,b'), None)
check('unexpected closing bracket rejected', solve('a],tail'), None)
check('whitespace and empty fields', solve(' a , ,b '), ['a', '', 'b'])
check('empty list source', solve(''), [])
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 |
|---|---|---|---|
| nested parentheses | ['(a,b)', 'tail'] | ['(a,b)', 'tail'] | Passed |
| square brackets | ['[a', 'b]', 'tail'] | ['[a,b]', 'tail'] | Failed |
| mixed nested bracket types | ['{a', '[b', '(c,d)]}', 'tail'] | ['{a,[b,(c,d)]}', 'tail'] | Failed |
| mismatched closer rejected | ['([a,b)]', 'tail'] | None | Failed |
| unclosed nesting rejected | ['[a', 'b'] | None | Failed |
| unexpected closing bracket rejected | ['a]', 'tail'] | None | Failed |
| whitespace and empty fields | ['a', '', 'b'] | ['a', '', 'b'] | Passed |
| empty list source | [] | [] | Passed |
SHA-256 / 32b9a384389854fe52f854e3abdda02adf143b782c4b257ad16dab66a0cf1f31
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(text):
if not text:
return []
pairs = {')': '(', ']': '[', '}': '{'}
stack, fields, current = [], [], []
for char in text:
if char in '([{':
stack.append(char)
elif char in pairs:
if not stack or stack.pop() != pairs[char]:
return None
if char == ',' and not stack:
fields.append(''.join(current).strip())
current = []
else:
current.append(char)
return None if stack else fields + [''.join(current).strip()]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
nested = '(' * N + 'a,b' + ')' * N
check('nested parentheses', solve(nested + ',tail'), [nested, 'tail'])
check('square brackets', solve('[a,b],tail'), ['[a,b]', 'tail'])
check('mixed nested bracket types', solve('{a,[b,(c,d)]},tail'), ['{a,[b,(c,d)]}', 'tail'])
check('mismatched closer rejected', solve('([a,b)],tail'), None)
check('unclosed nesting rejected', solve('[' * N + 'a,b'), None)
check('unexpected closing bracket rejected', solve('a],tail'), None)
check('whitespace and empty fields', solve(' a , ,b '), ['a', '', 'b'])
check('empty list source', solve(''), [])
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 |
|---|---|---|---|
| nested parentheses | ['(a,b)', 'tail'] | ['(a,b)', 'tail'] | Passed |
| square brackets | ['[a,b]', 'tail'] | ['[a,b]', 'tail'] | Passed |
| mixed nested bracket types | ['{a,[b,(c,d)]}', 'tail'] | ['{a,[b,(c,d)]}', 'tail'] | Passed |
| mismatched closer rejected | None | None | Passed |
| unclosed nesting rejected | None | None | Passed |
| unexpected closing bracket rejected | None | None | Passed |
| whitespace and empty fields | ['a', '', 'b'] | ['a', '', 'b'] | Passed |
| empty list source | [] | [] | Passed |
SHA-256 / e5b89860b5602c2bdbfe726f3a49e73748711cd920254df6afdff26eb6e5e6ef
Verification & scope
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:36:51.490605+00:00.
Case digest / d7daed21fcdd766d4601e875d65465b97257de414bfc53444882564ee360a3e8