FA-80606 / Bidirectional text layout / Open access
Paired bracket direction: context from updated brackets · case 01
Nested brackets ignore the resolution of their enclosing pair.
ROOT CAUSE
The preceding-context search reads the original classes instead of the updated ones.
VERIFIED REPAIR
Search the updated classes so earlier bracket resolutions count as context.
Unsuccessful approach: Looking only at the immediately preceding character misses farther context.
Case contract
Input [classes, bracket pairs, embedding level, sos]. Process pairs in opener order. Strong types inside (EN/AN count as R) matching the embedding direction set both brackets to it; if only the opposite direction is inside, use the first strong type before the opener (checking already-updated brackets; sos if none); with no strong type inside leave them. Return classes.
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):
types, pairs, level, sos = x
t = list(types)
e = 'L' if level % 2 == 0 else 'R'
def dirof(c):
if c == 'L':
return 'L'
if c in ('R', 'EN', 'AN'):
return 'R'
return None
for o, c in sorted(pairs):
inside = [dirof(t[k]) for k in range(o + 1, c)]
inside = [d for d in inside if d]
if not inside:
continue
if e in inside:
new = e
else:
ctx = sos
for k in range(o - 1, -1, -1):
d = dirof(types[k])
if d:
ctx = d
break
new = ctx
t[o] = new
t[c] = new
return t
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], [[1, 7], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L']), ('control layout', [['R', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'EN', 'ON', 'L', 'L'], [[1, 8], [2, 5]], 2, 'L'], ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'])], [('regression: context from updated brackets', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'L'], [[1, 6], [2, 4]], 1, 'L'], ['L', 'R', 'R', 'L', 'R', 'R', 'R', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'ON'], [[1, 7], [2, 4]], 2, 'R'], ['ON', 'L', 'L', 'R', 'L', 'ON', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['ON', 'ON', 'ON', 'R', 'L', 'ON', 'R', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'R', 'L', 'L', 'R', 'L']), ('control layout', [['R', 'R', 'EN', 'ON', 'EN', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], [[5, 10], [3, 11]], 0, 'R'], ['R', 'R', 'EN', 'R', 'EN', 'R', 'ON', 'R', 'ON', 'ON', 'R', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['EN', 'ON', 'ON', 'AN', 'ON', 'R', 'L', 'ON', 'R', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'AN', 'L', 'R', 'L', 'L', 'R', 'L']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'L', 'AN', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'AN', 'R', 'ON', 'AN'], [[6, 11]], 2, 'R'], ['R', 'L', 'AN', 'R', 'AN', 'R', 'R', 'ON', 'EN', 'AN', 'R', 'R', 'AN']), ('control layout', [['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'], [], 1, 'R'], ['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'AN', 'R', 'ON', 'L', 'EN', 'ON'], [[1, 8], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'AN', 'R', 'L', 'L', 'EN', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'L'], [[1, 6], [2, 5]], 1, 'L'], ['L', 'R', 'R', 'R', 'R', 'R', 'R', 'L']), ('control layout', [['EN', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'L', 'R'], [[1, 7], [2, 5]], 0, 'L'], ['EN', 'R', 'R', 'AN', 'ON', 'R', 'ON', 'R', 'L', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON'], [[1, 5], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'AN', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON'], [[8, 11]], 2, 'R'], ['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L'])]]
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 |
|---|---|---|---|
| nested pair uses updated outer bracket | ['R', 'L', 'R', 'R', 'R', 'L', 'L'] | ['R', 'L', 'L', 'R', 'L', 'L', 'L'] | Failed |
| regression: context from updated brackets | ['ON', 'R', 'L', 'L', 'L', 'ON', 'R', 'R'] | ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R'] | Failed |
| partial-repair probe | ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON'] | ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON'] | Passed |
| partial-repair probe | ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN'] | ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN'] | Passed |
| nested pair in RTL embedding | ['L', 'R', 'L', 'L', 'L', 'R', 'R'] | ['L', 'R', 'R', 'L', 'R', 'R', 'R'] | Failed |
| number inside brackets in RTL context | ['R', 'R', 'EN', 'R'] | ['R', 'R', 'EN', 'R'] | Passed |
| control layout | ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L'] | ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L'] | Passed |
| control layout | ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'] | ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'] | Passed |
SHA-256 / 5de2832cfe42beb7bc0d9c7f00f1ba17e7378dd407fe7164d3e4ca178d5b5119
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
types, pairs, level, sos = x
t = list(types)
e = 'L' if level % 2 == 0 else 'R'
def dirof(c):
if c == 'L':
return 'L'
if c in ('R', 'EN', 'AN'):
return 'R'
return None
for o, c in sorted(pairs):
inside = [dirof(t[k]) for k in range(o + 1, c)]
inside = [d for d in inside if d]
if not inside:
continue
if e in inside:
new = e
else:
ctx = sos
for k in range(o - 1, max(o - 2, -1), -1):
d = dirof(t[k])
if d:
ctx = d
break
new = ctx
t[o] = new
t[c] = new
return t
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], [[1, 7], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L']), ('control layout', [['R', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'EN', 'ON', 'L', 'L'], [[1, 8], [2, 5]], 2, 'L'], ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'])], [('regression: context from updated brackets', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'L'], [[1, 6], [2, 4]], 1, 'L'], ['L', 'R', 'R', 'L', 'R', 'R', 'R', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'ON'], [[1, 7], [2, 4]], 2, 'R'], ['ON', 'L', 'L', 'R', 'L', 'ON', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['ON', 'ON', 'ON', 'R', 'L', 'ON', 'R', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'R', 'L', 'L', 'R', 'L']), ('control layout', [['R', 'R', 'EN', 'ON', 'EN', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], [[5, 10], [3, 11]], 0, 'R'], ['R', 'R', 'EN', 'R', 'EN', 'R', 'ON', 'R', 'ON', 'ON', 'R', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['EN', 'ON', 'ON', 'AN', 'ON', 'R', 'L', 'ON', 'R', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'AN', 'L', 'R', 'L', 'L', 'R', 'L']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'L', 'AN', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'AN', 'R', 'ON', 'AN'], [[6, 11]], 2, 'R'], ['R', 'L', 'AN', 'R', 'AN', 'R', 'R', 'ON', 'EN', 'AN', 'R', 'R', 'AN']), ('control layout', [['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'], [], 1, 'R'], ['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'AN', 'R', 'ON', 'L', 'EN', 'ON'], [[1, 8], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'AN', 'R', 'L', 'L', 'EN', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'L'], [[1, 6], [2, 5]], 1, 'L'], ['L', 'R', 'R', 'R', 'R', 'R', 'R', 'L']), ('control layout', [['EN', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'L', 'R'], [[1, 7], [2, 5]], 0, 'L'], ['EN', 'R', 'R', 'AN', 'ON', 'R', 'ON', 'R', 'L', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON'], [[1, 5], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'AN', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON'], [[8, 11]], 2, 'R'], ['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L'])]]
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 |
|---|---|---|---|
| nested pair uses updated outer bracket | ['R', 'L', 'L', 'R', 'L', 'L', 'L'] | ['R', 'L', 'L', 'R', 'L', 'L', 'L'] | Passed |
| regression: context from updated brackets | ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R'] | ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R'] | Passed |
| partial-repair probe | ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'L', 'EN', 'R', 'L', 'R', 'L', 'ON', 'ON'] | ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON'] | Failed |
| partial-repair probe | ['ON', 'EN', 'L', 'ON', 'R', 'ON', 'AN', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'EN'] | ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN'] | Failed |
| nested pair in RTL embedding | ['L', 'R', 'R', 'L', 'R', 'R', 'R'] | ['L', 'R', 'R', 'L', 'R', 'R', 'R'] | Passed |
| number inside brackets in RTL context | ['R', 'R', 'EN', 'R'] | ['R', 'R', 'EN', 'R'] | Passed |
| control layout | ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L'] | ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L'] | Passed |
| control layout | ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'] | ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'] | Passed |
SHA-256 / 3da488210025e959acfdfdf6217ba873d345b9860e4ecf533163e53bd0f20e7a
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
types, pairs, level, sos = x
t = list(types)
e = 'L' if level % 2 == 0 else 'R'
def dirof(c):
if c == 'L':
return 'L'
if c in ('R', 'EN', 'AN'):
return 'R'
return None
for o, c in sorted(pairs):
inside = [dirof(t[k]) for k in range(o + 1, c)]
inside = [d for d in inside if d]
if not inside:
continue
if e in inside:
new = e
else:
ctx = sos
for k in range(o - 1, -1, -1):
d = dirof(t[k])
if d:
ctx = d
break
new = ctx
t[o] = new
t[c] = new
return t
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], [[1, 7], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L']), ('control layout', [['R', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'EN', 'ON', 'L', 'L'], [[1, 8], [2, 5]], 2, 'L'], ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'])], [('regression: context from updated brackets', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'L'], [[1, 6], [2, 4]], 1, 'L'], ['L', 'R', 'R', 'L', 'R', 'R', 'R', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'L', 'ON'], [[1, 7], [2, 4]], 2, 'R'], ['ON', 'L', 'L', 'R', 'L', 'ON', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('control layout', [['ON', 'ON', 'ON', 'R', 'L', 'ON', 'R', 'ON'], [[1, 7], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'R', 'L', 'L', 'R', 'L']), ('control layout', [['R', 'R', 'EN', 'ON', 'EN', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], [[5, 10], [3, 11]], 0, 'R'], ['R', 'R', 'EN', 'R', 'EN', 'R', 'ON', 'R', 'ON', 'ON', 'R', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['EN', 'ON', 'ON', 'AN', 'ON', 'R', 'L', 'ON', 'R', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'AN', 'L', 'R', 'L', 'L', 'R', 'L']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('partial-repair probe', [['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'R', 'ON', 'ON'], [[0, 1], [5, 6], [8, 10], [7, 11]], 2, 'R'], ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['R', 'L', 'AN', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'AN', 'R', 'ON', 'AN'], [[6, 11]], 2, 'R'], ['R', 'L', 'AN', 'R', 'AN', 'R', 'R', 'ON', 'EN', 'AN', 'R', 'R', 'AN']), ('control layout', [['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'], [], 1, 'R'], ['R', 'EN', 'ON', 'L', 'R', 'R', 'AN', 'ON', 'EN', 'ON'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('regression: context from updated brackets', [['ON', 'ON', 'ON', 'AN', 'R', 'ON', 'L', 'EN', 'ON'], [[1, 8], [2, 5]], 0, 'R'], ['ON', 'L', 'L', 'AN', 'R', 'L', 'L', 'EN', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'ON', 'R', 'R', 'EN', 'ON', 'ON', 'EN', 'R', 'ON', 'R', 'L', 'ON', 'ON'], [[0, 1], [6, 9]], 0, 'L'], ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'L'], [[1, 6], [2, 5]], 1, 'L'], ['L', 'R', 'R', 'R', 'R', 'R', 'R', 'L']), ('control layout', [['EN', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'L', 'R'], [[1, 7], [2, 5]], 0, 'L'], ['EN', 'R', 'R', 'AN', 'ON', 'R', 'ON', 'R', 'L', 'R'])], [('regression: context from updated brackets', [['EN', 'ON', 'ON', 'R', 'ON', 'EN', 'L', 'ON', 'L', 'L'], [[1, 7], [2, 4]], 0, 'R'], ['EN', 'L', 'L', 'R', 'L', 'EN', 'L', 'L', 'L', 'L']), ('nested pair uses updated outer bracket', [['R', 'ON', 'ON', 'R', 'ON', 'L', 'ON'], [[1, 6], [2, 4]], 0, 'L'], ['R', 'L', 'L', 'R', 'L', 'L', 'L']), ('partial-repair probe', [['ON', 'EN', 'ON', 'R', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'EN', 'ON', 'ON', 'ON'], [[8, 9], [7, 12], [5, 13]], 2, 'L'], ['ON', 'EN', 'ON', 'R', 'ON', 'R', 'AN', 'R', 'ON', 'ON', 'EN', 'ON', 'R', 'R']), ('partial-repair probe', [['ON', 'EN', 'L', 'ON', 'ON', 'ON', 'AN', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'EN'], [[7, 8], [4, 9], [11, 12]], 2, 'R'], ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN']), ('nested pair in RTL embedding', [['L', 'ON', 'ON', 'L', 'ON', 'R', 'ON'], [[1, 6], [2, 4]], 1, 'R'], ['L', 'R', 'R', 'L', 'R', 'R', 'R']), ('number inside brackets in RTL context', [['R', 'ON', 'EN', 'ON'], [[1, 3]], 0, 'L'], ['R', 'R', 'EN', 'R']), ('control layout', [['ON', 'ON', 'ON', 'AN', 'ON', 'ON'], [[1, 5], [2, 4]], 1, 'L'], ['ON', 'R', 'R', 'AN', 'R', 'R']), ('control layout', [['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'ON', 'L', 'R', 'ON'], [[8, 11]], 2, 'R'], ['L', 'ON', 'ON', 'R', 'EN', 'ON', 'ON', 'ON', 'L', 'L', 'R', 'L'])]]
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 |
|---|---|---|---|
| nested pair uses updated outer bracket | ['R', 'L', 'L', 'R', 'L', 'L', 'L'] | ['R', 'L', 'L', 'R', 'L', 'L', 'L'] | Passed |
| regression: context from updated brackets | ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R'] | ['ON', 'R', 'R', 'L', 'R', 'ON', 'R', 'R'] | Passed |
| partial-repair probe | ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON'] | ['ON', 'ON', 'R', 'R', 'EN', 'ON', 'R', 'EN', 'R', 'R', 'R', 'L', 'ON', 'ON'] | Passed |
| partial-repair probe | ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN'] | ['ON', 'EN', 'L', 'ON', 'L', 'ON', 'AN', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'EN'] | Passed |
| nested pair in RTL embedding | ['L', 'R', 'R', 'L', 'R', 'R', 'R'] | ['L', 'R', 'R', 'L', 'R', 'R', 'R'] | Passed |
| number inside brackets in RTL context | ['R', 'R', 'EN', 'R'] | ['R', 'R', 'EN', 'R'] | Passed |
| control layout | ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L'] | ['R', 'L', 'L', 'L', 'R', 'L', 'ON', 'L'] | Passed |
| control layout | ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'] | ['R', 'L', 'L', 'L', 'L', 'L', 'ON', 'EN', 'L', 'L', 'L'] | Passed |
SHA-256 / 29cadaa2eff678f3a715b0ffcacb06b9f90a33dda8f95636fdc5620b494ffc38
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.473670+00:00.
Case digest / 96e33a960e8fb0e6fa0e241e4cc882a85445c57466697fad02690d715c9bd124