{"abstract":"A period hangs while its closing bracket starts the next line.","category":"Typography line breaking","checks":8,"contract":"Input [text of full-width characters, line length L]. Lines take L characters. If the next character is a hanging comma/period (、。，．) and is not itself followed by a line-start-prohibited character, it hangs on the line (burasage). Otherwise move characters to the next line while the next line would start with a prohibited character (、。，．）」』！？ー and small kana), then while the line would end with an opening bracket; a line keeps at least one character. Return the lines.","evaluation_group":"w2-typography-line-breaking-kinsoku","failed_approach":"Checking the following character against the line-end set tests the wrong property.","family":"w2-typography-line-breaking-kinsoku-hang-followed-by-closer","id":"FA-80011","implementations":{"attempt":{"sha256":"5c0c082b8df6de185071cd3107c0ad64943a0337935c671af4e1b95d69fe3c24","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    text, L = x\n    NO_START = '、。，．）」』！？ーぁぃぅぇぉっゃゅょ'\n    NO_END = '（「『'\n    HANG = '、。，．'\n    lines = []\n    pos = 0\n    n = len(text)\n    while pos < n:\n        end = pos + L\n        if end >= n:\n            lines.append(text[pos:])\n            break\n        if text[end] in HANG and (end + 1 >= n or text[end + 1] not in NO_END):\n            end += 1\n        else:\n            while end > pos + 1 and text[end] in NO_START:\n                end -= 1\n            while end > pos + 1 and text[end - 1] in NO_END:\n                end -= 1\n        lines.append(text[pos:end])\n        pos = end\n    return lines\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('period followed by bracket cannot hang', ['日本語文。」字組', 4], ['日本語', '文。」字', '組']), ('regression: hang followed by closer', ['くき）『いえ本（本『、字）ー。っ」字', 3], ['くき）', '『いえ', '本（本', '『、', '字', '）', 'ー', '。っ」', '字']), ('regression: hang followed by closer', ['文字、」（ゃ日き日』組文っー、、組本きっ組', 7], ['文字、」（ゃ日', 'き日』組', '文っー、、組本', 'きっ組']), ('regression: hang followed by closer', ['「）。文お。い組、、い）、、っ」け「あえいけ日、', 4], ['「）。文', 'お。い', '組、、', 'い', '）', '、、っ」', 'け「あえ', 'いけ日、']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('small kana prohibited at line start', ['日本語かっこいい', 4], ['日本語', 'かっこい', 'い']), ('control layout', ['か本うくい日「、け字ー『こ字え。う', 3], ['か本う', 'くい日', '「、け', '字ー', '『こ字', 'え。う']), ('control layout', ['け。。「）ゃおお」けゃ」かあうう）か『か字い', 5], ['け。。', '「）ゃお', 'お」けゃ」', 'かあうう）', 'か『か字い'])], [('regression: hang followed by closer', ['う」』』え組「。。『お文組う', 7], ['う」』』え組', '「。。『お文組', 'う']), ('regression: hang followed by closer', ['文字、」（ゃ日き日』組文っー、、組本きっ組', 7], ['文字、」（ゃ日', 'き日』組', '文っー、、組本', 'きっ組']), ('regression: hang followed by closer', ['日ーゃ語文「っ日あこけ語っこい語。』本『', 8], ['日ーゃ語文「っ日', 'あこけ語っこい', '語。』本『']), ('regression: hang followed by closer', ['文版ゃき、。語。あ日ーっ日『、」』、組ゃか』え', 4], ['文版ゃ', 'き、。語。', 'あ日ーっ', '日', '『、」』、', '組ゃか』', 'え']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('period hangs past the measure', ['日本語文。字組版', 4], ['日本語文。', '字組版']), ('control layout', ['こ版あ）え『本）う）あい（え日組ーー『こ。き日', 6], ['こ版あ）え', '『本）う）あ', 'い（え日', '組ーー『こ。', 'き日']), ('control layout', ['）。あおく本ー』い', 4], ['）。あお', 'く本ー』', 'い'])], [('regression: hang followed by closer', ['版っ日けおく、）」版（「', 6], ['版っ日けお', 'く、）」版', '（「']), ('regression: hang followed by closer', ['文字、」（ゃ日き日』組文っー、、組本きっ組', 7], ['文字、」（ゃ日', 'き日』組', '文っー、、組本', 'きっ組']), ('regression: hang followed by closer', ['版っ』い「）ー）。）', 3], ['版っ』', 'い', '「', '）', 'ー', '）。）']), ('partial-repair probe', ['語お』、「っお日けあ版））「か字字かこえ字組版', 3], ['語お』、', '「っお', '日けあ', '版））', '「か字', '字かこ', 'え字組', '版']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('opening bracket at line end', ['日本語「文字」組版', 4], ['日本語', '「文字」', '組版']), ('control layout', ['『』字）（ゃ『語けあ語か』え『い。え。日こ', 8], ['『』字）（ゃ『語', 'けあ語か』え『い。', 'え。日こ']), ('control layout', ['本かーこ））ー、文本本', 3], ['本かー', 'こ', '））ー、', '文本本'])], [('regression: hang followed by closer', ['「『日、く）、」組）っうお。（', 6], ['「『日、', 'く）、」', '組）っうお。', '（']), ('regression: hang followed by closer', ['』く「本え語おっかえい、。、きけこ組ゃこ『きあ』', 3], ['』く', '「本え', '語おっ', 'かえ', 'い、。、', 'きけこ', '組ゃこ', '『き', 'あ』']), ('regression: hang followed by closer', ['（日おあ」『こか、語。）本文っ、文えあゃ。', 5], ['（日おあ」', '『こか、', '語。）本', '文っ、文え', 'あゃ。']), ('regression: hang followed by closer', ['日組こ、『っ、ー日ーあ』っ「、き「字っ', 6], ['日組こ、', '『っ、ー日ー', 'あ』っ「、き', '「字っ']), ('period hangs past the measure', ['日本語文。字組版', 4], ['日本語文。', '字組版']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('control layout', ['かい』けえ』ゃ』版日けっ）', 7], ['かい』け', 'え』ゃ』版日', 'けっ）']), ('control layout', ['文くこ、』本）。版（』（『いえ『本こ」かっか', 4], ['文く', 'こ、』', '本）。版', '（』', '（『いえ', '『本こ」', 'かっか'])], [('regression: hang followed by closer', ['うこ文版」」。。か字えーっあ」っけ』いか語いっ', 6], ['うこ文', '版」」。。か', '字えーっ', 'あ」っけ』い', 'か語いっ']), ('regression: hang followed by closer', ['いあ『本く）く。ー', 3], ['いあ', '『本', 'く）', 'く。ー']), ('regression: hang followed by closer', ['くけおけあき組。か語おき「版（。っ組えく組', 5], ['くけおけあ', 'き組。か語', 'おき「版', '（。っ組え', 'く組']), ('partial-repair probe', ['』あ「組えか語おえきゃ）組。あ文、『」えこう', 8], ['』あ「組えか語お', 'えきゃ）組。あ文、', '『」えこう']), ('period followed by bracket cannot hang', ['日本語文。」字組', 4], ['日本語', '文。」字', '組']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('control layout', ['、ーく」ゃ』』ー本え組きけ本日こ』', 7], ['、ー', 'く」ゃ』』ー本', 'え組きけ本日', 'こ』']), ('control layout', ['組本）かゃ組っー', 6], ['組本）かゃ', '組っー'])]]\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":"25db4374ad9bcdf73c9f5f226817b30b62ca5d0132f73f8d7653c2d7f0d3f9da","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    text, L = x\n    NO_START = '、。，．）」』！？ーぁぃぅぇぉっゃゅょ'\n    NO_END = '（「『'\n    HANG = '、。，．'\n    lines = []\n    pos = 0\n    n = len(text)\n    while pos < n:\n        end = pos + L\n        if end >= n:\n            lines.append(text[pos:])\n            break\n        if text[end] in HANG:\n            end += 1\n        else:\n            while end > pos + 1 and text[end] in NO_START:\n                end -= 1\n            while end > pos + 1 and text[end - 1] in NO_END:\n                end -= 1\n        lines.append(text[pos:end])\n        pos = end\n    return lines\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('period followed by bracket cannot hang', ['日本語文。」字組', 4], ['日本語', '文。」字', '組']), ('regression: hang followed by closer', ['くき）『いえ本（本『、字）ー。っ」字', 3], ['くき）', '『いえ', '本（本', '『、', '字', '）', 'ー', '。っ」', '字']), ('regression: hang followed by closer', ['文字、」（ゃ日き日』組文っー、、組本きっ組', 7], ['文字、」（ゃ日', 'き日』組', '文っー、、組本', 'きっ組']), ('regression: hang followed by closer', ['「）。文お。い組、、い）、、っ」け「あえいけ日、', 4], ['「）。文', 'お。い', '組、、', 'い', '）', '、、っ」', 'け「あえ', 'いけ日、']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('small kana prohibited at line start', ['日本語かっこいい', 4], ['日本語', 'かっこい', 'い']), ('control layout', ['か本うくい日「、け字ー『こ字え。う', 3], ['か本う', 'くい日', '「、け', '字ー', '『こ字', 'え。う']), ('control layout', ['け。。「）ゃおお」けゃ」かあうう）か『か字い', 5], ['け。。', '「）ゃお', 'お」けゃ」', 'かあうう）', 'か『か字い'])], [('regression: hang followed by closer', ['う」』』え組「。。『お文組う', 7], ['う」』』え組', '「。。『お文組', 'う']), ('regression: hang followed by closer', ['文字、」（ゃ日き日』組文っー、、組本きっ組', 7], ['文字、」（ゃ日', 'き日』組', '文っー、、組本', 'きっ組']), ('regression: hang followed by closer', ['日ーゃ語文「っ日あこけ語っこい語。』本『', 8], ['日ーゃ語文「っ日', 'あこけ語っこい', '語。』本『']), ('regression: hang followed by closer', ['文版ゃき、。語。あ日ーっ日『、」』、組ゃか』え', 4], ['文版ゃ', 'き、。語。', 'あ日ーっ', '日', '『、」』、', '組ゃか』', 'え']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('period hangs past the measure', ['日本語文。字組版', 4], ['日本語文。', '字組版']), ('control layout', ['こ版あ）え『本）う）あい（え日組ーー『こ。き日', 6], ['こ版あ）え', '『本）う）あ', 'い（え日', '組ーー『こ。', 'き日']), ('control layout', ['）。あおく本ー』い', 4], ['）。あお', 'く本ー』', 'い'])], [('regression: hang followed by closer', ['版っ日けおく、）」版（「', 6], ['版っ日けお', 'く、）」版', '（「']), ('regression: hang followed by closer', ['文字、」（ゃ日き日』組文っー、、組本きっ組', 7], ['文字、」（ゃ日', 'き日』組', '文っー、、組本', 'きっ組']), ('regression: hang followed by closer', ['版っ』い「）ー）。）', 3], ['版っ』', 'い', '「', '）', 'ー', '）。）']), ('partial-repair probe', ['語お』、「っお日けあ版））「か字字かこえ字組版', 3], ['語お』、', '「っお', '日けあ', '版））', '「か字', '字かこ', 'え字組', '版']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('opening bracket at line end', ['日本語「文字」組版', 4], ['日本語', '「文字」', '組版']), ('control layout', ['『』字）（ゃ『語けあ語か』え『い。え。日こ', 8], ['『』字）（ゃ『語', 'けあ語か』え『い。', 'え。日こ']), ('control layout', ['本かーこ））ー、文本本', 3], ['本かー', 'こ', '））ー、', '文本本'])], [('regression: hang followed by closer', ['「『日、く）、」組）っうお。（', 6], ['「『日、', 'く）、」', '組）っうお。', '（']), ('regression: hang followed by closer', ['』く「本え語おっかえい、。、きけこ組ゃこ『きあ』', 3], ['』く', '「本え', '語おっ', 'かえ', 'い、。、', 'きけこ', '組ゃこ', '『き', 'あ』']), ('regression: hang followed by closer', ['（日おあ」『こか、語。）本文っ、文えあゃ。', 5], ['（日おあ」', '『こか、', '語。）本', '文っ、文え', 'あゃ。']), ('regression: hang followed by closer', ['日組こ、『っ、ー日ーあ』っ「、き「字っ', 6], ['日組こ、', '『っ、ー日ー', 'あ』っ「、き', '「字っ']), ('period hangs past the measure', ['日本語文。字組版', 4], ['日本語文。', '字組版']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('control layout', ['かい』けえ』ゃ』版日けっ）', 7], ['かい』け', 'え』ゃ』版日', 'けっ）']), ('control layout', ['文くこ、』本）。版（』（『いえ『本こ」かっか', 4], ['文く', 'こ、』', '本）。版', '（』', '（『いえ', '『本こ」', 'かっか'])], [('regression: hang followed by closer', ['うこ文版」」。。か字えーっあ」っけ』いか語いっ', 6], ['うこ文', '版」」。。か', '字えーっ', 'あ」っけ』い', 'か語いっ']), ('regression: hang followed by closer', ['いあ『本く）く。ー', 3], ['いあ', '『本', 'く）', 'く。ー']), ('regression: hang followed by closer', ['くけおけあき組。か語おき「版（。っ組えく組', 5], ['くけおけあ', 'き組。か語', 'おき「版', '（。っ組え', 'く組']), ('partial-repair probe', ['』あ「組えか語おえきゃ）組。あ文、『」えこう', 8], ['』あ「組えか語お', 'えきゃ）組。あ文、', '『」えこう']), ('period followed by bracket cannot hang', ['日本語文。」字組', 4], ['日本語', '文。」字', '組']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('control layout', ['、ーく」ゃ』』ー本え組きけ本日こ』', 7], ['、ー', 'く」ゃ』』ー本', 'え組きけ本日', 'こ』']), ('control layout', ['組本）かゃ組っー', 6], ['組本）かゃ', '組っー'])]]\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":"6e510f8eb015b28ee04b521daff4f6bc4b46fadbd18fe32d1695fda3eefe4379","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    text, L = x\n    NO_START = '、。，．）」』！？ーぁぃぅぇぉっゃゅょ'\n    NO_END = '（「『'\n    HANG = '、。，．'\n    lines = []\n    pos = 0\n    n = len(text)\n    while pos < n:\n        end = pos + L\n        if end >= n:\n            lines.append(text[pos:])\n            break\n        if text[end] in HANG and (end + 1 >= n or text[end + 1] not in NO_START):\n            end += 1\n        else:\n            while end > pos + 1 and text[end] in NO_START:\n                end -= 1\n            while end > pos + 1 and text[end - 1] in NO_END:\n                end -= 1\n        lines.append(text[pos:end])\n        pos = end\n    return lines\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('period followed by bracket cannot hang', ['日本語文。」字組', 4], ['日本語', '文。」字', '組']), ('regression: hang followed by closer', ['くき）『いえ本（本『、字）ー。っ」字', 3], ['くき）', '『いえ', '本（本', '『、', '字', '）', 'ー', '。っ」', '字']), ('regression: hang followed by closer', ['文字、」（ゃ日き日』組文っー、、組本きっ組', 7], ['文字、」（ゃ日', 'き日』組', '文っー、、組本', 'きっ組']), ('regression: hang followed by closer', ['「）。文お。い組、、い）、、っ」け「あえいけ日、', 4], ['「）。文', 'お。い', '組、、', 'い', '）', '、、っ」', 'け「あえ', 'いけ日、']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('small kana prohibited at line start', ['日本語かっこいい', 4], ['日本語', 'かっこい', 'い']), ('control layout', ['か本うくい日「、け字ー『こ字え。う', 3], ['か本う', 'くい日', '「、け', '字ー', '『こ字', 'え。う']), ('control layout', ['け。。「）ゃおお」けゃ」かあうう）か『か字い', 5], ['け。。', '「）ゃお', 'お」けゃ」', 'かあうう）', 'か『か字い'])], [('regression: hang followed by closer', ['う」』』え組「。。『お文組う', 7], ['う」』』え組', '「。。『お文組', 'う']), ('regression: hang followed by closer', ['文字、」（ゃ日き日』組文っー、、組本きっ組', 7], ['文字、」（ゃ日', 'き日』組', '文っー、、組本', 'きっ組']), ('regression: hang followed by closer', ['日ーゃ語文「っ日あこけ語っこい語。』本『', 8], ['日ーゃ語文「っ日', 'あこけ語っこい', '語。』本『']), ('regression: hang followed by closer', ['文版ゃき、。語。あ日ーっ日『、」』、組ゃか』え', 4], ['文版ゃ', 'き、。語。', 'あ日ーっ', '日', '『、」』、', '組ゃか』', 'え']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('period hangs past the measure', ['日本語文。字組版', 4], ['日本語文。', '字組版']), ('control layout', ['こ版あ）え『本）う）あい（え日組ーー『こ。き日', 6], ['こ版あ）え', '『本）う）あ', 'い（え日', '組ーー『こ。', 'き日']), ('control layout', ['）。あおく本ー』い', 4], ['）。あお', 'く本ー』', 'い'])], [('regression: hang followed by closer', ['版っ日けおく、）」版（「', 6], ['版っ日けお', 'く、）」版', '（「']), ('regression: hang followed by closer', ['文字、」（ゃ日き日』組文っー、、組本きっ組', 7], ['文字、」（ゃ日', 'き日』組', '文っー、、組本', 'きっ組']), ('regression: hang followed by closer', ['版っ』い「）ー）。）', 3], ['版っ』', 'い', '「', '）', 'ー', '）。）']), ('partial-repair probe', ['語お』、「っお日けあ版））「か字字かこえ字組版', 3], ['語お』、', '「っお', '日けあ', '版））', '「か字', '字かこ', 'え字組', '版']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('opening bracket at line end', ['日本語「文字」組版', 4], ['日本語', '「文字」', '組版']), ('control layout', ['『』字）（ゃ『語けあ語か』え『い。え。日こ', 8], ['『』字）（ゃ『語', 'けあ語か』え『い。', 'え。日こ']), ('control layout', ['本かーこ））ー、文本本', 3], ['本かー', 'こ', '））ー、', '文本本'])], [('regression: hang followed by closer', ['「『日、く）、」組）っうお。（', 6], ['「『日、', 'く）、」', '組）っうお。', '（']), ('regression: hang followed by closer', ['』く「本え語おっかえい、。、きけこ組ゃこ『きあ』', 3], ['』く', '「本え', '語おっ', 'かえ', 'い、。、', 'きけこ', '組ゃこ', '『き', 'あ』']), ('regression: hang followed by closer', ['（日おあ」『こか、語。）本文っ、文えあゃ。', 5], ['（日おあ」', '『こか、', '語。）本', '文っ、文え', 'あゃ。']), ('regression: hang followed by closer', ['日組こ、『っ、ー日ーあ』っ「、き「字っ', 6], ['日組こ、', '『っ、ー日ー', 'あ』っ「、き', '「字っ']), ('period hangs past the measure', ['日本語文。字組版', 4], ['日本語文。', '字組版']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('control layout', ['かい』けえ』ゃ』版日けっ）', 7], ['かい』け', 'え』ゃ』版日', 'けっ）']), ('control layout', ['文くこ、』本）。版（』（『いえ『本こ」かっか', 4], ['文く', 'こ、』', '本）。版', '（』', '（『いえ', '『本こ」', 'かっか'])], [('regression: hang followed by closer', ['うこ文版」」。。か字えーっあ」っけ』いか語いっ', 6], ['うこ文', '版」」。。か', '字えーっ', 'あ」っけ』い', 'か語いっ']), ('regression: hang followed by closer', ['いあ『本く）く。ー', 3], ['いあ', '『本', 'く）', 'く。ー']), ('regression: hang followed by closer', ['くけおけあき組。か語おき「版（。っ組えく組', 5], ['くけおけあ', 'き組。か語', 'おき「版', '（。っ組え', 'く組']), ('partial-repair probe', ['』あ「組えか語おえきゃ）組。あ文、『」えこう', 8], ['』あ「組えか語お', 'えきゃ）組。あ文、', '『」えこう']), ('period followed by bracket cannot hang', ['日本語文。」字組', 4], ['日本語', '文。」字', '組']), ('closing bracket pushes out', ['日本語文」字組版', 4], ['日本語', '文」字組', '版']), ('control layout', ['、ーく」ゃ』』ー本え組きけ本日こ』', 7], ['、ー', 'く」ゃ』』ー本', 'え組きけ本日', 'こ』']), ('control layout', ['組本）かゃ組っー', 6], ['組本）かゃ', '組っー'])]]\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 typesetting model with integer widths and a stipulated rule set; it does not claim conformance to any engine. 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-typography-line-breaking-kinsoku-hang-followed-by-closer","generated_at":"2026-09-29T14:49:49.874630+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Line breaking decides where paragraphs wrap on screen and in print; a wrong decision point shifts every following line.","repair":"Only hang when the character after the hanging mark may start a line.","root_cause":"Hanging ignores whether the following character is itself line-start prohibited.","sha256":"1104469e61fb64fa26ad4915526501e80cef9fca3a1f4c6f0169e50521e48fb9","title":"CJK kinsoku line breaking: hang followed by closer · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.039,"exit_code":1,"observations":[{"actual":["日本語文。","」字組"],"check":"period followed by bracket cannot hang","expected":["日本語","文。」字","組"],"passed":false},{"actual":["くき）","『いえ","本（本","『、","字）ー。","っ」字"],"check":"regression: hang followed by closer","expected":["くき）","『いえ","本（本","『、","字","）","ー","。っ」","字"],"passed":false},{"actual":["文字、」（ゃ日","き日』組文っー、","、組本きっ組"],"check":"regression: hang followed by closer","expected":["文字、」（ゃ日","き日』組","文っー、、組本","きっ組"],"passed":false},{"actual":["「）。文","お。い組、","、い）、、","っ」け","「あえい","け日、"],"check":"regression: hang followed by closer","expected":["「）。文","お。い","組、、","い","）","、、っ」","け「あえ","いけ日、"],"passed":false},{"actual":["日本語","文」字組","版"],"check":"closing bracket pushes out","expected":["日本語","文」字組","版"],"passed":true},{"actual":["日本語","かっこい","い"],"check":"small kana prohibited at line start","expected":["日本語","かっこい","い"],"passed":true},{"actual":["か本う","くい日","「、け","字ー","『こ字","え。う"],"check":"control layout","expected":["か本う","くい日","「、け","字ー","『こ字","え。う"],"passed":true},{"actual":["け。。","「）ゃお","お」けゃ」","かあうう）","か『か字い"],"check":"control layout","expected":["け。。","「）ゃお","お」けゃ」","かあうう）","か『か字い"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"period followed by bracket cannot hang\", \"actual\": [\"日本語文。\", \"」字組\"], \"expected\": [\"日本語\", \"文。」字\", \"組\"], \"passed\": false}, {\"check\": \"regression: hang followed by closer\", \"actual\": [\"くき）\", \"『いえ\", \"本（本\", \"『、\", \"字）ー。\", \"っ」字\"], \"expected\": [\"くき）\", \"『いえ\", \"本（本\", \"『、\", \"字\", \"）\", \"ー\", \"。っ」\", \"字\"], \"passed\": false}, {\"check\": \"regression: hang followed by closer\", \"actual\": [\"文字、」（ゃ日\", \"き日』組文っー、\", \"、組本きっ組\"], \"expected\": [\"文字、」（ゃ日\", \"き日』組\", \"文っー、、組本\", \"きっ組\"], \"passed\": false}, {\"check\": \"regression: hang followed by closer\", \"actual\": [\"「）。文\", \"お。い組、\", \"、い）、、\", \"っ」け\", \"「あえい\", \"け日、\"], \"expected\": [\"「）。文\", \"お。い\", \"組、、\", \"い\", \"）\", \"、、っ」\", \"け「あえ\", \"いけ日、\"], \"passed\": false}, {\"check\": \"closing bracket pushes out\", \"actual\": [\"日本語\", \"文」字組\", \"版\"], \"expected\": [\"日本語\", \"文」字組\", \"版\"], \"passed\": true}, {\"check\": \"small kana prohibited at line start\", \"actual\": [\"日本語\", \"かっこい\", \"い\"], \"expected\": [\"日本語\", \"かっこい\", \"い\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"か本う\", \"くい日\", \"「、け\", \"字ー\", \"『こ字\", \"え。う\"], \"expected\": [\"か本う\", \"くい日\", \"「、け\", \"字ー\", \"『こ字\", \"え。う\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"け。。\", \"「）ゃお\", \"お」けゃ」\", \"かあうう）\", \"か『か字い\"], \"expected\": [\"け。。\", \"「）ゃお\", \"お」けゃ」\", \"かあうう）\", \"か『か字い\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.479,"exit_code":1,"observations":[{"actual":["日本語文。","」字組"],"check":"period followed by bracket cannot hang","expected":["日本語","文。」字","組"],"passed":false},{"actual":["くき）","『いえ","本（本","『、","字）ー。","っ」字"],"check":"regression: hang followed by closer","expected":["くき）","『いえ","本（本","『、","字","）","ー","。っ」","字"],"passed":false},{"actual":["文字、」（ゃ日","き日』組文っー、","、組本きっ組"],"check":"regression: hang followed by closer","expected":["文字、」（ゃ日","き日』組","文っー、、組本","きっ組"],"passed":false},{"actual":["「）。文","お。い組、","、い）、、","っ」け","「あえい","け日、"],"check":"regression: hang followed by closer","expected":["「）。文","お。い","組、、","い","）","、、っ」","け「あえ","いけ日、"],"passed":false},{"actual":["日本語","文」字組","版"],"check":"closing bracket pushes out","expected":["日本語","文」字組","版"],"passed":true},{"actual":["日本語","かっこい","い"],"check":"small kana prohibited at line start","expected":["日本語","かっこい","い"],"passed":true},{"actual":["か本う","くい日","「、け","字ー","『こ字","え。う"],"check":"control layout","expected":["か本う","くい日","「、け","字ー","『こ字","え。う"],"passed":true},{"actual":["け。。","「）ゃお","お」けゃ」","かあうう）","か『か字い"],"check":"control layout","expected":["け。。","「）ゃお","お」けゃ」","かあうう）","か『か字い"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"period followed by bracket cannot hang\", \"actual\": [\"日本語文。\", \"」字組\"], \"expected\": [\"日本語\", \"文。」字\", \"組\"], \"passed\": false}, {\"check\": \"regression: hang followed by closer\", \"actual\": [\"くき）\", \"『いえ\", \"本（本\", \"『、\", \"字）ー。\", \"っ」字\"], \"expected\": [\"くき）\", \"『いえ\", \"本（本\", \"『、\", \"字\", \"）\", \"ー\", \"。っ」\", \"字\"], \"passed\": false}, {\"check\": \"regression: hang followed by closer\", \"actual\": [\"文字、」（ゃ日\", \"き日』組文っー、\", \"、組本きっ組\"], \"expected\": [\"文字、」（ゃ日\", \"き日』組\", \"文っー、、組本\", \"きっ組\"], \"passed\": false}, {\"check\": \"regression: hang followed by closer\", \"actual\": [\"「）。文\", \"お。い組、\", \"、い）、、\", \"っ」け\", \"「あえい\", \"け日、\"], \"expected\": [\"「）。文\", \"お。い\", \"組、、\", \"い\", \"）\", \"、、っ」\", \"け「あえ\", \"いけ日、\"], \"passed\": false}, {\"check\": \"closing bracket pushes out\", \"actual\": [\"日本語\", \"文」字組\", \"版\"], \"expected\": [\"日本語\", \"文」字組\", \"版\"], \"passed\": true}, {\"check\": \"small kana prohibited at line start\", \"actual\": [\"日本語\", \"かっこい\", \"い\"], \"expected\": [\"日本語\", \"かっこい\", \"い\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"か本う\", \"くい日\", \"「、け\", \"字ー\", \"『こ字\", \"え。う\"], \"expected\": [\"か本う\", \"くい日\", \"「、け\", \"字ー\", \"『こ字\", \"え。う\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"け。。\", \"「）ゃお\", \"お」けゃ」\", \"かあうう）\", \"か『か字い\"], \"expected\": [\"け。。\", \"「）ゃお\", \"お」けゃ」\", \"かあうう）\", \"か『か字い\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.714,"exit_code":0,"observations":[{"actual":["日本語","文。」字","組"],"check":"period followed by bracket cannot hang","expected":["日本語","文。」字","組"],"passed":true},{"actual":["くき）","『いえ","本（本","『、","字","）","ー","。っ」","字"],"check":"regression: hang followed by closer","expected":["くき）","『いえ","本（本","『、","字","）","ー","。っ」","字"],"passed":true},{"actual":["文字、」（ゃ日","き日』組","文っー、、組本","きっ組"],"check":"regression: hang followed by closer","expected":["文字、」（ゃ日","き日』組","文っー、、組本","きっ組"],"passed":true},{"actual":["「）。文","お。い","組、、","い","）","、、っ」","け「あえ","いけ日、"],"check":"regression: hang followed by closer","expected":["「）。文","お。い","組、、","い","）","、、っ」","け「あえ","いけ日、"],"passed":true},{"actual":["日本語","文」字組","版"],"check":"closing bracket pushes out","expected":["日本語","文」字組","版"],"passed":true},{"actual":["日本語","かっこい","い"],"check":"small kana prohibited at line start","expected":["日本語","かっこい","い"],"passed":true},{"actual":["か本う","くい日","「、け","字ー","『こ字","え。う"],"check":"control layout","expected":["か本う","くい日","「、け","字ー","『こ字","え。う"],"passed":true},{"actual":["け。。","「）ゃお","お」けゃ」","かあうう）","か『か字い"],"check":"control layout","expected":["け。。","「）ゃお","お」けゃ」","かあうう）","か『か字い"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"period followed by bracket cannot hang\", \"actual\": [\"日本語\", \"文。」字\", \"組\"], \"expected\": [\"日本語\", \"文。」字\", \"組\"], \"passed\": true}, {\"check\": \"regression: hang followed by closer\", \"actual\": [\"くき）\", \"『いえ\", \"本（本\", \"『、\", \"字\", \"）\", \"ー\", \"。っ」\", \"字\"], \"expected\": [\"くき）\", \"『いえ\", \"本（本\", \"『、\", \"字\", \"）\", \"ー\", \"。っ」\", \"字\"], \"passed\": true}, {\"check\": \"regression: hang followed by closer\", \"actual\": [\"文字、」（ゃ日\", \"き日』組\", \"文っー、、組本\", \"きっ組\"], \"expected\": [\"文字、」（ゃ日\", \"き日』組\", \"文っー、、組本\", \"きっ組\"], \"passed\": true}, {\"check\": \"regression: hang followed by closer\", \"actual\": [\"「）。文\", \"お。い\", \"組、、\", \"い\", \"）\", \"、、っ」\", \"け「あえ\", \"いけ日、\"], \"expected\": [\"「）。文\", \"お。い\", \"組、、\", \"い\", \"）\", \"、、っ」\", \"け「あえ\", \"いけ日、\"], \"passed\": true}, {\"check\": \"closing bracket pushes out\", \"actual\": [\"日本語\", \"文」字組\", \"版\"], \"expected\": [\"日本語\", \"文」字組\", \"版\"], \"passed\": true}, {\"check\": \"small kana prohibited at line start\", \"actual\": [\"日本語\", \"かっこい\", \"い\"], \"expected\": [\"日本語\", \"かっこい\", \"い\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"か本う\", \"くい日\", \"「、け\", \"字ー\", \"『こ字\", \"え。う\"], \"expected\": [\"か本う\", \"くい日\", \"「、け\", \"字ー\", \"『こ字\", \"え。う\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"け。。\", \"「）ゃお\", \"お」けゃ」\", \"かあうう）\", \"か『か字い\"], \"expected\": [\"け。。\", \"「）ゃお\", \"お」けゃ」\", \"かあうう）\", \"か『か字い\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}