FAILURE MAP
← Case archive

FA-80811 / Bidirectional text layout / Open access

Paragraph separation and direction: CRLF pairing · case 01

Windows line endings create an extra empty paragraph.

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

ROOT CAUSE

The pair check looks for LF followed by CR.

VERIFIED REPAIR

Treat CR immediately followed by LF as one separator.

Unsuccessful approach: Looking for CR CR never matches CRLF either.

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 == '\n' and text[i + 1:i + 2] == '\r':
            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 = [[('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('regression: CRLF pairing', ['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]]), ('regression: CRLF pairing', ['a  \r\n1', 1], [['a  \r\n', 0], ['1', 1]]), ('regression: CRLF pairing', ['!c\r\nXc..\u2029ZbZ', 0], [['!c\r\n', 0], ['Xc..\u2029', 1], ['ZbZ', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', ['\r,cb\r\u2029a\n.Z\r', 1], [['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]]), ('control layout', ['\nY\n', 0], [['\n', 0], ['Y\n', 1]])], [('regression: CRLF pairing', ['.\r\nb\n\r\nYc\nb\r\r\nb\nYY', 0], [['.\r\n', 0], ['b\n', 0], ['\r\n', 0], ['Yc\n', 1], ['b\r', 0], ['\r\n', 0], ['b\n', 0], ['YY', 1]]), ('regression: CRLF pairing', ['Z\n1\r\n!2X', 0], [['Z\n', 1], ['1\r\n', 0], ['!2X', 1]]), ('regression: CRLF pairing', ['aYYX1.b\r\n.', 1], [['aYYX1.b\r\n', 0], ['.', 1]]), ('regression: CRLF pairing', ['!c\n\n\r\naY', 1], [['!c\n', 0], ['\n', 1], ['\r\n', 1], ['aY', 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', [',bXX!Z!2b.\u2029\nc', 1], [[',bXX!Z!2b.\u2029', 0], ['\n', 1], ['c', 0]]), ('control layout', ['2\nZ\nX\nX', 1], [['2\n', 1], ['Z\n', 1], ['X\n', 1], ['X', 1]])], [('regression: CRLF pairing', ['\r\n1,X1 \r\n.b,', 1], [['\r\n', 1], ['1,X1 \r\n', 1], ['.b,', 0]]), ('regression: CRLF pairing', ['b  \r\nc2,\u202911\na,', 1], [['b  \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]]), ('regression: CRLF pairing', ['!Ya\nb,\n!,\u2029\r\n1cYca', 0], [['!Ya\n', 1], ['b,\n', 0], ['!,\u2029', 0], ['\r\n', 0], ['1cYca', 0]]), ('regression: CRLF pairing', ['!c\n\n\r\naY', 1], [['!c\n', 0], ['\n', 1], ['\r\n', 1], ['aY', 0]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('control layout', ['\n!\r.aca1X,Yc ', 0], [['\n', 0], ['!\r', 0], ['.aca1X,Yc ', 0]]), ('control layout', ['Xac!\nZ2\u2029aYa.\r,Z!', 0], [['Xac!\n', 1], ['Z2\u2029', 1], ['aYa.\r', 0], [',Z!', 1]])], [('regression: CRLF pairing', ['a\rY,!c,2 \nc\nXb\r\nc', 1], [['a\r', 0], ['Y,!c,2 \n', 1], ['c\n', 0], ['Xb\r\n', 1], ['c', 0]]), ('regression: CRLF pairing', ['Y\n\r\nX1ZYXZ1\n', 1], [['Y\n', 1], ['\r\n', 1], ['X1ZYXZ1\n', 1]]), ('regression: CRLF pairing', ['a!Y\r\naZZ. XXY \n\n\n', 1], [['a!Y\r\n', 0], ['aZZ. XXY \n', 0], ['\n', 1], ['\n', 1]]), ('regression: CRLF pairing', ['aa\r\naa\nY.cb1b', 1], [['aa\r\n', 0], ['aa\n', 0], ['Y.cb1b', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', ['cZ!', 0], [['cZ!', 0]]), ('control layout', ['1 a!.\u2029\nc1X 1YZa1', 1], [['1 a!.\u2029', 0], ['\n', 1], ['c1X 1YZa1', 0]])], [('regression: CRLF pairing', ['\ra\u2029\r\n11Z\r\n2,Xc 1\n', 1], [['\r', 1], ['a\u2029', 0], ['\r\n', 1], ['11Z\r\n', 1], ['2,Xc 1\n', 1]]), ('regression: CRLF pairing', ['Ya\nb c,,,a1\r\n\r\n\n\u2029\n', 0], [['Ya\n', 1], ['b c,,,a1\r\n', 0], ['\r\n', 0], ['\n', 0], ['\u2029', 0], ['\n', 0]]), ('regression: CRLF pairing', ['\r\n.! 12\u2029\n', 1], [['\r\n', 1], ['.! 12\u2029', 1], ['\n', 1]]), ('regression: CRLF pairing', ['Y1Y2!\r\r\n c', 0], [['Y1Y2!\r', 1], ['\r\n', 0], [' c', 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', ['\n ..Y\n.,2\nY', 1], [['\n', 1], [' ..Y\n', 1], ['.,2\n', 1], ['Y', 1]]), ('control layout', ['\n\n1abb\u2029X', 0], [['\n', 0], ['\n', 0], ['1abb\u2029', 0], ['X', 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
CRLF is one separator[['ab\r', 0], ['\n', 0], ['XY', 1]][['ab\r\n', 0], ['XY', 1]]Failed
regression: CRLF pairing[['b \r', 0], ['\n', 0], ['1\n', 0], [',\n', 0], ['cbb\n', 0], ['\n', 0], ['!\n', 0], ['\n', 0]][['b \r\n', 0], ['1\n', 0], [',\n', 0], ['cbb\n', 0], ['\n', 0], ['!\n', 0], ['\n', 0]]Failed
regression: CRLF pairing[['a \r', 0], ['\n', 1], ['1', 1]][['a \r\n', 0], ['1', 1]]Failed
regression: CRLF pairing[['!c\r', 0], ['\n', 0], ['Xc..\u2029', 1], ['ZbZ', 1]][['!c\r\n', 0], ['Xc..\u2029', 1], ['ZbZ', 1]]Failed
separator only paragraph[['a\n', 0], ['\n', 1], ['Z', 1]][['a\n', 0], ['\n', 1], ['Z', 1]]Passed
digits then letter[['12 X\n', 1]][['12 X\n', 1]]Passed
control layout[['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]][['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]]Passed
control layout[['\n', 0], ['Y\n', 1]][['\n', 0], ['Y\n', 1]]Passed

SHA-256 / 691d267ade6cd8a6a06522b6f045ef06026a84789b13099d0e09f024fea3c5a7

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] == '\r':
            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 = [[('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('regression: CRLF pairing', ['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]]), ('regression: CRLF pairing', ['a  \r\n1', 1], [['a  \r\n', 0], ['1', 1]]), ('regression: CRLF pairing', ['!c\r\nXc..\u2029ZbZ', 0], [['!c\r\n', 0], ['Xc..\u2029', 1], ['ZbZ', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', ['\r,cb\r\u2029a\n.Z\r', 1], [['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]]), ('control layout', ['\nY\n', 0], [['\n', 0], ['Y\n', 1]])], [('regression: CRLF pairing', ['.\r\nb\n\r\nYc\nb\r\r\nb\nYY', 0], [['.\r\n', 0], ['b\n', 0], ['\r\n', 0], ['Yc\n', 1], ['b\r', 0], ['\r\n', 0], ['b\n', 0], ['YY', 1]]), ('regression: CRLF pairing', ['Z\n1\r\n!2X', 0], [['Z\n', 1], ['1\r\n', 0], ['!2X', 1]]), ('regression: CRLF pairing', ['aYYX1.b\r\n.', 1], [['aYYX1.b\r\n', 0], ['.', 1]]), ('regression: CRLF pairing', ['!c\n\n\r\naY', 1], [['!c\n', 0], ['\n', 1], ['\r\n', 1], ['aY', 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', [',bXX!Z!2b.\u2029\nc', 1], [[',bXX!Z!2b.\u2029', 0], ['\n', 1], ['c', 0]]), ('control layout', ['2\nZ\nX\nX', 1], [['2\n', 1], ['Z\n', 1], ['X\n', 1], ['X', 1]])], [('regression: CRLF pairing', ['\r\n1,X1 \r\n.b,', 1], [['\r\n', 1], ['1,X1 \r\n', 1], ['.b,', 0]]), ('regression: CRLF pairing', ['b  \r\nc2,\u202911\na,', 1], [['b  \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]]), ('regression: CRLF pairing', ['!Ya\nb,\n!,\u2029\r\n1cYca', 0], [['!Ya\n', 1], ['b,\n', 0], ['!,\u2029', 0], ['\r\n', 0], ['1cYca', 0]]), ('regression: CRLF pairing', ['!c\n\n\r\naY', 1], [['!c\n', 0], ['\n', 1], ['\r\n', 1], ['aY', 0]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('control layout', ['\n!\r.aca1X,Yc ', 0], [['\n', 0], ['!\r', 0], ['.aca1X,Yc ', 0]]), ('control layout', ['Xac!\nZ2\u2029aYa.\r,Z!', 0], [['Xac!\n', 1], ['Z2\u2029', 1], ['aYa.\r', 0], [',Z!', 1]])], [('regression: CRLF pairing', ['a\rY,!c,2 \nc\nXb\r\nc', 1], [['a\r', 0], ['Y,!c,2 \n', 1], ['c\n', 0], ['Xb\r\n', 1], ['c', 0]]), ('regression: CRLF pairing', ['Y\n\r\nX1ZYXZ1\n', 1], [['Y\n', 1], ['\r\n', 1], ['X1ZYXZ1\n', 1]]), ('regression: CRLF pairing', ['a!Y\r\naZZ. XXY \n\n\n', 1], [['a!Y\r\n', 0], ['aZZ. XXY \n', 0], ['\n', 1], ['\n', 1]]), ('regression: CRLF pairing', ['aa\r\naa\nY.cb1b', 1], [['aa\r\n', 0], ['aa\n', 0], ['Y.cb1b', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', ['cZ!', 0], [['cZ!', 0]]), ('control layout', ['1 a!.\u2029\nc1X 1YZa1', 1], [['1 a!.\u2029', 0], ['\n', 1], ['c1X 1YZa1', 0]])], [('regression: CRLF pairing', ['\ra\u2029\r\n11Z\r\n2,Xc 1\n', 1], [['\r', 1], ['a\u2029', 0], ['\r\n', 1], ['11Z\r\n', 1], ['2,Xc 1\n', 1]]), ('regression: CRLF pairing', ['Ya\nb c,,,a1\r\n\r\n\n\u2029\n', 0], [['Ya\n', 1], ['b c,,,a1\r\n', 0], ['\r\n', 0], ['\n', 0], ['\u2029', 0], ['\n', 0]]), ('regression: CRLF pairing', ['\r\n.! 12\u2029\n', 1], [['\r\n', 1], ['.! 12\u2029', 1], ['\n', 1]]), ('regression: CRLF pairing', ['Y1Y2!\r\r\n c', 0], [['Y1Y2!\r', 1], ['\r\n', 0], [' c', 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', ['\n ..Y\n.,2\nY', 1], [['\n', 1], [' ..Y\n', 1], ['.,2\n', 1], ['Y', 1]]), ('control layout', ['\n\n1abb\u2029X', 0], [['\n', 0], ['\n', 0], ['1abb\u2029', 0], ['X', 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
CRLF is one separator[['ab\r', 0], ['\n', 0], ['XY', 1]][['ab\r\n', 0], ['XY', 1]]Failed
regression: CRLF pairing[['b \r', 0], ['\n', 0], ['1\n', 0], [',\n', 0], ['cbb\n', 0], ['\n', 0], ['!\n', 0], ['\n', 0]][['b \r\n', 0], ['1\n', 0], [',\n', 0], ['cbb\n', 0], ['\n', 0], ['!\n', 0], ['\n', 0]]Failed
regression: CRLF pairing[['a \r', 0], ['\n', 1], ['1', 1]][['a \r\n', 0], ['1', 1]]Failed
regression: CRLF pairing[['!c\r', 0], ['\n', 0], ['Xc..\u2029', 1], ['ZbZ', 1]][['!c\r\n', 0], ['Xc..\u2029', 1], ['ZbZ', 1]]Failed
separator only paragraph[['a\n', 0], ['\n', 1], ['Z', 1]][['a\n', 0], ['\n', 1], ['Z', 1]]Passed
digits then letter[['12 X\n', 1]][['12 X\n', 1]]Passed
control layout[['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]][['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]]Passed
control layout[['\n', 0], ['Y\n', 1]][['\n', 0], ['Y\n', 1]]Passed

SHA-256 / a19fd5d02074963585773fbd1f38072cc543c3fc83a1272daa86ebced973f054

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 = [[('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('regression: CRLF pairing', ['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]]), ('regression: CRLF pairing', ['a  \r\n1', 1], [['a  \r\n', 0], ['1', 1]]), ('regression: CRLF pairing', ['!c\r\nXc..\u2029ZbZ', 0], [['!c\r\n', 0], ['Xc..\u2029', 1], ['ZbZ', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', ['\r,cb\r\u2029a\n.Z\r', 1], [['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]]), ('control layout', ['\nY\n', 0], [['\n', 0], ['Y\n', 1]])], [('regression: CRLF pairing', ['.\r\nb\n\r\nYc\nb\r\r\nb\nYY', 0], [['.\r\n', 0], ['b\n', 0], ['\r\n', 0], ['Yc\n', 1], ['b\r', 0], ['\r\n', 0], ['b\n', 0], ['YY', 1]]), ('regression: CRLF pairing', ['Z\n1\r\n!2X', 0], [['Z\n', 1], ['1\r\n', 0], ['!2X', 1]]), ('regression: CRLF pairing', ['aYYX1.b\r\n.', 1], [['aYYX1.b\r\n', 0], ['.', 1]]), ('regression: CRLF pairing', ['!c\n\n\r\naY', 1], [['!c\n', 0], ['\n', 1], ['\r\n', 1], ['aY', 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', [',bXX!Z!2b.\u2029\nc', 1], [[',bXX!Z!2b.\u2029', 0], ['\n', 1], ['c', 0]]), ('control layout', ['2\nZ\nX\nX', 1], [['2\n', 1], ['Z\n', 1], ['X\n', 1], ['X', 1]])], [('regression: CRLF pairing', ['\r\n1,X1 \r\n.b,', 1], [['\r\n', 1], ['1,X1 \r\n', 1], ['.b,', 0]]), ('regression: CRLF pairing', ['b  \r\nc2,\u202911\na,', 1], [['b  \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]]), ('regression: CRLF pairing', ['!Ya\nb,\n!,\u2029\r\n1cYca', 0], [['!Ya\n', 1], ['b,\n', 0], ['!,\u2029', 0], ['\r\n', 0], ['1cYca', 0]]), ('regression: CRLF pairing', ['!c\n\n\r\naY', 1], [['!c\n', 0], ['\n', 1], ['\r\n', 1], ['aY', 0]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('CRLF is one separator', ['ab\r\nXY', 0], [['ab\r\n', 0], ['XY', 1]]), ('control layout', ['\n!\r.aca1X,Yc ', 0], [['\n', 0], ['!\r', 0], ['.aca1X,Yc ', 0]]), ('control layout', ['Xac!\nZ2\u2029aYa.\r,Z!', 0], [['Xac!\n', 1], ['Z2\u2029', 1], ['aYa.\r', 0], [',Z!', 1]])], [('regression: CRLF pairing', ['a\rY,!c,2 \nc\nXb\r\nc', 1], [['a\r', 0], ['Y,!c,2 \n', 1], ['c\n', 0], ['Xb\r\n', 1], ['c', 0]]), ('regression: CRLF pairing', ['Y\n\r\nX1ZYXZ1\n', 1], [['Y\n', 1], ['\r\n', 1], ['X1ZYXZ1\n', 1]]), ('regression: CRLF pairing', ['a!Y\r\naZZ. XXY \n\n\n', 1], [['a!Y\r\n', 0], ['aZZ. XXY \n', 0], ['\n', 1], ['\n', 1]]), ('regression: CRLF pairing', ['aa\r\naa\nY.cb1b', 1], [['aa\r\n', 0], ['aa\n', 0], ['Y.cb1b', 1]]), ('separator only paragraph', ['a\n\nZ', 1], [['a\n', 0], ['\n', 1], ['Z', 1]]), ('digits then letter', ['12 X\n', 0], [['12 X\n', 1]]), ('control layout', ['cZ!', 0], [['cZ!', 0]]), ('control layout', ['1 a!.\u2029\nc1X 1YZa1', 1], [['1 a!.\u2029', 0], ['\n', 1], ['c1X 1YZa1', 0]])], [('regression: CRLF pairing', ['\ra\u2029\r\n11Z\r\n2,Xc 1\n', 1], [['\r', 1], ['a\u2029', 0], ['\r\n', 1], ['11Z\r\n', 1], ['2,Xc 1\n', 1]]), ('regression: CRLF pairing', ['Ya\nb c,,,a1\r\n\r\n\n\u2029\n', 0], [['Ya\n', 1], ['b c,,,a1\r\n', 0], ['\r\n', 0], ['\n', 0], ['\u2029', 0], ['\n', 0]]), ('regression: CRLF pairing', ['\r\n.! 12\u2029\n', 1], [['\r\n', 1], ['.! 12\u2029', 1], ['\n', 1]]), ('regression: CRLF pairing', ['Y1Y2!\r\r\n c', 0], [['Y1Y2!\r', 1], ['\r\n', 0], [' c', 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', ['\n ..Y\n.,2\nY', 1], [['\n', 1], [' ..Y\n', 1], ['.,2\n', 1], ['Y', 1]]), ('control layout', ['\n\n1abb\u2029X', 0], [['\n', 0], ['\n', 0], ['1abb\u2029', 0], ['X', 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
CRLF is one separator[['ab\r\n', 0], ['XY', 1]][['ab\r\n', 0], ['XY', 1]]Passed
regression: CRLF pairing[['b \r\n', 0], ['1\n', 0], [',\n', 0], ['cbb\n', 0], ['\n', 0], ['!\n', 0], ['\n', 0]][['b \r\n', 0], ['1\n', 0], [',\n', 0], ['cbb\n', 0], ['\n', 0], ['!\n', 0], ['\n', 0]]Passed
regression: CRLF pairing[['a \r\n', 0], ['1', 1]][['a \r\n', 0], ['1', 1]]Passed
regression: CRLF pairing[['!c\r\n', 0], ['Xc..\u2029', 1], ['ZbZ', 1]][['!c\r\n', 0], ['Xc..\u2029', 1], ['ZbZ', 1]]Passed
separator only paragraph[['a\n', 0], ['\n', 1], ['Z', 1]][['a\n', 0], ['\n', 1], ['Z', 1]]Passed
digits then letter[['12 X\n', 1]][['12 X\n', 1]]Passed
control layout[['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]][['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]]Passed
control layout[['\n', 0], ['Y\n', 1]][['\n', 0], ['Y\n', 1]]Passed

SHA-256 / 09e26bac9b679e89aeb958669076abc4fb2e0deefbfc0fdb94f7edfae8f7d751

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

Case digest / 585f8d91ad95fb78e99422f6e2bf5abe4526790cbc437216197cff2b5269be7f