FAILURE MAP
← Case archive

FA-80826 / Bidirectional text layout / Open access

Paragraph separation and direction: trailing empty paragraph · case 01

Text ending with a separator gains a phantom empty paragraph.

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

ROOT CAUSE

The remainder is appended even when empty.

VERIFIED REPAIR

Only append a non-empty remainder.

Unsuccessful approach: Dropping whitespace-only remainders loses a real paragraph.

Case contract

Input [text, default level]. Paragraph separators (\n, \r, U+2029; \r\n counts once) end a paragraph and stay with it. A trailing non-empty remainder is a paragraph. Each paragraph takes level 1 if its first letter is uppercase (stand-in for RTL), 0 if lowercase, else the default. Return [[paragraph, level]].

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, default = x
    paras = []
    cur = ''
    i = 0
    while i < len(text):
        ch = text[i]
        if ch == '\r' and text[i + 1:i + 2] == '\n':
            cur += '\r\n'
            paras.append(cur)
            cur = ''
            i += 2
            continue
        cur += ch
        if ch in '\n\r\u2029':
            paras.append(cur)
            cur = ''
        i += 1
    paras.append(cur)
    out = []
    for p in paras:
        level = default
        for ch in p:
            if ch.isalpha():
                level = 1 if ch.isupper() else 0
                break
        out.append([p, level])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('regression: trailing empty paragraph', ['.b\r\n1\r', 0], [['.b\r\n', 0], ['1\r', 0]]), ('partial-repair probe', ['bXY.b\n ', 1], [['bXY.b\n', 0], [' ', 1]]), ('partial-repair probe', ['\n\raa\r\ncY \r\n ', 1], [['\n', 1], ['\r', 1], ['aa\r\n', 0], ['cY \r\n', 0], [' ', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('control layout', ['.a1Y\r\r\nY2a,,,\r\n2', 0], [['.a1Y\r', 0], ['\r\n', 0], ['Y2a,,,\r\n', 1], ['2', 0]]), ('control layout', ['b  \r\nc2,\u202911\na,', 1], [['b  \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]])], [('regression: trailing empty paragraph', ['XY\r \r\n', 0], [['XY\r', 1], [' \r\n', 0]]), ('regression: trailing empty paragraph', ['\n\r\n \nc2\r\n', 0], [['\n', 0], ['\r\n', 0], [' \n', 0], ['c2\r\n', 0]]), ('partial-repair probe', ['\n,Y\u2029 ', 0], [['\n', 0], [',Y\u2029', 1], [' ', 0]]), ('partial-repair probe', [', \n \r\n ', 0], [[', \n', 0], [' \r\n', 0], [' ', 0]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', [',\u2029 Z', 1], [[',\u2029', 1], [' Z', 1]]), ('control layout', [' .X', 0], [[' .X', 1]])], [('regression: trailing empty paragraph', ['\nbcY\n', 1], [['\n', 1], ['bcY\n', 0]]), ('regression: trailing empty paragraph', ['2,\r\n', 0], [['2,\r\n', 0]]), ('partial-repair probe', [', \n \r\n ', 0], [[', \n', 0], [' \r\n', 0], [' ', 0]]), ('partial-repair probe', ['\n,Y\u2029 ', 0], [['\n', 0], [',Y\u2029', 1], [' ', 0]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('control layout', ['1XcXc\r11b', 0], [['1XcXc\r', 1], ['11b', 0]]), ('control layout', ['X.\r\n\r\n\rX,c Y c1', 0], [['X.\r\n', 1], ['\r\n', 0], ['\r', 0], ['X,c Y c1', 1]])], [('regression: trailing empty paragraph', [',,.,Y \u2029', 0], [[',,.,Y \u2029', 1]]), ('regression: trailing empty paragraph', ['b \r\n1\n,\ncbb\n\n!\n\n', 0], [['b \r\n', 0], ['1\n', 0], [',\n', 0], ['cbb\n', 0], ['\n', 0], ['!\n', 0], ['\n', 0]]), ('partial-repair probe', ['\n,Y\u2029 ', 0], [['\n', 0], [',Y\u2029', 1], [' ', 0]]), ('partial-repair probe', ['ZcZ\u2029. !\n ', 0], [['ZcZ\u2029', 1], ['. !\n', 0], [' ', 0]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('control layout', ['2 c.ZZ\n\u2029Y.\n\r\nb2b ', 0], [['2 c.ZZ\n', 0], ['\u2029', 0], ['Y.\n', 1], ['\r\n', 0], ['b2b ', 0]]), ('control layout', [',c2aaYZZ\u2029\r\nX.X', 0], [[',c2aaYZZ\u2029', 0], ['\r\n', 0], ['X.X', 1]])], [('regression: trailing empty paragraph', ['Z\r\r\n\rcX!X12.!.c\u2029', 0], [['Z\r', 1], ['\r\n', 0], ['\r', 0], ['cX!X12.!.c\u2029', 0]]), ('regression: trailing empty paragraph', [' Y,1Y\n\r\n', 1], [[' Y,1Y\n', 1], ['\r\n', 1]]), ('partial-repair probe', [', \n \r\n ', 0], [[', \n', 0], [' \r\n', 0], [' ', 0]]), ('partial-repair probe', ['bXY.b\n ', 1], [['bXY.b\n', 0], [' ', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', ['\nYc!', 0], [['\n', 0], ['Yc!', 1]]), ('control layout', ['Z,!', 0], [['Z,!', 1]])]]
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
digits then letter[['12 X\n', 1], ['', 0]][['12 X\n', 1]]Failed
regression: trailing empty paragraph[['.b\r\n', 0], ['1\r', 0], ['', 0]][['.b\r\n', 0], ['1\r', 0]]Failed
partial-repair probe[['bXY.b\n', 0], [' ', 1]][['bXY.b\n', 0], [' ', 1]]Passed
partial-repair probe[['\n', 1], ['\r', 1], ['aa\r\n', 0], ['cY \r\n', 0], [' ', 1]][['\n', 1], ['\r', 1], ['aa\r\n', 0], ['cY \r\n', 0], [' ', 1]]Passed
CRLF is one separator[['ab\r\n', 0], ['XY', 1]][['ab\r\n', 0], ['XY', 1]]Passed
separator only paragraph[['a\n', 0], ['\n', 1], ['Z', 1]][['a\n', 0], ['\n', 1], ['Z', 1]]Passed
control layout[['.a1Y\r', 0], ['\r\n', 0], ['Y2a,,,\r\n', 1], ['2', 0]][['.a1Y\r', 0], ['\r\n', 0], ['Y2a,,,\r\n', 1], ['2', 0]]Passed
control layout[['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]][['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]]Passed

SHA-256 / 4a54aa85e78b269e6e08d7c27dd06a7e26b9af432e38f00554a3bb9c17edcaab

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    text, default = x
    paras = []
    cur = ''
    i = 0
    while i < len(text):
        ch = text[i]
        if ch == '\r' and text[i + 1:i + 2] == '\n':
            cur += '\r\n'
            paras.append(cur)
            cur = ''
            i += 2
            continue
        cur += ch
        if ch in '\n\r\u2029':
            paras.append(cur)
            cur = ''
        i += 1
    if cur.strip():
        paras.append(cur)
    out = []
    for p in paras:
        level = default
        for ch in p:
            if ch.isalpha():
                level = 1 if ch.isupper() else 0
                break
        out.append([p, level])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('regression: trailing empty paragraph', ['.b\r\n1\r', 0], [['.b\r\n', 0], ['1\r', 0]]), ('partial-repair probe', ['bXY.b\n ', 1], [['bXY.b\n', 0], [' ', 1]]), ('partial-repair probe', ['\n\raa\r\ncY \r\n ', 1], [['\n', 1], ['\r', 1], ['aa\r\n', 0], ['cY \r\n', 0], [' ', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('control layout', ['.a1Y\r\r\nY2a,,,\r\n2', 0], [['.a1Y\r', 0], ['\r\n', 0], ['Y2a,,,\r\n', 1], ['2', 0]]), ('control layout', ['b  \r\nc2,\u202911\na,', 1], [['b  \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]])], [('regression: trailing empty paragraph', ['XY\r \r\n', 0], [['XY\r', 1], [' \r\n', 0]]), ('regression: trailing empty paragraph', ['\n\r\n \nc2\r\n', 0], [['\n', 0], ['\r\n', 0], [' \n', 0], ['c2\r\n', 0]]), ('partial-repair probe', ['\n,Y\u2029 ', 0], [['\n', 0], [',Y\u2029', 1], [' ', 0]]), ('partial-repair probe', [', \n \r\n ', 0], [[', \n', 0], [' \r\n', 0], [' ', 0]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', [',\u2029 Z', 1], [[',\u2029', 1], [' Z', 1]]), ('control layout', [' .X', 0], [[' .X', 1]])], [('regression: trailing empty paragraph', ['\nbcY\n', 1], [['\n', 1], ['bcY\n', 0]]), ('regression: trailing empty paragraph', ['2,\r\n', 0], [['2,\r\n', 0]]), ('partial-repair probe', [', \n \r\n ', 0], [[', \n', 0], [' \r\n', 0], [' ', 0]]), ('partial-repair probe', ['\n,Y\u2029 ', 0], [['\n', 0], [',Y\u2029', 1], [' ', 0]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('control layout', ['1XcXc\r11b', 0], [['1XcXc\r', 1], ['11b', 0]]), ('control layout', ['X.\r\n\r\n\rX,c Y c1', 0], [['X.\r\n', 1], ['\r\n', 0], ['\r', 0], ['X,c Y c1', 1]])], [('regression: trailing empty paragraph', [',,.,Y \u2029', 0], [[',,.,Y \u2029', 1]]), ('regression: trailing empty paragraph', ['b \r\n1\n,\ncbb\n\n!\n\n', 0], [['b \r\n', 0], ['1\n', 0], [',\n', 0], ['cbb\n', 0], ['\n', 0], ['!\n', 0], ['\n', 0]]), ('partial-repair probe', ['\n,Y\u2029 ', 0], [['\n', 0], [',Y\u2029', 1], [' ', 0]]), ('partial-repair probe', ['ZcZ\u2029. !\n ', 0], [['ZcZ\u2029', 1], ['. !\n', 0], [' ', 0]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('control layout', ['2 c.ZZ\n\u2029Y.\n\r\nb2b ', 0], [['2 c.ZZ\n', 0], ['\u2029', 0], ['Y.\n', 1], ['\r\n', 0], ['b2b ', 0]]), ('control layout', [',c2aaYZZ\u2029\r\nX.X', 0], [[',c2aaYZZ\u2029', 0], ['\r\n', 0], ['X.X', 1]])], [('regression: trailing empty paragraph', ['Z\r\r\n\rcX!X12.!.c\u2029', 0], [['Z\r', 1], ['\r\n', 0], ['\r', 0], ['cX!X12.!.c\u2029', 0]]), ('regression: trailing empty paragraph', [' Y,1Y\n\r\n', 1], [[' Y,1Y\n', 1], ['\r\n', 1]]), ('partial-repair probe', [', \n \r\n ', 0], [[', \n', 0], [' \r\n', 0], [' ', 0]]), ('partial-repair probe', ['bXY.b\n ', 1], [['bXY.b\n', 0], [' ', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', ['\nYc!', 0], [['\n', 0], ['Yc!', 1]]), ('control layout', ['Z,!', 0], [['Z,!', 1]])]]
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
digits then letter[['12 X\n', 1]][['12 X\n', 1]]Passed
regression: trailing empty paragraph[['.b\r\n', 0], ['1\r', 0]][['.b\r\n', 0], ['1\r', 0]]Passed
partial-repair probe[['bXY.b\n', 0]][['bXY.b\n', 0], [' ', 1]]Failed
partial-repair probe[['\n', 1], ['\r', 1], ['aa\r\n', 0], ['cY \r\n', 0]][['\n', 1], ['\r', 1], ['aa\r\n', 0], ['cY \r\n', 0], [' ', 1]]Failed
CRLF is one separator[['ab\r\n', 0], ['XY', 1]][['ab\r\n', 0], ['XY', 1]]Passed
separator only paragraph[['a\n', 0], ['\n', 1], ['Z', 1]][['a\n', 0], ['\n', 1], ['Z', 1]]Passed
control layout[['.a1Y\r', 0], ['\r\n', 0], ['Y2a,,,\r\n', 1], ['2', 0]][['.a1Y\r', 0], ['\r\n', 0], ['Y2a,,,\r\n', 1], ['2', 0]]Passed
control layout[['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]][['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]]Passed

SHA-256 / 2e6865a14be495e596e6f61f58c393f47c6143c1e337058dd65dbc0be0f158e6

3 / The verified repair

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

N = 1
observations = []
def solve(x):
    text, default = x
    paras = []
    cur = ''
    i = 0
    while i < len(text):
        ch = text[i]
        if ch == '\r' and text[i + 1:i + 2] == '\n':
            cur += '\r\n'
            paras.append(cur)
            cur = ''
            i += 2
            continue
        cur += ch
        if ch in '\n\r\u2029':
            paras.append(cur)
            cur = ''
        i += 1
    if cur:
        paras.append(cur)
    out = []
    for p in paras:
        level = default
        for ch in p:
            if ch.isalpha():
                level = 1 if ch.isupper() else 0
                break
        out.append([p, level])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('regression: trailing empty paragraph', ['.b\r\n1\r', 0], [['.b\r\n', 0], ['1\r', 0]]), ('partial-repair probe', ['bXY.b\n ', 1], [['bXY.b\n', 0], [' ', 1]]), ('partial-repair probe', ['\n\raa\r\ncY \r\n ', 1], [['\n', 1], ['\r', 1], ['aa\r\n', 0], ['cY \r\n', 0], [' ', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('control layout', ['.a1Y\r\r\nY2a,,,\r\n2', 0], [['.a1Y\r', 0], ['\r\n', 0], ['Y2a,,,\r\n', 1], ['2', 0]]), ('control layout', ['b  \r\nc2,\u202911\na,', 1], [['b  \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]])], [('regression: trailing empty paragraph', ['XY\r \r\n', 0], [['XY\r', 1], [' \r\n', 0]]), ('regression: trailing empty paragraph', ['\n\r\n \nc2\r\n', 0], [['\n', 0], ['\r\n', 0], [' \n', 0], ['c2\r\n', 0]]), ('partial-repair probe', ['\n,Y\u2029 ', 0], [['\n', 0], [',Y\u2029', 1], [' ', 0]]), ('partial-repair probe', [', \n \r\n ', 0], [[', \n', 0], [' \r\n', 0], [' ', 0]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', [',\u2029 Z', 1], [[',\u2029', 1], [' Z', 1]]), ('control layout', [' .X', 0], [[' .X', 1]])], [('regression: trailing empty paragraph', ['\nbcY\n', 1], [['\n', 1], ['bcY\n', 0]]), ('regression: trailing empty paragraph', ['2,\r\n', 0], [['2,\r\n', 0]]), ('partial-repair probe', [', \n \r\n ', 0], [[', \n', 0], [' \r\n', 0], [' ', 0]]), ('partial-repair probe', ['\n,Y\u2029 ', 0], [['\n', 0], [',Y\u2029', 1], [' ', 0]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('control layout', ['1XcXc\r11b', 0], [['1XcXc\r', 1], ['11b', 0]]), ('control layout', ['X.\r\n\r\n\rX,c Y c1', 0], [['X.\r\n', 1], ['\r\n', 0], ['\r', 0], ['X,c Y c1', 1]])], [('regression: trailing empty paragraph', [',,.,Y \u2029', 0], [[',,.,Y \u2029', 1]]), ('regression: trailing empty paragraph', ['b \r\n1\n,\ncbb\n\n!\n\n', 0], [['b \r\n', 0], ['1\n', 0], [',\n', 0], ['cbb\n', 0], ['\n', 0], ['!\n', 0], ['\n', 0]]), ('partial-repair probe', ['\n,Y\u2029 ', 0], [['\n', 0], [',Y\u2029', 1], [' ', 0]]), ('partial-repair probe', ['ZcZ\u2029. !\n ', 0], [['ZcZ\u2029', 1], ['. !\n', 0], [' ', 0]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('control layout', ['2 c.ZZ\n\u2029Y.\n\r\nb2b ', 0], [['2 c.ZZ\n', 0], ['\u2029', 0], ['Y.\n', 1], ['\r\n', 0], ['b2b ', 0]]), ('control layout', [',c2aaYZZ\u2029\r\nX.X', 0], [[',c2aaYZZ\u2029', 0], ['\r\n', 0], ['X.X', 1]])], [('regression: trailing empty paragraph', ['Z\r\r\n\rcX!X12.!.c\u2029', 0], [['Z\r', 1], ['\r\n', 0], ['\r', 0], ['cX!X12.!.c\u2029', 0]]), ('regression: trailing empty paragraph', [' Y,1Y\n\r\n', 1], [[' Y,1Y\n', 1], ['\r\n', 1]]), ('partial-repair probe', [', \n \r\n ', 0], [[', \n', 0], [' \r\n', 0], [' ', 0]]), ('partial-repair probe', ['bXY.b\n ', 1], [['bXY.b\n', 0], [' ', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', ['\nYc!', 0], [['\n', 0], ['Yc!', 1]]), ('control layout', ['Z,!', 0], [['Z,!', 1]])]]
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
digits then letter[['12 X\n', 1]][['12 X\n', 1]]Passed
regression: trailing empty paragraph[['.b\r\n', 0], ['1\r', 0]][['.b\r\n', 0], ['1\r', 0]]Passed
partial-repair probe[['bXY.b\n', 0], [' ', 1]][['bXY.b\n', 0], [' ', 1]]Passed
partial-repair probe[['\n', 1], ['\r', 1], ['aa\r\n', 0], ['cY \r\n', 0], [' ', 1]][['\n', 1], ['\r', 1], ['aa\r\n', 0], ['cY \r\n', 0], [' ', 1]]Passed
CRLF is one separator[['ab\r\n', 0], ['XY', 1]][['ab\r\n', 0], ['XY', 1]]Passed
separator only paragraph[['a\n', 0], ['\n', 1], ['Z', 1]][['a\n', 0], ['\n', 1], ['Z', 1]]Passed
control layout[['.a1Y\r', 0], ['\r\n', 0], ['Y2a,,,\r\n', 1], ['2', 0]][['.a1Y\r', 0], ['\r\n', 0], ['Y2a,,,\r\n', 1], ['2', 0]]Passed
control layout[['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]][['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]]Passed

SHA-256 / 8f1416a3ab8548a378d73a96db2baae508d953eb841a15ed3bf56a035ab88d6d

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

Case digest / 3f6184d27bc2b148609a6e7424173473d2e1c16c221d9eb7802812b6e82a6509