FA-80836 / Bidirectional text layout / Open access
Paragraph separation and direction: strong character test · case 01
Paragraphs starting with digits or punctuation are forced LTR.
ROOT CAUSE
Digits are accepted as strong characters.
VERIFIED REPAIR
Only letters decide the paragraph level.
Unsuccessful approach: Accepting any non-space character lets punctuation decide.
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
if cur:
paras.append(cur)
out = []
for p in paras:
level = default
for ch in p:
if ch.isalnum():
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: strong character test', [' ,.1ZaYZ,,2ca1', 1], [[' ,.1ZaYZ,,2ca1', 1]]), ('regression: strong character test', ['b \r\nc2,\u202911\na,', 1], [['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]]), ('partial-repair probe', ['\ncZ2.\na..X!\n!Z,.', 0], [['\n', 0], ['cZ2.\n', 0], ['a..X!\n', 0], ['!Z,.', 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', ['YX\na\r\n \naZa', 0], [['YX\n', 1], ['a\r\n', 0], [' \n', 0], ['aZa', 0]]), ('control layout', ['\n\r\nb\n', 1], [['\n', 1], ['\r\n', 1], ['b\n', 0]])], [('regression: strong character test', ['\r\n1,X1 \r\n.b,', 1], [['\r\n', 1], ['1,X1 \r\n', 1], ['.b,', 0]]), ('regression: strong character test', ['2\nX\r\n\naX\r\nb\nY', 1], [['2\n', 1], ['X\r\n', 1], ['\n', 1], ['aX\r\n', 0], ['b\n', 0], ['Y', 1]]), ('partial-repair probe', ['Xac!\nZ2\u2029aYa.\r,Z!', 0], [['Xac!\n', 1], ['Z2\u2029', 1], ['aYa.\r', 0], [',Z!', 1]]), ('regression: strong character test', ['1!X\r\n', 1], [['1!X\r\n', 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', ['\n.! 1!b!,21Z\n1', 0], [['\n', 0], ['.! 1!b!,21Z\n', 0], ['1', 0]]), ('control layout', ['a\r\n\nY1X111,2Z', 1], [['a\r\n', 0], ['\n', 1], ['Y1X111,2Z', 1]])], [('regression: strong character test', ['2X1aXb 2!Z2,\rX', 1], [['2X1aXb 2!Z2,\r', 1], ['X', 1]]), ('regression: strong character test', ['12. \r\n', 1], [['12. \r\n', 1]]), ('partial-repair probe', ['\r,cb\r\u2029a\n.Z\r', 1], [['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]]), ('regression: strong character test', ['!c\r\n2bb\n22', 1], [['!c\r\n', 0], ['2bb\n', 0], ['22', 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', ['Z.1bYYb!ZYXZ\rZ', 1], [['Z.1bYYb!ZYXZ\r', 1], ['Z', 1]]), ('control layout', ['cZ!', 0], [['cZ!', 0]])], [('regression: strong character test', ['1XZ. ', 0], [['1XZ. ', 1]]), ('regression: strong character test', ['a \n\n,\n,1\r\n\ncXccZX', 1], [['a \n', 0], ['\n', 1], [',\n', 1], [',1\r\n', 1], ['\n', 1], ['cXccZX', 0]]), ('partial-repair probe', ['\r\nc2\r.\nXY!Z\u2029Xa', 1], [['\r\n', 1], ['c2\r', 0], ['.\n', 1], ['XY!Z\u2029', 1], ['Xa', 1]]), ('regression: strong character test', ['2\r\n\r\n!,!Y\u2029', 1], [['2\r\n', 1], ['\r\n', 1], ['!,!Y\u2029', 1]]), ('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', ['aXb\u2029 b\na1b\n', 0], [['aXb\u2029', 0], [' b\n', 0], ['a1b\n', 0]]), ('control layout', ['aXXa,\n\r\n\n\n ,', 0], [['aXXa,\n', 0], ['\r\n', 0], ['\n', 0], ['\n', 0], [' ,', 0]])], [('regression: strong character test', ['Z.,\n\n2Y\r!b,', 1], [['Z.,\n', 1], ['\n', 1], ['2Y\r', 1], ['!b,', 0]]), ('regression: strong character test', ['Y\n c\u20291 ', 1], [['Y\n', 1], [' c\u2029', 0], ['1 ', 1]]), ('regression: strong character test', ['XX\r\nc!,,1\n.1,Y', 0], [['XX\r\n', 1], ['c!,,1\n', 0], ['.1,Y', 1]]), ('regression: strong character test', ['.\r! \n22,\n.XYb', 1], [['.\r', 1], ['! \n', 1], ['22,\n', 1], ['.XYb', 1]]), ('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', ['ZZc!,Z ', 1], [['ZZc!,Z ', 1]]), ('control layout', ['!\r,', 0], [['!\r', 0], [',', 0]])]]
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 |
|---|---|---|---|
| digits then letter | [['12 X\n', 0]] | [['12 X\n', 1]] | Failed |
| regression: strong character test | [[' ,.1ZaYZ,,2ca1', 0]] | [[' ,.1ZaYZ,,2ca1', 1]] | Failed |
| regression: strong character test | [['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 0], ['a,', 0]] | [['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]] | Failed |
| partial-repair probe | [['\n', 0], ['cZ2.\n', 0], ['a..X!\n', 0], ['!Z,.', 1]] | [['\n', 0], ['cZ2.\n', 0], ['a..X!\n', 0], ['!Z,.', 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 | [['YX\n', 1], ['a\r\n', 0], [' \n', 0], ['aZa', 0]] | [['YX\n', 1], ['a\r\n', 0], [' \n', 0], ['aZa', 0]] | Passed |
| control layout | [['\n', 1], ['\r\n', 1], ['b\n', 0]] | [['\n', 1], ['\r\n', 1], ['b\n', 0]] | Passed |
SHA-256 / 52e8c3d31a023df3e1ca48169ddad23ebbdb1d225176297a68f00f2240a43d0c
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:
paras.append(cur)
out = []
for p in paras:
level = default
for ch in p:
if not ch.isspace():
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: strong character test', [' ,.1ZaYZ,,2ca1', 1], [[' ,.1ZaYZ,,2ca1', 1]]), ('regression: strong character test', ['b \r\nc2,\u202911\na,', 1], [['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]]), ('partial-repair probe', ['\ncZ2.\na..X!\n!Z,.', 0], [['\n', 0], ['cZ2.\n', 0], ['a..X!\n', 0], ['!Z,.', 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', ['YX\na\r\n \naZa', 0], [['YX\n', 1], ['a\r\n', 0], [' \n', 0], ['aZa', 0]]), ('control layout', ['\n\r\nb\n', 1], [['\n', 1], ['\r\n', 1], ['b\n', 0]])], [('regression: strong character test', ['\r\n1,X1 \r\n.b,', 1], [['\r\n', 1], ['1,X1 \r\n', 1], ['.b,', 0]]), ('regression: strong character test', ['2\nX\r\n\naX\r\nb\nY', 1], [['2\n', 1], ['X\r\n', 1], ['\n', 1], ['aX\r\n', 0], ['b\n', 0], ['Y', 1]]), ('partial-repair probe', ['Xac!\nZ2\u2029aYa.\r,Z!', 0], [['Xac!\n', 1], ['Z2\u2029', 1], ['aYa.\r', 0], [',Z!', 1]]), ('regression: strong character test', ['1!X\r\n', 1], [['1!X\r\n', 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', ['\n.! 1!b!,21Z\n1', 0], [['\n', 0], ['.! 1!b!,21Z\n', 0], ['1', 0]]), ('control layout', ['a\r\n\nY1X111,2Z', 1], [['a\r\n', 0], ['\n', 1], ['Y1X111,2Z', 1]])], [('regression: strong character test', ['2X1aXb 2!Z2,\rX', 1], [['2X1aXb 2!Z2,\r', 1], ['X', 1]]), ('regression: strong character test', ['12. \r\n', 1], [['12. \r\n', 1]]), ('partial-repair probe', ['\r,cb\r\u2029a\n.Z\r', 1], [['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]]), ('regression: strong character test', ['!c\r\n2bb\n22', 1], [['!c\r\n', 0], ['2bb\n', 0], ['22', 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', ['Z.1bYYb!ZYXZ\rZ', 1], [['Z.1bYYb!ZYXZ\r', 1], ['Z', 1]]), ('control layout', ['cZ!', 0], [['cZ!', 0]])], [('regression: strong character test', ['1XZ. ', 0], [['1XZ. ', 1]]), ('regression: strong character test', ['a \n\n,\n,1\r\n\ncXccZX', 1], [['a \n', 0], ['\n', 1], [',\n', 1], [',1\r\n', 1], ['\n', 1], ['cXccZX', 0]]), ('partial-repair probe', ['\r\nc2\r.\nXY!Z\u2029Xa', 1], [['\r\n', 1], ['c2\r', 0], ['.\n', 1], ['XY!Z\u2029', 1], ['Xa', 1]]), ('regression: strong character test', ['2\r\n\r\n!,!Y\u2029', 1], [['2\r\n', 1], ['\r\n', 1], ['!,!Y\u2029', 1]]), ('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', ['aXb\u2029 b\na1b\n', 0], [['aXb\u2029', 0], [' b\n', 0], ['a1b\n', 0]]), ('control layout', ['aXXa,\n\r\n\n\n ,', 0], [['aXXa,\n', 0], ['\r\n', 0], ['\n', 0], ['\n', 0], [' ,', 0]])], [('regression: strong character test', ['Z.,\n\n2Y\r!b,', 1], [['Z.,\n', 1], ['\n', 1], ['2Y\r', 1], ['!b,', 0]]), ('regression: strong character test', ['Y\n c\u20291 ', 1], [['Y\n', 1], [' c\u2029', 0], ['1 ', 1]]), ('regression: strong character test', ['XX\r\nc!,,1\n.1,Y', 0], [['XX\r\n', 1], ['c!,,1\n', 0], ['.1,Y', 1]]), ('regression: strong character test', ['.\r! \n22,\n.XYb', 1], [['.\r', 1], ['! \n', 1], ['22,\n', 1], ['.XYb', 1]]), ('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', ['ZZc!,Z ', 1], [['ZZc!,Z ', 1]]), ('control layout', ['!\r,', 0], [['!\r', 0], [',', 0]])]]
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 |
|---|---|---|---|
| digits then letter | [['12 X\n', 0]] | [['12 X\n', 1]] | Failed |
| regression: strong character test | [[' ,.1ZaYZ,,2ca1', 0]] | [[' ,.1ZaYZ,,2ca1', 1]] | Failed |
| regression: strong character test | [['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 0], ['a,', 0]] | [['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]] | Failed |
| partial-repair probe | [['\n', 0], ['cZ2.\n', 0], ['a..X!\n', 0], ['!Z,.', 0]] | [['\n', 0], ['cZ2.\n', 0], ['a..X!\n', 0], ['!Z,.', 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 | [['YX\n', 1], ['a\r\n', 0], [' \n', 0], ['aZa', 0]] | [['YX\n', 1], ['a\r\n', 0], [' \n', 0], ['aZa', 0]] | Passed |
| control layout | [['\n', 1], ['\r\n', 1], ['b\n', 0]] | [['\n', 1], ['\r\n', 1], ['b\n', 0]] | Passed |
SHA-256 / 8310ebf18b8c10d93bd47d562ecc7a201d011776f0053c7a2e13df2d73507b88
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: strong character test', [' ,.1ZaYZ,,2ca1', 1], [[' ,.1ZaYZ,,2ca1', 1]]), ('regression: strong character test', ['b \r\nc2,\u202911\na,', 1], [['b \r\n', 0], ['c2,\u2029', 0], ['11\n', 1], ['a,', 0]]), ('partial-repair probe', ['\ncZ2.\na..X!\n!Z,.', 0], [['\n', 0], ['cZ2.\n', 0], ['a..X!\n', 0], ['!Z,.', 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', ['YX\na\r\n \naZa', 0], [['YX\n', 1], ['a\r\n', 0], [' \n', 0], ['aZa', 0]]), ('control layout', ['\n\r\nb\n', 1], [['\n', 1], ['\r\n', 1], ['b\n', 0]])], [('regression: strong character test', ['\r\n1,X1 \r\n.b,', 1], [['\r\n', 1], ['1,X1 \r\n', 1], ['.b,', 0]]), ('regression: strong character test', ['2\nX\r\n\naX\r\nb\nY', 1], [['2\n', 1], ['X\r\n', 1], ['\n', 1], ['aX\r\n', 0], ['b\n', 0], ['Y', 1]]), ('partial-repair probe', ['Xac!\nZ2\u2029aYa.\r,Z!', 0], [['Xac!\n', 1], ['Z2\u2029', 1], ['aYa.\r', 0], [',Z!', 1]]), ('regression: strong character test', ['1!X\r\n', 1], [['1!X\r\n', 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', ['\n.! 1!b!,21Z\n1', 0], [['\n', 0], ['.! 1!b!,21Z\n', 0], ['1', 0]]), ('control layout', ['a\r\n\nY1X111,2Z', 1], [['a\r\n', 0], ['\n', 1], ['Y1X111,2Z', 1]])], [('regression: strong character test', ['2X1aXb 2!Z2,\rX', 1], [['2X1aXb 2!Z2,\r', 1], ['X', 1]]), ('regression: strong character test', ['12. \r\n', 1], [['12. \r\n', 1]]), ('partial-repair probe', ['\r,cb\r\u2029a\n.Z\r', 1], [['\r', 1], [',cb\r', 0], ['\u2029', 1], ['a\n', 0], ['.Z\r', 1]]), ('regression: strong character test', ['!c\r\n2bb\n22', 1], [['!c\r\n', 0], ['2bb\n', 0], ['22', 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', ['Z.1bYYb!ZYXZ\rZ', 1], [['Z.1bYYb!ZYXZ\r', 1], ['Z', 1]]), ('control layout', ['cZ!', 0], [['cZ!', 0]])], [('regression: strong character test', ['1XZ. ', 0], [['1XZ. ', 1]]), ('regression: strong character test', ['a \n\n,\n,1\r\n\ncXccZX', 1], [['a \n', 0], ['\n', 1], [',\n', 1], [',1\r\n', 1], ['\n', 1], ['cXccZX', 0]]), ('partial-repair probe', ['\r\nc2\r.\nXY!Z\u2029Xa', 1], [['\r\n', 1], ['c2\r', 0], ['.\n', 1], ['XY!Z\u2029', 1], ['Xa', 1]]), ('regression: strong character test', ['2\r\n\r\n!,!Y\u2029', 1], [['2\r\n', 1], ['\r\n', 1], ['!,!Y\u2029', 1]]), ('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', ['aXb\u2029 b\na1b\n', 0], [['aXb\u2029', 0], [' b\n', 0], ['a1b\n', 0]]), ('control layout', ['aXXa,\n\r\n\n\n ,', 0], [['aXXa,\n', 0], ['\r\n', 0], ['\n', 0], ['\n', 0], [' ,', 0]])], [('regression: strong character test', ['Z.,\n\n2Y\r!b,', 1], [['Z.,\n', 1], ['\n', 1], ['2Y\r', 1], ['!b,', 0]]), ('regression: strong character test', ['Y\n c\u20291 ', 1], [['Y\n', 1], [' c\u2029', 0], ['1 ', 1]]), ('regression: strong character test', ['XX\r\nc!,,1\n.1,Y', 0], [['XX\r\n', 1], ['c!,,1\n', 0], ['.1,Y', 1]]), ('regression: strong character test', ['.\r! \n22,\n.XYb', 1], [['.\r', 1], ['! \n', 1], ['22,\n', 1], ['.XYb', 1]]), ('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', ['ZZc!,Z ', 1], [['ZZc!,Z ', 1]]), ('control layout', ['!\r,', 0], [['!\r', 0], [',', 0]])]]
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 |
|---|---|---|---|
| digits then letter | [['12 X\n', 1]] | [['12 X\n', 1]] | Passed |
| regression: strong character test | [[' ,.1ZaYZ,,2ca1', 1]] | [[' ,.1ZaYZ,,2ca1', 1]] | Passed |
| regression: strong character test | [['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 |
| partial-repair probe | [['\n', 0], ['cZ2.\n', 0], ['a..X!\n', 0], ['!Z,.', 1]] | [['\n', 0], ['cZ2.\n', 0], ['a..X!\n', 0], ['!Z,.', 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 | [['YX\n', 1], ['a\r\n', 0], [' \n', 0], ['aZa', 0]] | [['YX\n', 1], ['a\r\n', 0], [' \n', 0], ['aZa', 0]] | Passed |
| control layout | [['\n', 1], ['\r\n', 1], ['b\n', 0]] | [['\n', 1], ['\r\n', 1], ['b\n', 0]] | Passed |
SHA-256 / 4069f4bc92c8b4bd8d181f6780dd2148e871688f7d223cc7052d2f1d1981ed13
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.434385+00:00.
Case digest / 647f44932a89cc482a6db8101f8acda967492d6f2827a5f153fd048667cdba8c