FA-80586 / Bidirectional text layout / Open access
Bracket pair identification: mismatched closer search · case 01
A closer that does not match the top opener is dropped although its opener is deeper.
ROOT CAUSE
Only the top of the stack is compared with the closer.
VERIFIED REPAIR
Search down the stack and discard entries above the match.
Unsuccessful approach: Deleting only the matched entry leaves stale openers above it.
Case contract
Input [text, classes, stack limit]. Only characters of class ON take part. Openers ( [ { are pushed; on overflow of the stack limit stop and keep pairs found so far. A closer searches the stack from the top for its opener; if found it pairs and discards that entry and everything above; otherwise it is ignored. Return pairs sorted by opener.
Why this case matters
Mixed right-to-left and left-to-right text must resolve levels and visual order exactly, or words, numbers and carets land in the wrong place.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
text, classes, limit = x
OPEN = {'(': ')', '[': ']', '{': '}'}
CLOSE = {')', ']', '}'}
stack = []
pairs = []
for i, ch in enumerate(text):
if classes[i] != 'ON':
continue
if ch in OPEN:
if len(stack) >= limit:
break
stack.append((OPEN[ch], i))
elif ch in CLOSE:
if stack and stack[-1][0] == ch:
pairs.append([stack[-1][1], i])
stack.pop()
return sorted(pairs)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['(][}([())}}(]', ['ON', 'ON', 'L', 'ON', 'R', 'ON', 'L', 'R', 'ON', 'ON', 'R', 'ON', 'ON'], 3], [[0, 8]]), ('regression: mismatched closer search', ['a([{][[}()]()(', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON'], 4], [[1, 12], [2, 4], [8, 9]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['a](((', ['L', 'L', 'ON', 'R', 'ON'], 3], []), ('control layout', ['a([([', ['R', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['(a)a)[(]{(]}a)', ['ON', 'R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'L', 'L', 'ON'], 3], [[0, 2], [5, 7]]), ('regression: mismatched closer search', ['{][{(a}([{(({', ['ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON'], 4], [[3, 6]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['[a[(}](][(){)', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('control layout', ['{}]]a(', ['ON', 'ON', 'R', 'ON', 'R', 'ON'], 4], [[0, 1]])], [('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['{[(]aa)a][', ['ON', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON', 'L'], 3], [[1, 3]]), ('regression: mismatched closer search', ['{(}){aa{(', ['ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON', 'ON'], 3], [[0, 2]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['(a', ['ON', 'L'], 3], []), ('control layout', ['[(', ['ON', 'ON'], 2], [])], [('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['[a{({)', ['ON', 'L', 'ON', 'ON', 'ON', 'ON'], 4], [[3, 5]]), ('regression: mismatched closer search', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('regression: mismatched closer search', ['a{({[}}]]((', ['L', 'R', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[3, 5]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['(}(', ['ON', 'ON', 'L'], 1], []), ('control layout', [')([()[]a((})', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['}(}}[))}', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 4], [[1, 5]]), ('regression: mismatched closer search', ['{(}{(', ['ON', 'ON', 'ON', 'R', 'ON'], 3], [[0, 2]]), ('regression: mismatched closer search', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: mismatched closer search', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 4], [])]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(args), expected)
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 |
|---|---|---|---|
| mismatched inner bracket | [[1, 3]] | [[0, 2]] | Failed |
| regression: mismatched closer search | [] | [[0, 2], [3, 7], [8, 9]] | Failed |
| regression: mismatched closer search | [] | [[0, 8]] | Failed |
| regression: mismatched closer search | [] | [[1, 12], [2, 4], [8, 9]] | Failed |
| stack overflow stops | [] | [] | Passed |
| overridden bracket ignored | [] | [] | Passed |
| control layout | [] | [] | Passed |
| control layout | [] | [] | Passed |
SHA-256 / 33de3930bcc0c2e79f77d5e2f939199aeaad2864d08a9f69857a3c2d93455860
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
text, classes, limit = x
OPEN = {'(': ')', '[': ']', '{': '}'}
CLOSE = {')', ']', '}'}
stack = []
pairs = []
for i, ch in enumerate(text):
if classes[i] != 'ON':
continue
if ch in OPEN:
if len(stack) >= limit:
break
stack.append((OPEN[ch], i))
elif ch in CLOSE:
for k in range(len(stack) - 1, -1, -1):
if stack[k][0] == ch:
pairs.append([stack[k][1], i])
del stack[k]
break
return sorted(pairs)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['(][}([())}}(]', ['ON', 'ON', 'L', 'ON', 'R', 'ON', 'L', 'R', 'ON', 'ON', 'R', 'ON', 'ON'], 3], [[0, 8]]), ('regression: mismatched closer search', ['a([{][[}()]()(', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON'], 4], [[1, 12], [2, 4], [8, 9]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['a](((', ['L', 'L', 'ON', 'R', 'ON'], 3], []), ('control layout', ['a([([', ['R', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['(a)a)[(]{(]}a)', ['ON', 'R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'L', 'L', 'ON'], 3], [[0, 2], [5, 7]]), ('regression: mismatched closer search', ['{][{(a}([{(({', ['ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON'], 4], [[3, 6]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['[a[(}](][(){)', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('control layout', ['{}]]a(', ['ON', 'ON', 'R', 'ON', 'R', 'ON'], 4], [[0, 1]])], [('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['{[(]aa)a][', ['ON', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON', 'L'], 3], [[1, 3]]), ('regression: mismatched closer search', ['{(}){aa{(', ['ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON', 'ON'], 3], [[0, 2]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['(a', ['ON', 'L'], 3], []), ('control layout', ['[(', ['ON', 'ON'], 2], [])], [('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['[a{({)', ['ON', 'L', 'ON', 'ON', 'ON', 'ON'], 4], [[3, 5]]), ('regression: mismatched closer search', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('regression: mismatched closer search', ['a{({[}}]]((', ['L', 'R', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[3, 5]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['(}(', ['ON', 'ON', 'L'], 1], []), ('control layout', [')([()[]a((})', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['}(}}[))}', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 4], [[1, 5]]), ('regression: mismatched closer search', ['{(}{(', ['ON', 'ON', 'ON', 'R', 'ON'], 3], [[0, 2]]), ('regression: mismatched closer search', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: mismatched closer search', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 4], [])]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(args), expected)
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 |
|---|---|---|---|
| mismatched inner bracket | [[0, 2], [1, 3]] | [[0, 2]] | Failed |
| regression: mismatched closer search | [[0, 2], [1, 4], [3, 7], [8, 9]] | [[0, 2], [3, 7], [8, 9]] | Failed |
| regression: mismatched closer search | [[0, 8], [5, 12]] | [[0, 8]] | Failed |
| regression: mismatched closer search | [[1, 12], [2, 4], [3, 7], [8, 9]] | [[1, 12], [2, 4], [8, 9]] | Failed |
| stack overflow stops | [] | [] | Passed |
| overridden bracket ignored | [] | [] | Passed |
| control layout | [] | [] | Passed |
| control layout | [] | [] | Passed |
SHA-256 / dd4e8b9fcc567f0c90314e58b659543d0e576586815b99b527be72f9ae4c14ed
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
text, classes, limit = x
OPEN = {'(': ')', '[': ']', '{': '}'}
CLOSE = {')', ']', '}'}
stack = []
pairs = []
for i, ch in enumerate(text):
if classes[i] != 'ON':
continue
if ch in OPEN:
if len(stack) >= limit:
break
stack.append((OPEN[ch], i))
elif ch in CLOSE:
for k in range(len(stack) - 1, -1, -1):
if stack[k][0] == ch:
pairs.append([stack[k][1], i])
del stack[k:]
break
return sorted(pairs)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['(][}([())}}(]', ['ON', 'ON', 'L', 'ON', 'R', 'ON', 'L', 'R', 'ON', 'ON', 'R', 'ON', 'ON'], 3], [[0, 8]]), ('regression: mismatched closer search', ['a([{][[}()]()(', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON'], 4], [[1, 12], [2, 4], [8, 9]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['a](((', ['L', 'L', 'ON', 'R', 'ON'], 3], []), ('control layout', ['a([([', ['R', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['(a)a)[(]{(]}a)', ['ON', 'R', 'ON', 'R', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'L', 'L', 'ON'], 3], [[0, 2], [5, 7]]), ('regression: mismatched closer search', ['{][{(a}([{(({', ['ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON'], 4], [[3, 6]]), ('regression: mismatched closer search', ['[(]{)][}()(', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], [[0, 2], [3, 7], [8, 9]]), ('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['[a[(}](][(){)', ['L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'L', 'ON'], 1], []), ('control layout', ['{}]]a(', ['ON', 'ON', 'R', 'ON', 'R', 'ON'], 4], [[0, 1]])], [('regression: mismatched closer search', ['{({]{{()(}[', ['R', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'ON', 'R'], 4], [[1, 7]]), ('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['{[(]aa)a][', ['ON', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON', 'L'], 3], [[1, 3]]), ('regression: mismatched closer search', ['{(}){aa{(', ['ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON', 'ON'], 3], [[0, 2]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['(a', ['ON', 'L'], 3], []), ('control layout', ['[(', ['ON', 'ON'], 2], [])], [('regression: mismatched closer search', [']}))]{(}]))]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[5, 7]]), ('regression: mismatched closer search', ['[a{({)', ['ON', 'L', 'ON', 'ON', 'ON', 'ON'], 4], [[3, 5]]), ('regression: mismatched closer search', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('regression: mismatched closer search', ['a{({[}}]]((', ['L', 'R', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], 4], [[3, 5]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', ['(}(', ['ON', 'ON', 'L'], 1], []), ('control layout', [')([()[]a((})', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON'], 1], [])], [('regression: mismatched closer search', ['}(}}[))}', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 4], [[1, 5]]), ('regression: mismatched closer search', ['{(}{(', ['ON', 'ON', 'ON', 'R', 'ON'], 3], [[0, 2]]), ('regression: mismatched closer search', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: mismatched closer search', [']({(}{()a}(})a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'L', 'ON', 'ON', 'ON', 'R'], 4], [[1, 12], [2, 4], [5, 11]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', ['{({{{{}a((a', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'L'], 2], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 4], [])]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(args), expected)
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 |
|---|---|---|---|
| mismatched inner bracket | [[0, 2]] | [[0, 2]] | Passed |
| regression: mismatched closer search | [[0, 2], [3, 7], [8, 9]] | [[0, 2], [3, 7], [8, 9]] | Passed |
| regression: mismatched closer search | [[0, 8]] | [[0, 8]] | Passed |
| regression: mismatched closer search | [[1, 12], [2, 4], [8, 9]] | [[1, 12], [2, 4], [8, 9]] | Passed |
| stack overflow stops | [] | [] | Passed |
| overridden bracket ignored | [] | [] | Passed |
| control layout | [] | [] | Passed |
| control layout | [] | [] | Passed |
SHA-256 / 119751443ca62baf17980210dce2cc0c62d4b46de55ae08676f6da311edae15e
Verification & scope
A deterministic toy bidi model over stipulated class labels and integer levels; it is inspired by, but does not claim conformance to, any published algorithm. 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:49:55.410048+00:00.
Case digest / fdc738c6dd11f51c8d694bc252f0618d50b60475af76beb377bf2ff63007dff0