FAILURE MAP
← Case archive

FA-80546 / Bidirectional text layout / Open access

Explicit embedding stack: override scope · case 01

Punctuation inside an override keeps its own class.

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

ROOT CAUSE

The override class is not applied to neutral characters.

VERIFIED REPAIR

Apply the override class to every non-code character.

Unsuccessful approach: Exempting spaces still leaves override holes.

Case contract

Input [classes, paragraph level, max depth]. RLE/RLO push the next odd level, LRE/LRO the next even level (RLO/LRO set an R/L override, RLE/LRE clear it) if the level <= max depth and no overflow is pending, else count an overflow. PDF first cancels an overflow, else pops if above the base. Codes get level "x" and class BN; other characters take the top level and the override class if any. Return [levels, 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):
    classes, para, max_depth = x
    stack = [(para, None)]
    overflow = 0
    levels = []
    types = []
    for c in classes:
        if c in ('RLE', 'LRE', 'RLO', 'LRO'):
            cur = stack[-1][0]
            if c in ('RLE', 'RLO'):
                new = cur + 1 if cur % 2 == 0 else cur + 2
            else:
                new = cur + 2 if cur % 2 == 0 else cur + 1
            if new <= max_depth and overflow == 0:
                ovr = None if c in ('RLE', 'LRE') else ('R' if c == 'RLO' else 'L')
                stack.append((new, ovr))
            else:
                overflow += 1
            levels.append('x')
            types.append('BN')
        elif c == 'PDF':
            if overflow > 0:
                overflow -= 1
            elif len(stack) > 1:
                stack.pop()
            levels.append('x')
            types.append('BN')
        else:
            lv, ovr = stack[-1]
            levels.append(lv)
            types.append(ovr if ovr and c not in ('ON', 'WS') else c)
    return [levels, types]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('regression: override scope', [['L', 'L', 'EN', 'EN', 'LRO', 'R', 'R', 'EN', 'EN', 'EN', 'WS', 'R'], 1, 2], [[1, 1, 1, 1, 'x', 2, 2, 2, 2, 2, 2, 2], ['L', 'L', 'EN', 'EN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L']]), ('regression: override scope', [['RLO', 'PDF', 'RLO', 'L', 'L', 'WS', 'EN', 'PDF'], 0, 6], [['x', 'x', 'x', 1, 1, 1, 1, 'x'], ['BN', 'BN', 'BN', 'R', 'R', 'R', 'R', 'BN']]), ('regression: override scope', [['EN', 'PDF', 'RLE', 'RLO', 'WS', 'L', 'RLE', 'PDF'], 0, 5], [[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']]), ('depth limit exactly reached', [['RLE', 'LRE', 'L', 'PDF', 'L'], 0, 2], [['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('control layout', [['EN', 'R', 'L', 'R', 'PDF', 'L', 'R', 'RLE', 'RLE', 'RLE', 'LRO'], 0, 5], [[0, 0, 0, 0, 'x', 0, 0, 'x', 'x', 'x', 'x'], ['EN', 'R', 'L', 'R', 'BN', 'L', 'R', 'BN', 'BN', 'BN', 'BN']]), ('control layout', [['PDF', 'R', 'L', 'RLE', 'ON', 'PDF', 'ON', 'R', 'LRE', 'PDF', 'R'], 0, 5], [['x', 0, 0, 'x', 1, 'x', 0, 0, 'x', 'x', 0], ['BN', 'R', 'L', 'BN', 'ON', 'BN', 'ON', 'R', 'BN', 'BN', 'R']])], [('regression: override scope', [['RLO', 'ON', 'RLE', 'RLE', 'L', 'R'], 0, 4], [['x', 1, 'x', 'x', 3, 3], ['BN', 'R', 'BN', 'BN', 'L', 'R']]), ('regression: override scope', [['PDF', 'LRO', 'EN', 'WS', 'LRO', 'RLE'], 1, 6], [['x', 'x', 2, 2, 'x', 'x'], ['BN', 'BN', 'L', 'L', 'BN', 'BN']]), ('regression: override scope', [['RLE', 'LRO', 'L', 'WS', 'R', 'EN', 'EN', 'R', 'L', 'PDF', 'ON', 'L', 'ON'], 0, 6], [['x', 'x', 2, 2, 2, 2, 2, 2, 2, 'x', 1, 1, 1], ['BN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'BN', 'ON', 'L', 'ON']]), ('regression: override scope', [['RLO', 'WS', 'ON', 'R', 'RLE', 'ON', 'RLE', 'PDF', 'RLE', 'R', 'ON'], 0, 5], [['x', 1, 1, 1, 'x', 3, 'x', 'x', 'x', 5, 5], ['BN', 'R', 'R', 'R', 'BN', 'ON', 'BN', 'BN', 'BN', 'R', 'ON']]), ('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('control layout', [['R', 'LRE', 'R', 'R', 'ON', 'EN', 'RLE', 'ON'], 1, 3], [[1, 'x', 2, 2, 2, 2, 'x', 3], ['R', 'BN', 'R', 'R', 'ON', 'EN', 'BN', 'ON']]), ('control layout', [['RLE', 'R'], 1, 5], [['x', 3], ['BN', 'R']])], [('regression: override scope', [['RLE', 'LRO', 'LRE', 'LRE', 'WS', 'LRE', 'L', 'RLE', 'PDF', 'ON', 'L', 'PDF', 'L'], 0, 3], [['x', 'x', 'x', 'x', 2, 'x', 2, 'x', 'x', 2, 2, 'x', 2], ['BN', 'BN', 'BN', 'BN', 'L', 'BN', 'L', 'BN', 'BN', 'L', 'L', 'BN', 'L']]), ('regression: override scope', [['RLO', 'ON', 'RLE', 'RLE', 'L', 'R'], 0, 4], [['x', 1, 'x', 'x', 3, 3], ['BN', 'R', 'BN', 'BN', 'L', 'R']]), ('regression: override scope', [['EN', 'PDF', 'RLE', 'RLO', 'WS', 'L', 'RLE', 'PDF'], 0, 5], [[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']]), ('regression: override scope', [['PDF', 'LRO', 'EN', 'WS', 'LRO', 'RLE'], 1, 6], [['x', 'x', 2, 2, 'x', 'x'], ['BN', 'BN', 'L', 'L', 'BN', 'BN']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('LRE from odd level', [['LRE', 'R'], 1, 6], [['x', 2], ['BN', 'R']]), ('control layout', [['LRE', 'PDF'], 0, 2], [['x', 'x'], ['BN', 'BN']]), ('control layout', [['R', 'L', 'ON', 'PDF', 'R', 'L', 'ON', 'LRE', 'RLE'], 0, 4], [[0, 0, 0, 'x', 0, 0, 0, 'x', 'x'], ['R', 'L', 'ON', 'BN', 'R', 'L', 'ON', 'BN', 'BN']])], [('regression: override scope', [['RLO', 'LRO', 'EN', 'LRE', 'LRE', 'L', 'L', 'RLE', 'ON', 'EN', 'L', 'ON'], 1, 5], [['x', 'x', 4, 'x', 'x', 4, 4, 'x', 4, 4, 4, 4], ['BN', 'BN', 'L', 'BN', 'BN', 'L', 'L', 'BN', 'L', 'L', 'L', 'L']]), ('regression: override scope', [['LRO', 'ON', 'RLE', 'L', 'ON', 'ON', 'PDF'], 1, 6], [['x', 2, 'x', 3, 3, 3, 'x'], ['BN', 'L', 'BN', 'L', 'ON', 'ON', 'BN']]), ('regression: override scope', [['PDF', 'EN', 'EN', 'R', 'L', 'R', 'L', 'RLO', 'EN', 'WS', 'PDF', 'PDF', 'ON'], 1, 5], [['x', 1, 1, 1, 1, 1, 1, 'x', 3, 3, 'x', 'x', 1], ['BN', 'EN', 'EN', 'R', 'L', 'R', 'L', 'BN', 'R', 'R', 'BN', 'BN', 'ON']]), ('regression: override scope', [['LRO', 'R', 'PDF', 'RLE', 'PDF', 'R', 'L', 'PDF', 'EN', 'ON', 'WS', 'LRO', 'WS', 'LRE'], 0, 5], [['x', 2, 'x', 'x', 'x', 0, 0, 'x', 0, 0, 0, 'x', 2, 'x'], ['BN', 'L', 'BN', 'BN', 'BN', 'R', 'L', 'BN', 'EN', 'ON', 'WS', 'BN', 'L', 'BN']]), ('depth limit exactly reached', [['RLE', 'LRE', 'L', 'PDF', 'L'], 0, 2], [['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']]), ('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('control layout', [['EN', 'PDF', 'L', 'LRE', 'R', 'L', 'ON'], 0, 5], [[0, 'x', 0, 'x', 2, 2, 2], ['EN', 'BN', 'L', 'BN', 'R', 'L', 'ON']]), ('control layout', [['ON', 'LRO', 'EN'], 1, 2], [[1, 'x', 2], ['ON', 'BN', 'L']])], [('regression: override scope', [['R', 'RLO', 'ON', 'L', 'RLE', 'RLE'], 0, 3], [[0, 'x', 1, 1, 'x', 'x'], ['R', 'BN', 'R', 'R', 'BN', 'BN']]), ('regression: override scope', [['EN', 'L', 'ON', 'R', 'LRO', 'L', 'ON', 'WS', 'ON'], 1, 6], [[1, 1, 1, 1, 'x', 2, 2, 2, 2], ['EN', 'L', 'ON', 'R', 'BN', 'L', 'L', 'L', 'L']]), ('regression: override scope', [['PDF', 'LRO', 'EN', 'WS', 'LRO', 'RLE'], 1, 6], [['x', 'x', 2, 2, 'x', 'x'], ['BN', 'BN', 'L', 'L', 'BN', 'BN']]), ('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('LRE from odd level', [['LRE', 'R'], 1, 6], [['x', 2], ['BN', 'R']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('control layout', [['L', 'R', 'EN', 'LRO', 'L', 'LRE', 'L', 'L', 'L', 'L'], 0, 5], [[0, 0, 0, 'x', 2, 'x', 4, 4, 4, 4], ['L', 'R', 'EN', 'BN', 'L', 'BN', 'L', 'L', 'L', 'L']]), ('control layout', [['PDF', 'EN', 'ON', 'RLE', 'ON', 'PDF', 'WS', 'L', 'ON', 'EN', 'ON'], 0, 2], [['x', 0, 0, 'x', 1, 'x', 0, 0, 0, 0, 0], ['BN', 'EN', 'ON', 'BN', 'ON', 'BN', 'WS', 'L', 'ON', 'EN', 'ON']])]]
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 fixtureActualExpectedOutcome
override on neutrals[['x', 1, 1, 1], ['BN', 'ON', 'R', 'WS']][['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]Failed
regression: override scope[[1, 1, 1, 1, 'x', 2, 2, 2, 2, 2, 2, 2], ['L', 'L', 'EN', 'EN', 'BN', 'L', 'L', 'L', 'L', 'L', 'WS', 'L']][[1, 1, 1, 1, 'x', 2, 2, 2, 2, 2, 2, 2], ['L', 'L', 'EN', 'EN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L']]Failed
regression: override scope[['x', 'x', 'x', 1, 1, 1, 1, 'x'], ['BN', 'BN', 'BN', 'R', 'R', 'WS', 'R', 'BN']][['x', 'x', 'x', 1, 1, 1, 1, 'x'], ['BN', 'BN', 'BN', 'R', 'R', 'R', 'R', 'BN']]Failed
regression: override scope[[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'WS', 'R', 'BN', 'BN']][[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']]Failed
depth limit exactly reached[['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']][['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']]Passed
RLE from odd level[['x', 'x', 3], ['BN', 'BN', 'L']][['x', 'x', 3], ['BN', 'BN', 'L']]Passed
control layout[[0, 0, 0, 0, 'x', 0, 0, 'x', 'x', 'x', 'x'], ['EN', 'R', 'L', 'R', 'BN', 'L', 'R', 'BN', 'BN', 'BN', 'BN']][[0, 0, 0, 0, 'x', 0, 0, 'x', 'x', 'x', 'x'], ['EN', 'R', 'L', 'R', 'BN', 'L', 'R', 'BN', 'BN', 'BN', 'BN']]Passed
control layout[['x', 0, 0, 'x', 1, 'x', 0, 0, 'x', 'x', 0], ['BN', 'R', 'L', 'BN', 'ON', 'BN', 'ON', 'R', 'BN', 'BN', 'R']][['x', 0, 0, 'x', 1, 'x', 0, 0, 'x', 'x', 0], ['BN', 'R', 'L', 'BN', 'ON', 'BN', 'ON', 'R', 'BN', 'BN', 'R']]Passed

SHA-256 / f275dc2da73fa69a56e694db80b580e7f01b3faf08c44a4a4bbec27e0585a533

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    classes, para, max_depth = x
    stack = [(para, None)]
    overflow = 0
    levels = []
    types = []
    for c in classes:
        if c in ('RLE', 'LRE', 'RLO', 'LRO'):
            cur = stack[-1][0]
            if c in ('RLE', 'RLO'):
                new = cur + 1 if cur % 2 == 0 else cur + 2
            else:
                new = cur + 2 if cur % 2 == 0 else cur + 1
            if new <= max_depth and overflow == 0:
                ovr = None if c in ('RLE', 'LRE') else ('R' if c == 'RLO' else 'L')
                stack.append((new, ovr))
            else:
                overflow += 1
            levels.append('x')
            types.append('BN')
        elif c == 'PDF':
            if overflow > 0:
                overflow -= 1
            elif len(stack) > 1:
                stack.pop()
            levels.append('x')
            types.append('BN')
        else:
            lv, ovr = stack[-1]
            levels.append(lv)
            types.append(ovr if ovr and c != 'WS' else c)
    return [levels, types]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('regression: override scope', [['L', 'L', 'EN', 'EN', 'LRO', 'R', 'R', 'EN', 'EN', 'EN', 'WS', 'R'], 1, 2], [[1, 1, 1, 1, 'x', 2, 2, 2, 2, 2, 2, 2], ['L', 'L', 'EN', 'EN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L']]), ('regression: override scope', [['RLO', 'PDF', 'RLO', 'L', 'L', 'WS', 'EN', 'PDF'], 0, 6], [['x', 'x', 'x', 1, 1, 1, 1, 'x'], ['BN', 'BN', 'BN', 'R', 'R', 'R', 'R', 'BN']]), ('regression: override scope', [['EN', 'PDF', 'RLE', 'RLO', 'WS', 'L', 'RLE', 'PDF'], 0, 5], [[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']]), ('depth limit exactly reached', [['RLE', 'LRE', 'L', 'PDF', 'L'], 0, 2], [['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('control layout', [['EN', 'R', 'L', 'R', 'PDF', 'L', 'R', 'RLE', 'RLE', 'RLE', 'LRO'], 0, 5], [[0, 0, 0, 0, 'x', 0, 0, 'x', 'x', 'x', 'x'], ['EN', 'R', 'L', 'R', 'BN', 'L', 'R', 'BN', 'BN', 'BN', 'BN']]), ('control layout', [['PDF', 'R', 'L', 'RLE', 'ON', 'PDF', 'ON', 'R', 'LRE', 'PDF', 'R'], 0, 5], [['x', 0, 0, 'x', 1, 'x', 0, 0, 'x', 'x', 0], ['BN', 'R', 'L', 'BN', 'ON', 'BN', 'ON', 'R', 'BN', 'BN', 'R']])], [('regression: override scope', [['RLO', 'ON', 'RLE', 'RLE', 'L', 'R'], 0, 4], [['x', 1, 'x', 'x', 3, 3], ['BN', 'R', 'BN', 'BN', 'L', 'R']]), ('regression: override scope', [['PDF', 'LRO', 'EN', 'WS', 'LRO', 'RLE'], 1, 6], [['x', 'x', 2, 2, 'x', 'x'], ['BN', 'BN', 'L', 'L', 'BN', 'BN']]), ('regression: override scope', [['RLE', 'LRO', 'L', 'WS', 'R', 'EN', 'EN', 'R', 'L', 'PDF', 'ON', 'L', 'ON'], 0, 6], [['x', 'x', 2, 2, 2, 2, 2, 2, 2, 'x', 1, 1, 1], ['BN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'BN', 'ON', 'L', 'ON']]), ('regression: override scope', [['RLO', 'WS', 'ON', 'R', 'RLE', 'ON', 'RLE', 'PDF', 'RLE', 'R', 'ON'], 0, 5], [['x', 1, 1, 1, 'x', 3, 'x', 'x', 'x', 5, 5], ['BN', 'R', 'R', 'R', 'BN', 'ON', 'BN', 'BN', 'BN', 'R', 'ON']]), ('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('control layout', [['R', 'LRE', 'R', 'R', 'ON', 'EN', 'RLE', 'ON'], 1, 3], [[1, 'x', 2, 2, 2, 2, 'x', 3], ['R', 'BN', 'R', 'R', 'ON', 'EN', 'BN', 'ON']]), ('control layout', [['RLE', 'R'], 1, 5], [['x', 3], ['BN', 'R']])], [('regression: override scope', [['RLE', 'LRO', 'LRE', 'LRE', 'WS', 'LRE', 'L', 'RLE', 'PDF', 'ON', 'L', 'PDF', 'L'], 0, 3], [['x', 'x', 'x', 'x', 2, 'x', 2, 'x', 'x', 2, 2, 'x', 2], ['BN', 'BN', 'BN', 'BN', 'L', 'BN', 'L', 'BN', 'BN', 'L', 'L', 'BN', 'L']]), ('regression: override scope', [['RLO', 'ON', 'RLE', 'RLE', 'L', 'R'], 0, 4], [['x', 1, 'x', 'x', 3, 3], ['BN', 'R', 'BN', 'BN', 'L', 'R']]), ('regression: override scope', [['EN', 'PDF', 'RLE', 'RLO', 'WS', 'L', 'RLE', 'PDF'], 0, 5], [[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']]), ('regression: override scope', [['PDF', 'LRO', 'EN', 'WS', 'LRO', 'RLE'], 1, 6], [['x', 'x', 2, 2, 'x', 'x'], ['BN', 'BN', 'L', 'L', 'BN', 'BN']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('LRE from odd level', [['LRE', 'R'], 1, 6], [['x', 2], ['BN', 'R']]), ('control layout', [['LRE', 'PDF'], 0, 2], [['x', 'x'], ['BN', 'BN']]), ('control layout', [['R', 'L', 'ON', 'PDF', 'R', 'L', 'ON', 'LRE', 'RLE'], 0, 4], [[0, 0, 0, 'x', 0, 0, 0, 'x', 'x'], ['R', 'L', 'ON', 'BN', 'R', 'L', 'ON', 'BN', 'BN']])], [('regression: override scope', [['RLO', 'LRO', 'EN', 'LRE', 'LRE', 'L', 'L', 'RLE', 'ON', 'EN', 'L', 'ON'], 1, 5], [['x', 'x', 4, 'x', 'x', 4, 4, 'x', 4, 4, 4, 4], ['BN', 'BN', 'L', 'BN', 'BN', 'L', 'L', 'BN', 'L', 'L', 'L', 'L']]), ('regression: override scope', [['LRO', 'ON', 'RLE', 'L', 'ON', 'ON', 'PDF'], 1, 6], [['x', 2, 'x', 3, 3, 3, 'x'], ['BN', 'L', 'BN', 'L', 'ON', 'ON', 'BN']]), ('regression: override scope', [['PDF', 'EN', 'EN', 'R', 'L', 'R', 'L', 'RLO', 'EN', 'WS', 'PDF', 'PDF', 'ON'], 1, 5], [['x', 1, 1, 1, 1, 1, 1, 'x', 3, 3, 'x', 'x', 1], ['BN', 'EN', 'EN', 'R', 'L', 'R', 'L', 'BN', 'R', 'R', 'BN', 'BN', 'ON']]), ('regression: override scope', [['LRO', 'R', 'PDF', 'RLE', 'PDF', 'R', 'L', 'PDF', 'EN', 'ON', 'WS', 'LRO', 'WS', 'LRE'], 0, 5], [['x', 2, 'x', 'x', 'x', 0, 0, 'x', 0, 0, 0, 'x', 2, 'x'], ['BN', 'L', 'BN', 'BN', 'BN', 'R', 'L', 'BN', 'EN', 'ON', 'WS', 'BN', 'L', 'BN']]), ('depth limit exactly reached', [['RLE', 'LRE', 'L', 'PDF', 'L'], 0, 2], [['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']]), ('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('control layout', [['EN', 'PDF', 'L', 'LRE', 'R', 'L', 'ON'], 0, 5], [[0, 'x', 0, 'x', 2, 2, 2], ['EN', 'BN', 'L', 'BN', 'R', 'L', 'ON']]), ('control layout', [['ON', 'LRO', 'EN'], 1, 2], [[1, 'x', 2], ['ON', 'BN', 'L']])], [('regression: override scope', [['R', 'RLO', 'ON', 'L', 'RLE', 'RLE'], 0, 3], [[0, 'x', 1, 1, 'x', 'x'], ['R', 'BN', 'R', 'R', 'BN', 'BN']]), ('regression: override scope', [['EN', 'L', 'ON', 'R', 'LRO', 'L', 'ON', 'WS', 'ON'], 1, 6], [[1, 1, 1, 1, 'x', 2, 2, 2, 2], ['EN', 'L', 'ON', 'R', 'BN', 'L', 'L', 'L', 'L']]), ('regression: override scope', [['PDF', 'LRO', 'EN', 'WS', 'LRO', 'RLE'], 1, 6], [['x', 'x', 2, 2, 'x', 'x'], ['BN', 'BN', 'L', 'L', 'BN', 'BN']]), ('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('LRE from odd level', [['LRE', 'R'], 1, 6], [['x', 2], ['BN', 'R']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('control layout', [['L', 'R', 'EN', 'LRO', 'L', 'LRE', 'L', 'L', 'L', 'L'], 0, 5], [[0, 0, 0, 'x', 2, 'x', 4, 4, 4, 4], ['L', 'R', 'EN', 'BN', 'L', 'BN', 'L', 'L', 'L', 'L']]), ('control layout', [['PDF', 'EN', 'ON', 'RLE', 'ON', 'PDF', 'WS', 'L', 'ON', 'EN', 'ON'], 0, 2], [['x', 0, 0, 'x', 1, 'x', 0, 0, 0, 0, 0], ['BN', 'EN', 'ON', 'BN', 'ON', 'BN', 'WS', 'L', 'ON', 'EN', 'ON']])]]
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 fixtureActualExpectedOutcome
override on neutrals[['x', 1, 1, 1], ['BN', 'R', 'R', 'WS']][['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]Failed
regression: override scope[[1, 1, 1, 1, 'x', 2, 2, 2, 2, 2, 2, 2], ['L', 'L', 'EN', 'EN', 'BN', 'L', 'L', 'L', 'L', 'L', 'WS', 'L']][[1, 1, 1, 1, 'x', 2, 2, 2, 2, 2, 2, 2], ['L', 'L', 'EN', 'EN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L']]Failed
regression: override scope[['x', 'x', 'x', 1, 1, 1, 1, 'x'], ['BN', 'BN', 'BN', 'R', 'R', 'WS', 'R', 'BN']][['x', 'x', 'x', 1, 1, 1, 1, 'x'], ['BN', 'BN', 'BN', 'R', 'R', 'R', 'R', 'BN']]Failed
regression: override scope[[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'WS', 'R', 'BN', 'BN']][[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']]Failed
depth limit exactly reached[['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']][['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']]Passed
RLE from odd level[['x', 'x', 3], ['BN', 'BN', 'L']][['x', 'x', 3], ['BN', 'BN', 'L']]Passed
control layout[[0, 0, 0, 0, 'x', 0, 0, 'x', 'x', 'x', 'x'], ['EN', 'R', 'L', 'R', 'BN', 'L', 'R', 'BN', 'BN', 'BN', 'BN']][[0, 0, 0, 0, 'x', 0, 0, 'x', 'x', 'x', 'x'], ['EN', 'R', 'L', 'R', 'BN', 'L', 'R', 'BN', 'BN', 'BN', 'BN']]Passed
control layout[['x', 0, 0, 'x', 1, 'x', 0, 0, 'x', 'x', 0], ['BN', 'R', 'L', 'BN', 'ON', 'BN', 'ON', 'R', 'BN', 'BN', 'R']][['x', 0, 0, 'x', 1, 'x', 0, 0, 'x', 'x', 0], ['BN', 'R', 'L', 'BN', 'ON', 'BN', 'ON', 'R', 'BN', 'BN', 'R']]Passed

SHA-256 / 3ecaccb90a643bd48352b19bd8aa1bb11b43b886057ea218812383e94e85d273

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    classes, para, max_depth = x
    stack = [(para, None)]
    overflow = 0
    levels = []
    types = []
    for c in classes:
        if c in ('RLE', 'LRE', 'RLO', 'LRO'):
            cur = stack[-1][0]
            if c in ('RLE', 'RLO'):
                new = cur + 1 if cur % 2 == 0 else cur + 2
            else:
                new = cur + 2 if cur % 2 == 0 else cur + 1
            if new <= max_depth and overflow == 0:
                ovr = None if c in ('RLE', 'LRE') else ('R' if c == 'RLO' else 'L')
                stack.append((new, ovr))
            else:
                overflow += 1
            levels.append('x')
            types.append('BN')
        elif c == 'PDF':
            if overflow > 0:
                overflow -= 1
            elif len(stack) > 1:
                stack.pop()
            levels.append('x')
            types.append('BN')
        else:
            lv, ovr = stack[-1]
            levels.append(lv)
            types.append(ovr if ovr else c)
    return [levels, types]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('regression: override scope', [['L', 'L', 'EN', 'EN', 'LRO', 'R', 'R', 'EN', 'EN', 'EN', 'WS', 'R'], 1, 2], [[1, 1, 1, 1, 'x', 2, 2, 2, 2, 2, 2, 2], ['L', 'L', 'EN', 'EN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L']]), ('regression: override scope', [['RLO', 'PDF', 'RLO', 'L', 'L', 'WS', 'EN', 'PDF'], 0, 6], [['x', 'x', 'x', 1, 1, 1, 1, 'x'], ['BN', 'BN', 'BN', 'R', 'R', 'R', 'R', 'BN']]), ('regression: override scope', [['EN', 'PDF', 'RLE', 'RLO', 'WS', 'L', 'RLE', 'PDF'], 0, 5], [[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']]), ('depth limit exactly reached', [['RLE', 'LRE', 'L', 'PDF', 'L'], 0, 2], [['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('control layout', [['EN', 'R', 'L', 'R', 'PDF', 'L', 'R', 'RLE', 'RLE', 'RLE', 'LRO'], 0, 5], [[0, 0, 0, 0, 'x', 0, 0, 'x', 'x', 'x', 'x'], ['EN', 'R', 'L', 'R', 'BN', 'L', 'R', 'BN', 'BN', 'BN', 'BN']]), ('control layout', [['PDF', 'R', 'L', 'RLE', 'ON', 'PDF', 'ON', 'R', 'LRE', 'PDF', 'R'], 0, 5], [['x', 0, 0, 'x', 1, 'x', 0, 0, 'x', 'x', 0], ['BN', 'R', 'L', 'BN', 'ON', 'BN', 'ON', 'R', 'BN', 'BN', 'R']])], [('regression: override scope', [['RLO', 'ON', 'RLE', 'RLE', 'L', 'R'], 0, 4], [['x', 1, 'x', 'x', 3, 3], ['BN', 'R', 'BN', 'BN', 'L', 'R']]), ('regression: override scope', [['PDF', 'LRO', 'EN', 'WS', 'LRO', 'RLE'], 1, 6], [['x', 'x', 2, 2, 'x', 'x'], ['BN', 'BN', 'L', 'L', 'BN', 'BN']]), ('regression: override scope', [['RLE', 'LRO', 'L', 'WS', 'R', 'EN', 'EN', 'R', 'L', 'PDF', 'ON', 'L', 'ON'], 0, 6], [['x', 'x', 2, 2, 2, 2, 2, 2, 2, 'x', 1, 1, 1], ['BN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'BN', 'ON', 'L', 'ON']]), ('regression: override scope', [['RLO', 'WS', 'ON', 'R', 'RLE', 'ON', 'RLE', 'PDF', 'RLE', 'R', 'ON'], 0, 5], [['x', 1, 1, 1, 'x', 3, 'x', 'x', 'x', 5, 5], ['BN', 'R', 'R', 'R', 'BN', 'ON', 'BN', 'BN', 'BN', 'R', 'ON']]), ('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('control layout', [['R', 'LRE', 'R', 'R', 'ON', 'EN', 'RLE', 'ON'], 1, 3], [[1, 'x', 2, 2, 2, 2, 'x', 3], ['R', 'BN', 'R', 'R', 'ON', 'EN', 'BN', 'ON']]), ('control layout', [['RLE', 'R'], 1, 5], [['x', 3], ['BN', 'R']])], [('regression: override scope', [['RLE', 'LRO', 'LRE', 'LRE', 'WS', 'LRE', 'L', 'RLE', 'PDF', 'ON', 'L', 'PDF', 'L'], 0, 3], [['x', 'x', 'x', 'x', 2, 'x', 2, 'x', 'x', 2, 2, 'x', 2], ['BN', 'BN', 'BN', 'BN', 'L', 'BN', 'L', 'BN', 'BN', 'L', 'L', 'BN', 'L']]), ('regression: override scope', [['RLO', 'ON', 'RLE', 'RLE', 'L', 'R'], 0, 4], [['x', 1, 'x', 'x', 3, 3], ['BN', 'R', 'BN', 'BN', 'L', 'R']]), ('regression: override scope', [['EN', 'PDF', 'RLE', 'RLO', 'WS', 'L', 'RLE', 'PDF'], 0, 5], [[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']]), ('regression: override scope', [['PDF', 'LRO', 'EN', 'WS', 'LRO', 'RLE'], 1, 6], [['x', 'x', 2, 2, 'x', 'x'], ['BN', 'BN', 'L', 'L', 'BN', 'BN']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('LRE from odd level', [['LRE', 'R'], 1, 6], [['x', 2], ['BN', 'R']]), ('control layout', [['LRE', 'PDF'], 0, 2], [['x', 'x'], ['BN', 'BN']]), ('control layout', [['R', 'L', 'ON', 'PDF', 'R', 'L', 'ON', 'LRE', 'RLE'], 0, 4], [[0, 0, 0, 'x', 0, 0, 0, 'x', 'x'], ['R', 'L', 'ON', 'BN', 'R', 'L', 'ON', 'BN', 'BN']])], [('regression: override scope', [['RLO', 'LRO', 'EN', 'LRE', 'LRE', 'L', 'L', 'RLE', 'ON', 'EN', 'L', 'ON'], 1, 5], [['x', 'x', 4, 'x', 'x', 4, 4, 'x', 4, 4, 4, 4], ['BN', 'BN', 'L', 'BN', 'BN', 'L', 'L', 'BN', 'L', 'L', 'L', 'L']]), ('regression: override scope', [['LRO', 'ON', 'RLE', 'L', 'ON', 'ON', 'PDF'], 1, 6], [['x', 2, 'x', 3, 3, 3, 'x'], ['BN', 'L', 'BN', 'L', 'ON', 'ON', 'BN']]), ('regression: override scope', [['PDF', 'EN', 'EN', 'R', 'L', 'R', 'L', 'RLO', 'EN', 'WS', 'PDF', 'PDF', 'ON'], 1, 5], [['x', 1, 1, 1, 1, 1, 1, 'x', 3, 3, 'x', 'x', 1], ['BN', 'EN', 'EN', 'R', 'L', 'R', 'L', 'BN', 'R', 'R', 'BN', 'BN', 'ON']]), ('regression: override scope', [['LRO', 'R', 'PDF', 'RLE', 'PDF', 'R', 'L', 'PDF', 'EN', 'ON', 'WS', 'LRO', 'WS', 'LRE'], 0, 5], [['x', 2, 'x', 'x', 'x', 0, 0, 'x', 0, 0, 0, 'x', 2, 'x'], ['BN', 'L', 'BN', 'BN', 'BN', 'R', 'L', 'BN', 'EN', 'ON', 'WS', 'BN', 'L', 'BN']]), ('depth limit exactly reached', [['RLE', 'LRE', 'L', 'PDF', 'L'], 0, 2], [['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']]), ('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('control layout', [['EN', 'PDF', 'L', 'LRE', 'R', 'L', 'ON'], 0, 5], [[0, 'x', 0, 'x', 2, 2, 2], ['EN', 'BN', 'L', 'BN', 'R', 'L', 'ON']]), ('control layout', [['ON', 'LRO', 'EN'], 1, 2], [[1, 'x', 2], ['ON', 'BN', 'L']])], [('regression: override scope', [['R', 'RLO', 'ON', 'L', 'RLE', 'RLE'], 0, 3], [[0, 'x', 1, 1, 'x', 'x'], ['R', 'BN', 'R', 'R', 'BN', 'BN']]), ('regression: override scope', [['EN', 'L', 'ON', 'R', 'LRO', 'L', 'ON', 'WS', 'ON'], 1, 6], [[1, 1, 1, 1, 'x', 2, 2, 2, 2], ['EN', 'L', 'ON', 'R', 'BN', 'L', 'L', 'L', 'L']]), ('regression: override scope', [['PDF', 'LRO', 'EN', 'WS', 'LRO', 'RLE'], 1, 6], [['x', 'x', 2, 2, 'x', 'x'], ['BN', 'BN', 'L', 'L', 'BN', 'BN']]), ('override on neutrals', [['RLO', 'ON', 'L', 'WS'], 0, 6], [['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]), ('LRE from odd level', [['LRE', 'R'], 1, 6], [['x', 2], ['BN', 'R']]), ('RLE from odd level', [['RLE', 'RLE', 'L'], 0, 6], [['x', 'x', 3], ['BN', 'BN', 'L']]), ('control layout', [['L', 'R', 'EN', 'LRO', 'L', 'LRE', 'L', 'L', 'L', 'L'], 0, 5], [[0, 0, 0, 'x', 2, 'x', 4, 4, 4, 4], ['L', 'R', 'EN', 'BN', 'L', 'BN', 'L', 'L', 'L', 'L']]), ('control layout', [['PDF', 'EN', 'ON', 'RLE', 'ON', 'PDF', 'WS', 'L', 'ON', 'EN', 'ON'], 0, 2], [['x', 0, 0, 'x', 1, 'x', 0, 0, 0, 0, 0], ['BN', 'EN', 'ON', 'BN', 'ON', 'BN', 'WS', 'L', 'ON', 'EN', 'ON']])]]
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 fixtureActualExpectedOutcome
override on neutrals[['x', 1, 1, 1], ['BN', 'R', 'R', 'R']][['x', 1, 1, 1], ['BN', 'R', 'R', 'R']]Passed
regression: override scope[[1, 1, 1, 1, 'x', 2, 2, 2, 2, 2, 2, 2], ['L', 'L', 'EN', 'EN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L']][[1, 1, 1, 1, 'x', 2, 2, 2, 2, 2, 2, 2], ['L', 'L', 'EN', 'EN', 'BN', 'L', 'L', 'L', 'L', 'L', 'L', 'L']]Passed
regression: override scope[['x', 'x', 'x', 1, 1, 1, 1, 'x'], ['BN', 'BN', 'BN', 'R', 'R', 'R', 'R', 'BN']][['x', 'x', 'x', 1, 1, 1, 1, 'x'], ['BN', 'BN', 'BN', 'R', 'R', 'R', 'R', 'BN']]Passed
regression: override scope[[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']][[0, 'x', 'x', 'x', 3, 3, 'x', 'x'], ['EN', 'BN', 'BN', 'BN', 'R', 'R', 'BN', 'BN']]Passed
depth limit exactly reached[['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']][['x', 'x', 2, 'x', 1], ['BN', 'BN', 'L', 'BN', 'L']]Passed
RLE from odd level[['x', 'x', 3], ['BN', 'BN', 'L']][['x', 'x', 3], ['BN', 'BN', 'L']]Passed
control layout[[0, 0, 0, 0, 'x', 0, 0, 'x', 'x', 'x', 'x'], ['EN', 'R', 'L', 'R', 'BN', 'L', 'R', 'BN', 'BN', 'BN', 'BN']][[0, 0, 0, 0, 'x', 0, 0, 'x', 'x', 'x', 'x'], ['EN', 'R', 'L', 'R', 'BN', 'L', 'R', 'BN', 'BN', 'BN', 'BN']]Passed
control layout[['x', 0, 0, 'x', 1, 'x', 0, 0, 'x', 'x', 0], ['BN', 'R', 'L', 'BN', 'ON', 'BN', 'ON', 'R', 'BN', 'BN', 'R']][['x', 0, 0, 'x', 1, 'x', 0, 0, 'x', 'x', 0], ['BN', 'R', 'L', 'BN', 'ON', 'BN', 'ON', 'R', 'BN', 'BN', 'R']]Passed

SHA-256 / 28485827c290298d35d53284b5fe7cce82334a319a25c14ff945ea57ab6bfb51

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

Case digest / 18191f4abd7e22c950fcdb3251d1a9c7b0d84599eb6f28ab724e2c053f80e46b