{"abstract":"Windows line endings create an extra empty paragraph.","category":"Bidirectional text layout","checks":8,"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]].","evaluation_group":"w2-bidirectional-text-layout-paragraph-split","failed_approach":"Looking for CR CR never matches CRLF either.","family":"w2-bidirectional-text-layout-paragraph-split-crlf-pairing","id":"FA-80811","implementations":{"attempt":{"sha256":"a19fd5d02074963585773fbd1f38072cc543c3fc83a1272daa86ebced973f054","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    text, default = x\n    paras = []\n    cur = ''\n    i = 0\n    while i < len(text):\n        ch = text[i]\n        if ch == '\\r' and text[i + 1:i + 2] == '\\r':\n            cur += '\\r\\n'\n            paras.append(cur)\n            cur = ''\n            i += 2\n            continue\n        cur += ch\n        if ch in '\\n\\r\\u2029':\n            paras.append(cur)\n            cur = ''\n        i += 1\n    if cur:\n        paras.append(cur)\n    out = []\n    for p in paras:\n        level = default\n        for ch in p:\n            if ch.isalpha():\n                level = 1 if ch.isupper() else 0\n                break\n        out.append([p, level])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('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]])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"691d267ade6cd8a6a06522b6f045ef06026a84789b13099d0e09f024fea3c5a7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    text, default = x\n    paras = []\n    cur = ''\n    i = 0\n    while i < len(text):\n        ch = text[i]\n        if ch == '\\n' and text[i + 1:i + 2] == '\\r':\n            cur += '\\r\\n'\n            paras.append(cur)\n            cur = ''\n            i += 2\n            continue\n        cur += ch\n        if ch in '\\n\\r\\u2029':\n            paras.append(cur)\n            cur = ''\n        i += 1\n    if cur:\n        paras.append(cur)\n    out = []\n    for p in paras:\n        level = default\n        for ch in p:\n            if ch.isalpha():\n                level = 1 if ch.isupper() else 0\n                break\n        out.append([p, level])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('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]])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"09e26bac9b679e89aeb958669076abc4fb2e0deefbfc0fdb94f7edfae8f7d751","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    text, default = x\n    paras = []\n    cur = ''\n    i = 0\n    while i < len(text):\n        ch = text[i]\n        if ch == '\\r' and text[i + 1:i + 2] == '\\n':\n            cur += '\\r\\n'\n            paras.append(cur)\n            cur = ''\n            i += 2\n            continue\n        cur += ch\n        if ch in '\\n\\r\\u2029':\n            paras.append(cur)\n            cur = ''\n        i += 1\n    if cur:\n        paras.append(cur)\n    out = []\n    for p in paras:\n        level = default\n        for ch in p:\n            if ch.isalpha():\n                level = 1 if ch.isupper() else 0\n                break\n        out.append([p, level])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('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]])]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-bidirectional-text-layout-paragraph-split-crlf-pairing","generated_at":"2026-09-29T14:49:57.371177+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"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.","repair":"Treat CR immediately followed by LF as one separator.","root_cause":"The pair check looks for LF followed by CR.","sha256":"585f8d91ad95fb78e99422f6e2bf5abe4526790cbc437216197cff2b5269be7f","title":"Paragraph separation and direction: CRLF pairing · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.442,"exit_code":1,"observations":[{"actual":[["ab\r",0],["\n",0],["XY",1]],"check":"CRLF is one separator","expected":[["ab\r\n",0],["XY",1]],"passed":false},{"actual":[["b \r",0],["\n",0],["1\n",0],[",\n",0],["cbb\n",0],["\n",0],["!\n",0],["\n",0]],"check":"regression: CRLF pairing","expected":[["b \r\n",0],["1\n",0],[",\n",0],["cbb\n",0],["\n",0],["!\n",0],["\n",0]],"passed":false},{"actual":[["a  \r",0],["\n",1],["1",1]],"check":"regression: CRLF pairing","expected":[["a  \r\n",0],["1",1]],"passed":false},{"actual":[["!c\r",0],["\n",0],["Xc.. ",1],["ZbZ",1]],"check":"regression: CRLF pairing","expected":[["!c\r\n",0],["Xc.. ",1],["ZbZ",1]],"passed":false},{"actual":[["a\n",0],["\n",1],["Z",1]],"check":"separator only paragraph","expected":[["a\n",0],["\n",1],["Z",1]],"passed":true},{"actual":[["12 X\n",1]],"check":"digits then letter","expected":[["12 X\n",1]],"passed":true},{"actual":[["\r",1],[",cb\r",0],[" ",1],["a\n",0],[".Z\r",1]],"check":"control layout","expected":[["\r",1],[",cb\r",0],[" ",1],["a\n",0],[".Z\r",1]],"passed":true},{"actual":[["\n",0],["Y\n",1]],"check":"control layout","expected":[["\n",0],["Y\n",1]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"CRLF is one separator\", \"actual\": [[\"ab\\r\", 0], [\"\\n\", 0], [\"XY\", 1]], \"expected\": [[\"ab\\r\\n\", 0], [\"XY\", 1]], \"passed\": false}, {\"check\": \"regression: CRLF pairing\", \"actual\": [[\"b \\r\", 0], [\"\\n\", 0], [\"1\\n\", 0], [\",\\n\", 0], [\"cbb\\n\", 0], [\"\\n\", 0], [\"!\\n\", 0], [\"\\n\", 0]], \"expected\": [[\"b \\r\\n\", 0], [\"1\\n\", 0], [\",\\n\", 0], [\"cbb\\n\", 0], [\"\\n\", 0], [\"!\\n\", 0], [\"\\n\", 0]], \"passed\": false}, {\"check\": \"regression: CRLF pairing\", \"actual\": [[\"a  \\r\", 0], [\"\\n\", 1], [\"1\", 1]], \"expected\": [[\"a  \\r\\n\", 0], [\"1\", 1]], \"passed\": false}, {\"check\": \"regression: CRLF pairing\", \"actual\": [[\"!c\\r\", 0], [\"\\n\", 0], [\"Xc.. \", 1], [\"ZbZ\", 1]], \"expected\": [[\"!c\\r\\n\", 0], [\"Xc.. \", 1], [\"ZbZ\", 1]], \"passed\": false}, {\"check\": \"separator only paragraph\", \"actual\": [[\"a\\n\", 0], [\"\\n\", 1], [\"Z\", 1]], \"expected\": [[\"a\\n\", 0], [\"\\n\", 1], [\"Z\", 1]], \"passed\": true}, {\"check\": \"digits then letter\", \"actual\": [[\"12 X\\n\", 1]], \"expected\": [[\"12 X\\n\", 1]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[\"\\r\", 1], [\",cb\\r\", 0], [\" \", 1], [\"a\\n\", 0], [\".Z\\r\", 1]], \"expected\": [[\"\\r\", 1], [\",cb\\r\", 0], [\" \", 1], [\"a\\n\", 0], [\".Z\\r\", 1]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[\"\\n\", 0], [\"Y\\n\", 1]], \"expected\": [[\"\\n\", 0], [\"Y\\n\", 1]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.662,"exit_code":1,"observations":[{"actual":[["ab\r",0],["\n",0],["XY",1]],"check":"CRLF is one separator","expected":[["ab\r\n",0],["XY",1]],"passed":false},{"actual":[["b \r",0],["\n",0],["1\n",0],[",\n",0],["cbb\n",0],["\n",0],["!\n",0],["\n",0]],"check":"regression: CRLF pairing","expected":[["b \r\n",0],["1\n",0],[",\n",0],["cbb\n",0],["\n",0],["!\n",0],["\n",0]],"passed":false},{"actual":[["a  \r",0],["\n",1],["1",1]],"check":"regression: CRLF pairing","expected":[["a  \r\n",0],["1",1]],"passed":false},{"actual":[["!c\r",0],["\n",0],["Xc.. ",1],["ZbZ",1]],"check":"regression: CRLF pairing","expected":[["!c\r\n",0],["Xc.. ",1],["ZbZ",1]],"passed":false},{"actual":[["a\n",0],["\n",1],["Z",1]],"check":"separator only paragraph","expected":[["a\n",0],["\n",1],["Z",1]],"passed":true},{"actual":[["12 X\n",1]],"check":"digits then letter","expected":[["12 X\n",1]],"passed":true},{"actual":[["\r",1],[",cb\r",0],[" ",1],["a\n",0],[".Z\r",1]],"check":"control layout","expected":[["\r",1],[",cb\r",0],[" ",1],["a\n",0],[".Z\r",1]],"passed":true},{"actual":[["\n",0],["Y\n",1]],"check":"control layout","expected":[["\n",0],["Y\n",1]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"CRLF is one separator\", \"actual\": [[\"ab\\r\", 0], [\"\\n\", 0], [\"XY\", 1]], \"expected\": [[\"ab\\r\\n\", 0], [\"XY\", 1]], \"passed\": false}, {\"check\": \"regression: CRLF pairing\", \"actual\": [[\"b \\r\", 0], [\"\\n\", 0], [\"1\\n\", 0], [\",\\n\", 0], [\"cbb\\n\", 0], [\"\\n\", 0], [\"!\\n\", 0], [\"\\n\", 0]], \"expected\": [[\"b \\r\\n\", 0], [\"1\\n\", 0], [\",\\n\", 0], [\"cbb\\n\", 0], [\"\\n\", 0], [\"!\\n\", 0], [\"\\n\", 0]], \"passed\": false}, {\"check\": \"regression: CRLF pairing\", \"actual\": [[\"a  \\r\", 0], [\"\\n\", 1], [\"1\", 1]], \"expected\": [[\"a  \\r\\n\", 0], [\"1\", 1]], \"passed\": false}, {\"check\": \"regression: CRLF pairing\", \"actual\": [[\"!c\\r\", 0], [\"\\n\", 0], [\"Xc.. \", 1], [\"ZbZ\", 1]], \"expected\": [[\"!c\\r\\n\", 0], [\"Xc.. \", 1], [\"ZbZ\", 1]], \"passed\": false}, {\"check\": \"separator only paragraph\", \"actual\": [[\"a\\n\", 0], [\"\\n\", 1], [\"Z\", 1]], \"expected\": [[\"a\\n\", 0], [\"\\n\", 1], [\"Z\", 1]], \"passed\": true}, {\"check\": \"digits then letter\", \"actual\": [[\"12 X\\n\", 1]], \"expected\": [[\"12 X\\n\", 1]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[\"\\r\", 1], [\",cb\\r\", 0], [\" \", 1], [\"a\\n\", 0], [\".Z\\r\", 1]], \"expected\": [[\"\\r\", 1], [\",cb\\r\", 0], [\" \", 1], [\"a\\n\", 0], [\".Z\\r\", 1]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[\"\\n\", 0], [\"Y\\n\", 1]], \"expected\": [[\"\\n\", 0], [\"Y\\n\", 1]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.252,"exit_code":0,"observations":[{"actual":[["ab\r\n",0],["XY",1]],"check":"CRLF is one separator","expected":[["ab\r\n",0],["XY",1]],"passed":true},{"actual":[["b \r\n",0],["1\n",0],[",\n",0],["cbb\n",0],["\n",0],["!\n",0],["\n",0]],"check":"regression: CRLF pairing","expected":[["b \r\n",0],["1\n",0],[",\n",0],["cbb\n",0],["\n",0],["!\n",0],["\n",0]],"passed":true},{"actual":[["a  \r\n",0],["1",1]],"check":"regression: CRLF pairing","expected":[["a  \r\n",0],["1",1]],"passed":true},{"actual":[["!c\r\n",0],["Xc.. ",1],["ZbZ",1]],"check":"regression: CRLF pairing","expected":[["!c\r\n",0],["Xc.. ",1],["ZbZ",1]],"passed":true},{"actual":[["a\n",0],["\n",1],["Z",1]],"check":"separator only paragraph","expected":[["a\n",0],["\n",1],["Z",1]],"passed":true},{"actual":[["12 X\n",1]],"check":"digits then letter","expected":[["12 X\n",1]],"passed":true},{"actual":[["\r",1],[",cb\r",0],[" ",1],["a\n",0],[".Z\r",1]],"check":"control layout","expected":[["\r",1],[",cb\r",0],[" ",1],["a\n",0],[".Z\r",1]],"passed":true},{"actual":[["\n",0],["Y\n",1]],"check":"control layout","expected":[["\n",0],["Y\n",1]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"CRLF is one separator\", \"actual\": [[\"ab\\r\\n\", 0], [\"XY\", 1]], \"expected\": [[\"ab\\r\\n\", 0], [\"XY\", 1]], \"passed\": true}, {\"check\": \"regression: CRLF pairing\", \"actual\": [[\"b \\r\\n\", 0], [\"1\\n\", 0], [\",\\n\", 0], [\"cbb\\n\", 0], [\"\\n\", 0], [\"!\\n\", 0], [\"\\n\", 0]], \"expected\": [[\"b \\r\\n\", 0], [\"1\\n\", 0], [\",\\n\", 0], [\"cbb\\n\", 0], [\"\\n\", 0], [\"!\\n\", 0], [\"\\n\", 0]], \"passed\": true}, {\"check\": \"regression: CRLF pairing\", \"actual\": [[\"a  \\r\\n\", 0], [\"1\", 1]], \"expected\": [[\"a  \\r\\n\", 0], [\"1\", 1]], \"passed\": true}, {\"check\": \"regression: CRLF pairing\", \"actual\": [[\"!c\\r\\n\", 0], [\"Xc.. \", 1], [\"ZbZ\", 1]], \"expected\": [[\"!c\\r\\n\", 0], [\"Xc.. \", 1], [\"ZbZ\", 1]], \"passed\": true}, {\"check\": \"separator only paragraph\", \"actual\": [[\"a\\n\", 0], [\"\\n\", 1], [\"Z\", 1]], \"expected\": [[\"a\\n\", 0], [\"\\n\", 1], [\"Z\", 1]], \"passed\": true}, {\"check\": \"digits then letter\", \"actual\": [[\"12 X\\n\", 1]], \"expected\": [[\"12 X\\n\", 1]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[\"\\r\", 1], [\",cb\\r\", 0], [\" \", 1], [\"a\\n\", 0], [\".Z\\r\", 1]], \"expected\": [[\"\\r\", 1], [\",cb\\r\", 0], [\" \", 1], [\"a\\n\", 0], [\".Z\\r\", 1]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[\"\\n\", 0], [\"Y\\n\", 1]], \"expected\": [[\"\\n\", 0], [\"Y\\n\", 1]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}