{"abstract":"Breaks are taken at glue that follows a penalty.","category":"Typography line breaking","checks":8,"contract":"Input [items, width]; items are [\"b\",w], [\"g\",w] or [\"p\",w,cost,flag]. Legal breaks: glue immediately after a box; penalty with cost < 10000 (width counted only if broken there); cost <= -10000 forces a break. Discardable glue/penalties at a line start are dropped. First-fit: when the running width exceeds the measure, break at the last legal breakpoint. Return [[line width, break kind]] with kinds glue/penalty/forced/end.","evaluation_group":"w2-typography-line-breaking-box-glue-penalty","failed_approach":"Allowing glue after glue as well still accepts illegal breakpoints.","family":"w2-typography-line-breaking-box-glue-penalty-glue-legality-context","id":"FA-80036","implementations":{"attempt":{"sha256":"29c7dbb33bdc59d09ff6bb51f270c22020e49b66b39db4cbcc27dd246b07944b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    items, width = x\n    lines = []\n    start = 0\n    n = len(items)\n    while start < n:\n        while start < n and items[start][0] != 'b':\n            start += 1\n        if start >= n:\n            break\n        total = 0\n        last = None\n        result = None\n        i = start\n        while i < n:\n            it = items[i]\n            if it[0] == 'p':\n                if it[2] <= -10000:\n                    result = (i, total + it[1], 'forced')\n                    break\n                if it[2] < 10000:\n                    last = (i, total + it[1], 'penalty')\n            elif it[0] == 'g':\n                if items[i - 1][0] in ('b', 'g'):\n                    last = (i, total, 'glue')\n                total += it[1]\n            else:\n                total += it[1]\n            if total > width and last is not None:\n                result = last\n                break\n            i += 1\n        if result is None:\n            lines.append([total, 'end'])\n            break\n        lines.append([result[1], result[2]])\n        start = result[0] + 1\n    return lines\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: glue legality context', [[['b', 7], ['p', 1, 50, True], ['g', 1], ['b', 4], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 7], ['g', 1], ['b', 1], ['g', 1], ['b', 5], ['p', 1, 50, True], ['g', 1]], 7], [[8, 'penalty'], [5, 'penalty'], [3, 'penalty'], [7, 'glue'], [8, 'penalty']]), ('regression: glue legality context', [[['b', 5], ['g', 1], ['b', 2], ['g', 1], ['b', 6], ['g', 2], ['b', 6], ['g', 1], ['g', 1], ['b', 4], ['p', 0, 10000, False], ['g', 2], ['b', 5], ['g', 1]], 6], [[5, 'glue'], [2, 'glue'], [6, 'glue'], [6, 'glue'], [11, 'glue']]), ('regression: glue legality context', [[['b', 3], ['g', 2], ['b', 2], ['p', 0, -10000, False], ['g', 2], ['b', 6], ['g', 1], ['b', 4], ['p', 0, 10000, False], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 4], ['g', 2]], 13], [[7, 'forced'], [6, 'glue'], [12, 'penalty'], [6, 'end']]), ('partial-repair probe', [[['b', 7], ['g', 2], ['b', 4], ['g', 1], ['b', 6], ['g', 1], ['b', 1], ['g', 1], ['b', 5], ['g', 2], ['b', 6], ['g', 2], ['b', 6], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 1], ['b', 6], ['p', 0, -10000, False], ['g', 2]], 16], [[13, 'glue'], [14, 'glue'], [14, 'glue'], [13, 'glue'], [6, 'forced']]), ('hyphen penalty taken', [[['b', 5], ['p', 1, 50, True], ['b', 4], ['g', 1], ['b', 3]], 7], [[6, 'penalty'], [4, 'glue'], [3, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('control layout', [[['b', 6], ['g', 2], ['b', 2], ['g', 2], ['b', 2], ['g', 2], ['b', 3], ['g', 2], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 2], ['b', 4], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 1], ['g', 1]], 13], [[10, 'glue'], [10, 'forced'], [11, 'forced'], [2, 'end']]), ('control layout', [[['b', 4], ['p', 0, 10000, False], ['g', 1], ['b', 5], ['g', 1], ['b', 5], ['g', 1], ['g', 1], ['b', 3], ['g', 1], ['b', 6], ['g', 1], ['b', 7], ['g', 2], ['b', 3], ['g', 1], ['b', 7], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1]], 12], [[10, 'glue'], [10, 'glue'], [6, 'glue'], [12, 'glue'], [9, 'forced']])], [('regression: glue legality context', [[['b', 5], ['p', 1, 50, True], ['g', 1], ['b', 3], ['g', 2], ['b', 4], ['g', 2], ['b', 2], ['g', 2], ['b', 4], ['p', 1, 50, True], ['g', 2], ['b', 6], ['g', 2], ['b', 1], ['g', 1], ['b', 6], ['p', 0, 900, False], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 6], ['p', 0, 900, False], ['g', 1]], 6], [[6, 'penalty'], [3, 'glue'], [4, 'glue'], [2, 'glue'], [5, 'penalty'], [6, 'glue'], [1, 'glue'], [6, 'penalty'], [7, 'penalty'], [6, 'penalty']]), ('regression: glue legality context', [[['b', 7], ['p', 0, -10000, False], ['g', 2], ['b', 7], ['g', 1], ['b', 4], ['p', 0, 9999, False], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1]], 6], [[7, 'forced'], [7, 'glue'], [4, 'penalty'], [7, 'penalty']]), ('regression: glue legality context', [[['b', 4], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 2], ['g', 2], ['b', 7], ['g', 2], ['b', 1], ['g', 1]], 7], [[5, 'penalty'], [2, 'glue'], [7, 'glue'], [2, 'end']]), ('regression: glue legality context', [[['b', 1], ['p', 1, 50, True], ['g', 2], ['b', 4], ['g', 2], ['b', 1], ['p', 0, -5000, False], ['g', 2], ['b', 7], ['p', 0, 10000, False], ['g', 2], ['b', 4], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 2], ['b', 3], ['p', 0, -10000, False], ['p', 1, 50, True], ['g', 1], ['b', 6], ['p', 0, 900, False], ['p', 1, 50, True], ['g', 1]], 11], [[10, 'penalty'], [14, 'penalty'], [4, 'glue'], [7, 'penalty'], [11, 'forced'], [7, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('inhibited penalty', [[['b', 5], ['p', 0, 10000, False], ['b', 4], ['g', 1], ['b', 3]], 7], [[9, 'glue'], [3, 'end']]), ('control layout', [[['b', 7], ['p', 0, -10000, False], ['g', 2], ['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 6], ['p', 0, 10000, False], ['g', 1], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 2], ['g', 2], ['b', 2], ['p', 1, 50, True], ['p', 1, 50, True], ['g', 1], ['b', 5], ['g', 2]], 16], [[7, 'forced'], [15, 'glue'], [10, 'end']]), ('control layout', [[['b', 5], ['g', 1], ['b', 4], ['g', 1], ['b', 4], ['g', 1], ['b', 7], ['g', 2], ['b', 7], ['g', 2], ['b', 1], ['g', 1], ['b', 2], ['g', 1], ['b', 6], ['g', 1], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 1], ['g', 1]], 16], [[15, 'glue'], [16, 'glue'], [14, 'forced'], [2, 'end']])], [('regression: glue legality context', [[['b', 7], ['p', 1, 50, True], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 1], ['b', 7], ['g', 1], ['b', 4], ['p', 0, -5000, False], ['g', 2], ['b', 2], ['g', 1], ['b', 3], ['g', 2], ['b', 2], ['g', 1], ['b', 6], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 2]], 17], [[12, 'penalty'], [16, 'glue'], [14, 'glue'], [13, 'end']]), ('regression: glue legality context', [[['b', 6], ['g', 1], ['b', 4], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 4], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 1], ['b', 6], ['g', 2], ['b', 5], ['g', 1], ['b', 3], ['g', 1], ['b', 2], ['g', 1]], 10], [[6, 'glue'], [4, 'glue'], [7, 'penalty'], [5, 'penalty'], [6, 'glue'], [6, 'glue'], [9, 'glue'], [3, 'end']]), ('partial-repair probe', [[['b', 5], ['g', 2], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 1], ['g', 1], ['b', 6], ['g', 1], ['g', 1], ['b', 1], ['g', 2]], 8], [[5, 'glue'], [8, 'glue'], [6, 'glue'], [3, 'end']]), ('regression: glue legality context', [[['b', 3], ['p', 0, -10000, False], ['g', 2], ['b', 6], ['p', 0, 10000, False], ['g', 1], ['b', 6], ['g', 1], ['b', 1], ['p', 0, 10000, False], ['p', 1, 50, True], ['g', 1], ['b', 3], ['g', 1], ['g', 1], ['b', 4], ['p', 0, -5000, False], ['g', 1], ['g', 1], ['b', 6], ['g', 1], ['b', 3], ['g', 1], ['g', 1], ['b', 3], ['g', 1]], 13], [[3, 'forced'], [13, 'glue'], [11, 'penalty'], [10, 'glue'], [4, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('inhibited penalty', [[['b', 5], ['p', 0, 10000, False], ['b', 4], ['g', 1], ['b', 3]], 7], [[9, 'glue'], [3, 'end']]), ('control layout', [[['b', 4], ['p', 0, 9999, False], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 2], ['b', 7], ['p', 0, 10000, False], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 2], ['b', 3], ['g', 2], ['b', 3], ['g', 2], ['b', 4], ['g', 2], ['b', 6], ['g', 1], ['b', 5], ['p', 1, 50, True], ['g', 2]], 16], [[11, 'glue'], [16, 'glue'], [9, 'glue'], [14, 'end']]), ('control layout', [[['b', 3], ['g', 2], ['b', 5], ['g', 2], ['b', 2], ['g', 1], ['b', 7], ['g', 1], ['b', 7], ['g', 2], ['b', 2], ['g', 1], ['g', 1], ['b', 7], ['p', 1, 50, True], ['g', 1]], 16], [[14, 'glue'], [15, 'glue'], [12, 'end']])], [('regression: glue legality context', [[['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 4], ['p', 0, 10000, False], ['g', 2], ['b', 2], ['g', 2], ['b', 4], ['g', 1], ['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 1]], 7], [[3, 'penalty'], [8, 'glue'], [8, 'penalty'], [7, 'end']]), ('regression: glue legality context', [[['b', 1], ['g', 1], ['g', 1], ['b', 1], ['g', 1], ['b', 5], ['p', 0, 10000, False], ['g', 1], ['b', 2], ['g', 2], ['b', 7], ['p', 1, 50, True], ['g', 1]], 12], [[4, 'glue'], [8, 'glue'], [8, 'end']]), ('regression: glue legality context', [[['b', 1], ['p', 0, 10000, False], ['g', 2], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 1], ['g', 1], ['b', 2], ['g', 2], ['b', 6], ['g', 1], ['g', 1], ['b', 7], ['g', 1], ['b', 3], ['p', 0, 10000, False], ['g', 2], ['b', 6], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 2], ['g', 1]], 12], [[11, 'glue'], [10, 'glue'], [7, 'glue'], [11, 'glue'], [5, 'end']]), ('partial-repair probe', [[['b', 7], ['g', 2], ['b', 2], ['g', 1], ['g', 1], ['b', 6], ['g', 1], ['b', 6], ['p', 0, -10000, False], ['g', 2], ['b', 1], ['g', 2]], 15], [[11, 'glue'], [13, 'forced'], [3, 'end']]), ('inhibited penalty', [[['b', 5], ['p', 0, 10000, False], ['b', 4], ['g', 1], ['b', 3]], 7], [[9, 'glue'], [3, 'end']]), ('hyphen penalty taken', [[['b', 5], ['p', 1, 50, True], ['b', 4], ['g', 1], ['b', 3]], 7], [[6, 'penalty'], [4, 'glue'], [3, 'end']]), ('control layout', [[['b', 1], ['p', 0, -10000, False], ['g', 1], ['g', 1], ['b', 7], ['p', 1, 50, True], ['g', 2], ['b', 4], ['g', 2], ['b', 4], ['g', 1], ['b', 7], ['g', 1], ['b', 4], ['p', 1, 50, True], ['g', 2], ['b', 1], ['g', 1], ['g', 1]], 14], [[1, 'forced'], [13, 'glue'], [12, 'glue'], [9, 'end']]), ('control layout', [[['b', 6], ['g', 2], ['b', 4], ['p', 0, -10000, False], ['g', 1], ['b', 5], ['g', 2], ['b', 4], ['g', 1], ['b', 6], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 4], ['p', 0, -10000, False], ['g', 2], ['b', 2], ['g', 2], ['b', 7], ['g', 2]], 13], [[12, 'forced'], [11, 'glue'], [12, 'forced'], [4, 'forced'], [13, 'end']])], [('regression: glue legality context', [[['b', 4], ['p', 1, 50, True], ['g', 1], ['b', 7], ['g', 2], ['b', 3], ['g', 2], ['b', 7], ['p', 0, -5000, False], ['g', 2], ['b', 3], ['p', 0, -10000, False], ['g', 2], ['b', 5], ['p', 1, 50, True], ['g', 1]], 7], [[5, 'penalty'], [7, 'glue'], [3, 'glue'], [7, 'penalty'], [3, 'forced'], [6, 'end']]), ('regression: glue legality context', [[['b', 3], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 2], ['b', 2], ['g', 1], ['g', 1], ['b', 1], ['g', 2]], 11], [[11, 'penalty'], [11, 'glue']]), ('partial-repair probe', [[['b', 6], ['g', 1], ['b', 6], ['g', 2], ['b', 3], ['p', 0, 10000, False], ['g', 1], ['g', 1], ['b', 1], ['p', 0, 10000, False], ['g', 2], ['b', 4], ['g', 1], ['b', 2], ['g', 2], ['b', 5], ['g', 1], ['b', 2], ['g', 1], ['g', 1]], 13], [[13, 'glue'], [12, 'glue'], [12, 'glue']]), ('regression: glue legality context', [[['b', 6], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 6], ['p', 0, 10000, False], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['g', 2], ['b', 1], ['p', 0, 10000, False], ['g', 2], ['b', 7], ['g', 2], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 3], ['g', 2], ['b', 2], ['p', 0, 900, False], ['g', 2], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 2]], 7], [[7, 'penalty'], [9, 'forced'], [10, 'glue'], [1, 'forced'], [7, 'penalty'], [2, 'penalty'], [6, 'glue']]), ('hyphen penalty taken', [[['b', 5], ['p', 1, 50, True], ['b', 4], ['g', 1], ['b', 3]], 7], [[6, 'penalty'], [4, 'glue'], [3, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('control layout', [[['b', 4], ['g', 1], ['b', 2], ['g', 1], ['g', 1], ['b', 2], ['g', 1], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1]], 11], [[11, 'glue'], [2, 'end']]), ('control layout', [[['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 2], ['b', 2], ['p', 1, 50, True], ['g', 1]], 15], [[15, 'end']])]]\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":"e481c47a02a828dabe9bb30d3a5249cc5dee776a3bc62c164d67342bdca56eac","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    items, width = x\n    lines = []\n    start = 0\n    n = len(items)\n    while start < n:\n        while start < n and items[start][0] != 'b':\n            start += 1\n        if start >= n:\n            break\n        total = 0\n        last = None\n        result = None\n        i = start\n        while i < n:\n            it = items[i]\n            if it[0] == 'p':\n                if it[2] <= -10000:\n                    result = (i, total + it[1], 'forced')\n                    break\n                if it[2] < 10000:\n                    last = (i, total + it[1], 'penalty')\n            elif it[0] == 'g':\n                if items[i - 1][0] != 'g':\n                    last = (i, total, 'glue')\n                total += it[1]\n            else:\n                total += it[1]\n            if total > width and last is not None:\n                result = last\n                break\n            i += 1\n        if result is None:\n            lines.append([total, 'end'])\n            break\n        lines.append([result[1], result[2]])\n        start = result[0] + 1\n    return lines\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: glue legality context', [[['b', 7], ['p', 1, 50, True], ['g', 1], ['b', 4], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 7], ['g', 1], ['b', 1], ['g', 1], ['b', 5], ['p', 1, 50, True], ['g', 1]], 7], [[8, 'penalty'], [5, 'penalty'], [3, 'penalty'], [7, 'glue'], [8, 'penalty']]), ('regression: glue legality context', [[['b', 5], ['g', 1], ['b', 2], ['g', 1], ['b', 6], ['g', 2], ['b', 6], ['g', 1], ['g', 1], ['b', 4], ['p', 0, 10000, False], ['g', 2], ['b', 5], ['g', 1]], 6], [[5, 'glue'], [2, 'glue'], [6, 'glue'], [6, 'glue'], [11, 'glue']]), ('regression: glue legality context', [[['b', 3], ['g', 2], ['b', 2], ['p', 0, -10000, False], ['g', 2], ['b', 6], ['g', 1], ['b', 4], ['p', 0, 10000, False], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 4], ['g', 2]], 13], [[7, 'forced'], [6, 'glue'], [12, 'penalty'], [6, 'end']]), ('partial-repair probe', [[['b', 7], ['g', 2], ['b', 4], ['g', 1], ['b', 6], ['g', 1], ['b', 1], ['g', 1], ['b', 5], ['g', 2], ['b', 6], ['g', 2], ['b', 6], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 1], ['b', 6], ['p', 0, -10000, False], ['g', 2]], 16], [[13, 'glue'], [14, 'glue'], [14, 'glue'], [13, 'glue'], [6, 'forced']]), ('hyphen penalty taken', [[['b', 5], ['p', 1, 50, True], ['b', 4], ['g', 1], ['b', 3]], 7], [[6, 'penalty'], [4, 'glue'], [3, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('control layout', [[['b', 6], ['g', 2], ['b', 2], ['g', 2], ['b', 2], ['g', 2], ['b', 3], ['g', 2], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 2], ['b', 4], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 1], ['g', 1]], 13], [[10, 'glue'], [10, 'forced'], [11, 'forced'], [2, 'end']]), ('control layout', [[['b', 4], ['p', 0, 10000, False], ['g', 1], ['b', 5], ['g', 1], ['b', 5], ['g', 1], ['g', 1], ['b', 3], ['g', 1], ['b', 6], ['g', 1], ['b', 7], ['g', 2], ['b', 3], ['g', 1], ['b', 7], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1]], 12], [[10, 'glue'], [10, 'glue'], [6, 'glue'], [12, 'glue'], [9, 'forced']])], [('regression: glue legality context', [[['b', 5], ['p', 1, 50, True], ['g', 1], ['b', 3], ['g', 2], ['b', 4], ['g', 2], ['b', 2], ['g', 2], ['b', 4], ['p', 1, 50, True], ['g', 2], ['b', 6], ['g', 2], ['b', 1], ['g', 1], ['b', 6], ['p', 0, 900, False], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 6], ['p', 0, 900, False], ['g', 1]], 6], [[6, 'penalty'], [3, 'glue'], [4, 'glue'], [2, 'glue'], [5, 'penalty'], [6, 'glue'], [1, 'glue'], [6, 'penalty'], [7, 'penalty'], [6, 'penalty']]), ('regression: glue legality context', [[['b', 7], ['p', 0, -10000, False], ['g', 2], ['b', 7], ['g', 1], ['b', 4], ['p', 0, 9999, False], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1]], 6], [[7, 'forced'], [7, 'glue'], [4, 'penalty'], [7, 'penalty']]), ('regression: glue legality context', [[['b', 4], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 2], ['g', 2], ['b', 7], ['g', 2], ['b', 1], ['g', 1]], 7], [[5, 'penalty'], [2, 'glue'], [7, 'glue'], [2, 'end']]), ('regression: glue legality context', [[['b', 1], ['p', 1, 50, True], ['g', 2], ['b', 4], ['g', 2], ['b', 1], ['p', 0, -5000, False], ['g', 2], ['b', 7], ['p', 0, 10000, False], ['g', 2], ['b', 4], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 2], ['b', 3], ['p', 0, -10000, False], ['p', 1, 50, True], ['g', 1], ['b', 6], ['p', 0, 900, False], ['p', 1, 50, True], ['g', 1]], 11], [[10, 'penalty'], [14, 'penalty'], [4, 'glue'], [7, 'penalty'], [11, 'forced'], [7, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('inhibited penalty', [[['b', 5], ['p', 0, 10000, False], ['b', 4], ['g', 1], ['b', 3]], 7], [[9, 'glue'], [3, 'end']]), ('control layout', [[['b', 7], ['p', 0, -10000, False], ['g', 2], ['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 6], ['p', 0, 10000, False], ['g', 1], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 2], ['g', 2], ['b', 2], ['p', 1, 50, True], ['p', 1, 50, True], ['g', 1], ['b', 5], ['g', 2]], 16], [[7, 'forced'], [15, 'glue'], [10, 'end']]), ('control layout', [[['b', 5], ['g', 1], ['b', 4], ['g', 1], ['b', 4], ['g', 1], ['b', 7], ['g', 2], ['b', 7], ['g', 2], ['b', 1], ['g', 1], ['b', 2], ['g', 1], ['b', 6], ['g', 1], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 1], ['g', 1]], 16], [[15, 'glue'], [16, 'glue'], [14, 'forced'], [2, 'end']])], [('regression: glue legality context', [[['b', 7], ['p', 1, 50, True], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 1], ['b', 7], ['g', 1], ['b', 4], ['p', 0, -5000, False], ['g', 2], ['b', 2], ['g', 1], ['b', 3], ['g', 2], ['b', 2], ['g', 1], ['b', 6], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 2]], 17], [[12, 'penalty'], [16, 'glue'], [14, 'glue'], [13, 'end']]), ('regression: glue legality context', [[['b', 6], ['g', 1], ['b', 4], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 4], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 1], ['b', 6], ['g', 2], ['b', 5], ['g', 1], ['b', 3], ['g', 1], ['b', 2], ['g', 1]], 10], [[6, 'glue'], [4, 'glue'], [7, 'penalty'], [5, 'penalty'], [6, 'glue'], [6, 'glue'], [9, 'glue'], [3, 'end']]), ('partial-repair probe', [[['b', 5], ['g', 2], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 1], ['g', 1], ['b', 6], ['g', 1], ['g', 1], ['b', 1], ['g', 2]], 8], [[5, 'glue'], [8, 'glue'], [6, 'glue'], [3, 'end']]), ('regression: glue legality context', [[['b', 3], ['p', 0, -10000, False], ['g', 2], ['b', 6], ['p', 0, 10000, False], ['g', 1], ['b', 6], ['g', 1], ['b', 1], ['p', 0, 10000, False], ['p', 1, 50, True], ['g', 1], ['b', 3], ['g', 1], ['g', 1], ['b', 4], ['p', 0, -5000, False], ['g', 1], ['g', 1], ['b', 6], ['g', 1], ['b', 3], ['g', 1], ['g', 1], ['b', 3], ['g', 1]], 13], [[3, 'forced'], [13, 'glue'], [11, 'penalty'], [10, 'glue'], [4, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('inhibited penalty', [[['b', 5], ['p', 0, 10000, False], ['b', 4], ['g', 1], ['b', 3]], 7], [[9, 'glue'], [3, 'end']]), ('control layout', [[['b', 4], ['p', 0, 9999, False], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 2], ['b', 7], ['p', 0, 10000, False], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 2], ['b', 3], ['g', 2], ['b', 3], ['g', 2], ['b', 4], ['g', 2], ['b', 6], ['g', 1], ['b', 5], ['p', 1, 50, True], ['g', 2]], 16], [[11, 'glue'], [16, 'glue'], [9, 'glue'], [14, 'end']]), ('control layout', [[['b', 3], ['g', 2], ['b', 5], ['g', 2], ['b', 2], ['g', 1], ['b', 7], ['g', 1], ['b', 7], ['g', 2], ['b', 2], ['g', 1], ['g', 1], ['b', 7], ['p', 1, 50, True], ['g', 1]], 16], [[14, 'glue'], [15, 'glue'], [12, 'end']])], [('regression: glue legality context', [[['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 4], ['p', 0, 10000, False], ['g', 2], ['b', 2], ['g', 2], ['b', 4], ['g', 1], ['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 1]], 7], [[3, 'penalty'], [8, 'glue'], [8, 'penalty'], [7, 'end']]), ('regression: glue legality context', [[['b', 1], ['g', 1], ['g', 1], ['b', 1], ['g', 1], ['b', 5], ['p', 0, 10000, False], ['g', 1], ['b', 2], ['g', 2], ['b', 7], ['p', 1, 50, True], ['g', 1]], 12], [[4, 'glue'], [8, 'glue'], [8, 'end']]), ('regression: glue legality context', [[['b', 1], ['p', 0, 10000, False], ['g', 2], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 1], ['g', 1], ['b', 2], ['g', 2], ['b', 6], ['g', 1], ['g', 1], ['b', 7], ['g', 1], ['b', 3], ['p', 0, 10000, False], ['g', 2], ['b', 6], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 2], ['g', 1]], 12], [[11, 'glue'], [10, 'glue'], [7, 'glue'], [11, 'glue'], [5, 'end']]), ('partial-repair probe', [[['b', 7], ['g', 2], ['b', 2], ['g', 1], ['g', 1], ['b', 6], ['g', 1], ['b', 6], ['p', 0, -10000, False], ['g', 2], ['b', 1], ['g', 2]], 15], [[11, 'glue'], [13, 'forced'], [3, 'end']]), ('inhibited penalty', [[['b', 5], ['p', 0, 10000, False], ['b', 4], ['g', 1], ['b', 3]], 7], [[9, 'glue'], [3, 'end']]), ('hyphen penalty taken', [[['b', 5], ['p', 1, 50, True], ['b', 4], ['g', 1], ['b', 3]], 7], [[6, 'penalty'], [4, 'glue'], [3, 'end']]), ('control layout', [[['b', 1], ['p', 0, -10000, False], ['g', 1], ['g', 1], ['b', 7], ['p', 1, 50, True], ['g', 2], ['b', 4], ['g', 2], ['b', 4], ['g', 1], ['b', 7], ['g', 1], ['b', 4], ['p', 1, 50, True], ['g', 2], ['b', 1], ['g', 1], ['g', 1]], 14], [[1, 'forced'], [13, 'glue'], [12, 'glue'], [9, 'end']]), ('control layout', [[['b', 6], ['g', 2], ['b', 4], ['p', 0, -10000, False], ['g', 1], ['b', 5], ['g', 2], ['b', 4], ['g', 1], ['b', 6], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 4], ['p', 0, -10000, False], ['g', 2], ['b', 2], ['g', 2], ['b', 7], ['g', 2]], 13], [[12, 'forced'], [11, 'glue'], [12, 'forced'], [4, 'forced'], [13, 'end']])], [('regression: glue legality context', [[['b', 4], ['p', 1, 50, True], ['g', 1], ['b', 7], ['g', 2], ['b', 3], ['g', 2], ['b', 7], ['p', 0, -5000, False], ['g', 2], ['b', 3], ['p', 0, -10000, False], ['g', 2], ['b', 5], ['p', 1, 50, True], ['g', 1]], 7], [[5, 'penalty'], [7, 'glue'], [3, 'glue'], [7, 'penalty'], [3, 'forced'], [6, 'end']]), ('regression: glue legality context', [[['b', 3], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 2], ['b', 2], ['g', 1], ['g', 1], ['b', 1], ['g', 2]], 11], [[11, 'penalty'], [11, 'glue']]), ('partial-repair probe', [[['b', 6], ['g', 1], ['b', 6], ['g', 2], ['b', 3], ['p', 0, 10000, False], ['g', 1], ['g', 1], ['b', 1], ['p', 0, 10000, False], ['g', 2], ['b', 4], ['g', 1], ['b', 2], ['g', 2], ['b', 5], ['g', 1], ['b', 2], ['g', 1], ['g', 1]], 13], [[13, 'glue'], [12, 'glue'], [12, 'glue']]), ('regression: glue legality context', [[['b', 6], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 6], ['p', 0, 10000, False], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['g', 2], ['b', 1], ['p', 0, 10000, False], ['g', 2], ['b', 7], ['g', 2], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 3], ['g', 2], ['b', 2], ['p', 0, 900, False], ['g', 2], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 2]], 7], [[7, 'penalty'], [9, 'forced'], [10, 'glue'], [1, 'forced'], [7, 'penalty'], [2, 'penalty'], [6, 'glue']]), ('hyphen penalty taken', [[['b', 5], ['p', 1, 50, True], ['b', 4], ['g', 1], ['b', 3]], 7], [[6, 'penalty'], [4, 'glue'], [3, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('control layout', [[['b', 4], ['g', 1], ['b', 2], ['g', 1], ['g', 1], ['b', 2], ['g', 1], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1]], 11], [[11, 'glue'], [2, 'end']]), ('control layout', [[['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 2], ['b', 2], ['p', 1, 50, True], ['g', 1]], 15], [[15, 'end']])]]\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":"07e3f7a69eb9f9ab42cc1488bf9cd35403a4ae816458f4dbf6ef26c0243df953","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    items, width = x\n    lines = []\n    start = 0\n    n = len(items)\n    while start < n:\n        while start < n and items[start][0] != 'b':\n            start += 1\n        if start >= n:\n            break\n        total = 0\n        last = None\n        result = None\n        i = start\n        while i < n:\n            it = items[i]\n            if it[0] == 'p':\n                if it[2] <= -10000:\n                    result = (i, total + it[1], 'forced')\n                    break\n                if it[2] < 10000:\n                    last = (i, total + it[1], 'penalty')\n            elif it[0] == 'g':\n                if items[i - 1][0] == 'b':\n                    last = (i, total, 'glue')\n                total += it[1]\n            else:\n                total += it[1]\n            if total > width and last is not None:\n                result = last\n                break\n            i += 1\n        if result is None:\n            lines.append([total, 'end'])\n            break\n        lines.append([result[1], result[2]])\n        start = result[0] + 1\n    return lines\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: glue legality context', [[['b', 7], ['p', 1, 50, True], ['g', 1], ['b', 4], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 7], ['g', 1], ['b', 1], ['g', 1], ['b', 5], ['p', 1, 50, True], ['g', 1]], 7], [[8, 'penalty'], [5, 'penalty'], [3, 'penalty'], [7, 'glue'], [8, 'penalty']]), ('regression: glue legality context', [[['b', 5], ['g', 1], ['b', 2], ['g', 1], ['b', 6], ['g', 2], ['b', 6], ['g', 1], ['g', 1], ['b', 4], ['p', 0, 10000, False], ['g', 2], ['b', 5], ['g', 1]], 6], [[5, 'glue'], [2, 'glue'], [6, 'glue'], [6, 'glue'], [11, 'glue']]), ('regression: glue legality context', [[['b', 3], ['g', 2], ['b', 2], ['p', 0, -10000, False], ['g', 2], ['b', 6], ['g', 1], ['b', 4], ['p', 0, 10000, False], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 4], ['g', 2]], 13], [[7, 'forced'], [6, 'glue'], [12, 'penalty'], [6, 'end']]), ('partial-repair probe', [[['b', 7], ['g', 2], ['b', 4], ['g', 1], ['b', 6], ['g', 1], ['b', 1], ['g', 1], ['b', 5], ['g', 2], ['b', 6], ['g', 2], ['b', 6], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 1], ['b', 6], ['p', 0, -10000, False], ['g', 2]], 16], [[13, 'glue'], [14, 'glue'], [14, 'glue'], [13, 'glue'], [6, 'forced']]), ('hyphen penalty taken', [[['b', 5], ['p', 1, 50, True], ['b', 4], ['g', 1], ['b', 3]], 7], [[6, 'penalty'], [4, 'glue'], [3, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('control layout', [[['b', 6], ['g', 2], ['b', 2], ['g', 2], ['b', 2], ['g', 2], ['b', 3], ['g', 2], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 2], ['b', 4], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 1], ['g', 1]], 13], [[10, 'glue'], [10, 'forced'], [11, 'forced'], [2, 'end']]), ('control layout', [[['b', 4], ['p', 0, 10000, False], ['g', 1], ['b', 5], ['g', 1], ['b', 5], ['g', 1], ['g', 1], ['b', 3], ['g', 1], ['b', 6], ['g', 1], ['b', 7], ['g', 2], ['b', 3], ['g', 1], ['b', 7], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1]], 12], [[10, 'glue'], [10, 'glue'], [6, 'glue'], [12, 'glue'], [9, 'forced']])], [('regression: glue legality context', [[['b', 5], ['p', 1, 50, True], ['g', 1], ['b', 3], ['g', 2], ['b', 4], ['g', 2], ['b', 2], ['g', 2], ['b', 4], ['p', 1, 50, True], ['g', 2], ['b', 6], ['g', 2], ['b', 1], ['g', 1], ['b', 6], ['p', 0, 900, False], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 6], ['p', 0, 900, False], ['g', 1]], 6], [[6, 'penalty'], [3, 'glue'], [4, 'glue'], [2, 'glue'], [5, 'penalty'], [6, 'glue'], [1, 'glue'], [6, 'penalty'], [7, 'penalty'], [6, 'penalty']]), ('regression: glue legality context', [[['b', 7], ['p', 0, -10000, False], ['g', 2], ['b', 7], ['g', 1], ['b', 4], ['p', 0, 9999, False], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1]], 6], [[7, 'forced'], [7, 'glue'], [4, 'penalty'], [7, 'penalty']]), ('regression: glue legality context', [[['b', 4], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 2], ['g', 2], ['b', 7], ['g', 2], ['b', 1], ['g', 1]], 7], [[5, 'penalty'], [2, 'glue'], [7, 'glue'], [2, 'end']]), ('regression: glue legality context', [[['b', 1], ['p', 1, 50, True], ['g', 2], ['b', 4], ['g', 2], ['b', 1], ['p', 0, -5000, False], ['g', 2], ['b', 7], ['p', 0, 10000, False], ['g', 2], ['b', 4], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 2], ['b', 3], ['p', 0, -10000, False], ['p', 1, 50, True], ['g', 1], ['b', 6], ['p', 0, 900, False], ['p', 1, 50, True], ['g', 1]], 11], [[10, 'penalty'], [14, 'penalty'], [4, 'glue'], [7, 'penalty'], [11, 'forced'], [7, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('inhibited penalty', [[['b', 5], ['p', 0, 10000, False], ['b', 4], ['g', 1], ['b', 3]], 7], [[9, 'glue'], [3, 'end']]), ('control layout', [[['b', 7], ['p', 0, -10000, False], ['g', 2], ['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 6], ['p', 0, 10000, False], ['g', 1], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 2], ['g', 2], ['b', 2], ['p', 1, 50, True], ['p', 1, 50, True], ['g', 1], ['b', 5], ['g', 2]], 16], [[7, 'forced'], [15, 'glue'], [10, 'end']]), ('control layout', [[['b', 5], ['g', 1], ['b', 4], ['g', 1], ['b', 4], ['g', 1], ['b', 7], ['g', 2], ['b', 7], ['g', 2], ['b', 1], ['g', 1], ['b', 2], ['g', 1], ['b', 6], ['g', 1], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 1], ['g', 1]], 16], [[15, 'glue'], [16, 'glue'], [14, 'forced'], [2, 'end']])], [('regression: glue legality context', [[['b', 7], ['p', 1, 50, True], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 1], ['b', 7], ['g', 1], ['b', 4], ['p', 0, -5000, False], ['g', 2], ['b', 2], ['g', 1], ['b', 3], ['g', 2], ['b', 2], ['g', 1], ['b', 6], ['g', 1], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 2]], 17], [[12, 'penalty'], [16, 'glue'], [14, 'glue'], [13, 'end']]), ('regression: glue legality context', [[['b', 6], ['g', 1], ['b', 4], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 4], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 1], ['b', 6], ['g', 2], ['b', 5], ['g', 1], ['b', 3], ['g', 1], ['b', 2], ['g', 1]], 10], [[6, 'glue'], [4, 'glue'], [7, 'penalty'], [5, 'penalty'], [6, 'glue'], [6, 'glue'], [9, 'glue'], [3, 'end']]), ('partial-repair probe', [[['b', 5], ['g', 2], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 1], ['g', 1], ['b', 6], ['g', 1], ['g', 1], ['b', 1], ['g', 2]], 8], [[5, 'glue'], [8, 'glue'], [6, 'glue'], [3, 'end']]), ('regression: glue legality context', [[['b', 3], ['p', 0, -10000, False], ['g', 2], ['b', 6], ['p', 0, 10000, False], ['g', 1], ['b', 6], ['g', 1], ['b', 1], ['p', 0, 10000, False], ['p', 1, 50, True], ['g', 1], ['b', 3], ['g', 1], ['g', 1], ['b', 4], ['p', 0, -5000, False], ['g', 1], ['g', 1], ['b', 6], ['g', 1], ['b', 3], ['g', 1], ['g', 1], ['b', 3], ['g', 1]], 13], [[3, 'forced'], [13, 'glue'], [11, 'penalty'], [10, 'glue'], [4, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('inhibited penalty', [[['b', 5], ['p', 0, 10000, False], ['b', 4], ['g', 1], ['b', 3]], 7], [[9, 'glue'], [3, 'end']]), ('control layout', [[['b', 4], ['p', 0, 9999, False], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 2], ['b', 7], ['p', 0, 10000, False], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 2], ['b', 3], ['g', 2], ['b', 3], ['g', 2], ['b', 4], ['g', 2], ['b', 6], ['g', 1], ['b', 5], ['p', 1, 50, True], ['g', 2]], 16], [[11, 'glue'], [16, 'glue'], [9, 'glue'], [14, 'end']]), ('control layout', [[['b', 3], ['g', 2], ['b', 5], ['g', 2], ['b', 2], ['g', 1], ['b', 7], ['g', 1], ['b', 7], ['g', 2], ['b', 2], ['g', 1], ['g', 1], ['b', 7], ['p', 1, 50, True], ['g', 1]], 16], [[14, 'glue'], [15, 'glue'], [12, 'end']])], [('regression: glue legality context', [[['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 4], ['p', 0, 10000, False], ['g', 2], ['b', 2], ['g', 2], ['b', 4], ['g', 1], ['b', 2], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 1]], 7], [[3, 'penalty'], [8, 'glue'], [8, 'penalty'], [7, 'end']]), ('regression: glue legality context', [[['b', 1], ['g', 1], ['g', 1], ['b', 1], ['g', 1], ['b', 5], ['p', 0, 10000, False], ['g', 1], ['b', 2], ['g', 2], ['b', 7], ['p', 1, 50, True], ['g', 1]], 12], [[4, 'glue'], [8, 'glue'], [8, 'end']]), ('regression: glue legality context', [[['b', 1], ['p', 0, 10000, False], ['g', 2], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 1], ['g', 1], ['b', 2], ['g', 2], ['b', 6], ['g', 1], ['g', 1], ['b', 7], ['g', 1], ['b', 3], ['p', 0, 10000, False], ['g', 2], ['b', 6], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 2], ['g', 1]], 12], [[11, 'glue'], [10, 'glue'], [7, 'glue'], [11, 'glue'], [5, 'end']]), ('partial-repair probe', [[['b', 7], ['g', 2], ['b', 2], ['g', 1], ['g', 1], ['b', 6], ['g', 1], ['b', 6], ['p', 0, -10000, False], ['g', 2], ['b', 1], ['g', 2]], 15], [[11, 'glue'], [13, 'forced'], [3, 'end']]), ('inhibited penalty', [[['b', 5], ['p', 0, 10000, False], ['b', 4], ['g', 1], ['b', 3]], 7], [[9, 'glue'], [3, 'end']]), ('hyphen penalty taken', [[['b', 5], ['p', 1, 50, True], ['b', 4], ['g', 1], ['b', 3]], 7], [[6, 'penalty'], [4, 'glue'], [3, 'end']]), ('control layout', [[['b', 1], ['p', 0, -10000, False], ['g', 1], ['g', 1], ['b', 7], ['p', 1, 50, True], ['g', 2], ['b', 4], ['g', 2], ['b', 4], ['g', 1], ['b', 7], ['g', 1], ['b', 4], ['p', 1, 50, True], ['g', 2], ['b', 1], ['g', 1], ['g', 1]], 14], [[1, 'forced'], [13, 'glue'], [12, 'glue'], [9, 'end']]), ('control layout', [[['b', 6], ['g', 2], ['b', 4], ['p', 0, -10000, False], ['g', 1], ['b', 5], ['g', 2], ['b', 4], ['g', 1], ['b', 6], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 1], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 4], ['p', 0, -10000, False], ['g', 2], ['b', 2], ['g', 2], ['b', 7], ['g', 2]], 13], [[12, 'forced'], [11, 'glue'], [12, 'forced'], [4, 'forced'], [13, 'end']])], [('regression: glue legality context', [[['b', 4], ['p', 1, 50, True], ['g', 1], ['b', 7], ['g', 2], ['b', 3], ['g', 2], ['b', 7], ['p', 0, -5000, False], ['g', 2], ['b', 3], ['p', 0, -10000, False], ['g', 2], ['b', 5], ['p', 1, 50, True], ['g', 1]], 7], [[5, 'penalty'], [7, 'glue'], [3, 'glue'], [7, 'penalty'], [3, 'forced'], [6, 'end']]), ('regression: glue legality context', [[['b', 3], ['g', 1], ['b', 6], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 2], ['b', 2], ['g', 1], ['g', 1], ['b', 1], ['g', 2]], 11], [[11, 'penalty'], [11, 'glue']]), ('partial-repair probe', [[['b', 6], ['g', 1], ['b', 6], ['g', 2], ['b', 3], ['p', 0, 10000, False], ['g', 1], ['g', 1], ['b', 1], ['p', 0, 10000, False], ['g', 2], ['b', 4], ['g', 1], ['b', 2], ['g', 2], ['b', 5], ['g', 1], ['b', 2], ['g', 1], ['g', 1]], 13], [[13, 'glue'], [12, 'glue'], [12, 'glue']]), ('regression: glue legality context', [[['b', 6], ['p', 1, 50, True], ['g', 1], ['g', 1], ['b', 6], ['p', 0, 10000, False], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['g', 2], ['b', 1], ['p', 0, 10000, False], ['g', 2], ['b', 7], ['g', 2], ['b', 1], ['p', 0, -10000, False], ['g', 1], ['b', 3], ['g', 2], ['b', 2], ['p', 0, 900, False], ['g', 2], ['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 6], ['g', 2]], 7], [[7, 'penalty'], [9, 'forced'], [10, 'glue'], [1, 'forced'], [7, 'penalty'], [2, 'penalty'], [6, 'glue']]), ('hyphen penalty taken', [[['b', 5], ['p', 1, 50, True], ['b', 4], ['g', 1], ['b', 3]], 7], [[6, 'penalty'], [4, 'glue'], [3, 'end']]), ('forced break', [[['b', 2], ['g', 1], ['b', 2], ['p', 0, -10000, False], ['b', 3]], 20], [[5, 'forced'], [3, 'end']]), ('control layout', [[['b', 4], ['g', 1], ['b', 2], ['g', 1], ['g', 1], ['b', 2], ['g', 1], ['g', 1], ['b', 1], ['p', 1, 50, True], ['g', 1]], 11], [[11, 'glue'], [2, 'end']]), ('control layout', [[['b', 1], ['p', 1, 50, True], ['g', 1], ['b', 3], ['p', 1, 50, True], ['g', 1], ['b', 4], ['g', 2], ['b', 2], ['p', 1, 50, True], ['g', 1]], 15], [[15, 'end']])]]\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-box-glue-penalty-glue-legality-context","generated_at":"2026-09-29T14:49:50.230126+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 glue immediately preceded by a box is a legal breakpoint.","root_cause":"Glue is treated as a breakpoint whenever the previous item is not glue.","sha256":"fd563ace8a2c17e01b9c1a46ca3e267ca1b102d20cecedcd7c97a019aeae5327","title":"Box-glue-penalty breakpoints: glue legality context · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.523,"exit_code":1,"observations":[{"actual":[[8,"penalty"],[5,"glue"],[3,"penalty"],[7,"glue"],[8,"penalty"]],"check":"regression: glue legality context","expected":[[8,"penalty"],[5,"penalty"],[3,"penalty"],[7,"glue"],[8,"penalty"]],"passed":false},{"actual":[[5,"glue"],[2,"glue"],[6,"glue"],[6,"glue"],[11,"glue"]],"check":"regression: glue legality context","expected":[[5,"glue"],[2,"glue"],[6,"glue"],[6,"glue"],[11,"glue"]],"passed":true},{"actual":[[7,"forced"],[6,"glue"],[12,"glue"],[6,"end"]],"check":"regression: glue legality context","expected":[[7,"forced"],[6,"glue"],[12,"penalty"],[6,"end"]],"passed":false},{"actual":[[13,"glue"],[14,"glue"],[15,"glue"],[13,"glue"],[6,"forced"]],"check":"partial-repair probe","expected":[[13,"glue"],[14,"glue"],[14,"glue"],[13,"glue"],[6,"forced"]],"passed":false},{"actual":[[6,"penalty"],[4,"glue"],[3,"end"]],"check":"hyphen penalty taken","expected":[[6,"penalty"],[4,"glue"],[3,"end"]],"passed":true},{"actual":[[5,"forced"],[3,"end"]],"check":"forced break","expected":[[5,"forced"],[3,"end"]],"passed":true},{"actual":[[10,"glue"],[10,"forced"],[11,"forced"],[2,"end"]],"check":"control layout","expected":[[10,"glue"],[10,"forced"],[11,"forced"],[2,"end"]],"passed":true},{"actual":[[10,"glue"],[10,"glue"],[6,"glue"],[12,"glue"],[9,"forced"]],"check":"control layout","expected":[[10,"glue"],[10,"glue"],[6,"glue"],[12,"glue"],[9,"forced"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: glue legality context\", \"actual\": [[8, \"penalty\"], [5, \"glue\"], [3, \"penalty\"], [7, \"glue\"], [8, \"penalty\"]], \"expected\": [[8, \"penalty\"], [5, \"penalty\"], [3, \"penalty\"], [7, \"glue\"], [8, \"penalty\"]], \"passed\": false}, {\"check\": \"regression: glue legality context\", \"actual\": [[5, \"glue\"], [2, \"glue\"], [6, \"glue\"], [6, \"glue\"], [11, \"glue\"]], \"expected\": [[5, \"glue\"], [2, \"glue\"], [6, \"glue\"], [6, \"glue\"], [11, \"glue\"]], \"passed\": true}, {\"check\": \"regression: glue legality context\", \"actual\": [[7, \"forced\"], [6, \"glue\"], [12, \"glue\"], [6, \"end\"]], \"expected\": [[7, \"forced\"], [6, \"glue\"], [12, \"penalty\"], [6, \"end\"]], \"passed\": false}, {\"check\": \"partial-repair probe\", \"actual\": [[13, \"glue\"], [14, \"glue\"], [15, \"glue\"], [13, \"glue\"], [6, \"forced\"]], \"expected\": [[13, \"glue\"], [14, \"glue\"], [14, \"glue\"], [13, \"glue\"], [6, \"forced\"]], \"passed\": false}, {\"check\": \"hyphen penalty taken\", \"actual\": [[6, \"penalty\"], [4, \"glue\"], [3, \"end\"]], \"expected\": [[6, \"penalty\"], [4, \"glue\"], [3, \"end\"]], \"passed\": true}, {\"check\": \"forced break\", \"actual\": [[5, \"forced\"], [3, \"end\"]], \"expected\": [[5, \"forced\"], [3, \"end\"]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[10, \"glue\"], [10, \"forced\"], [11, \"forced\"], [2, \"end\"]], \"expected\": [[10, \"glue\"], [10, \"forced\"], [11, \"forced\"], [2, \"end\"]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[10, \"glue\"], [10, \"glue\"], [6, \"glue\"], [12, \"glue\"], [9, \"forced\"]], \"expected\": [[10, \"glue\"], [10, \"glue\"], [6, \"glue\"], [12, \"glue\"], [9, \"forced\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.691,"exit_code":1,"observations":[{"actual":[[7,"glue"],[4,"glue"],[2,"glue"],[7,"glue"],[7,"glue"]],"check":"regression: glue legality context","expected":[[8,"penalty"],[5,"penalty"],[3,"penalty"],[7,"glue"],[8,"penalty"]],"passed":false},{"actual":[[5,"glue"],[2,"glue"],[6,"glue"],[6,"glue"],[4,"glue"],[6,"end"]],"check":"regression: glue legality context","expected":[[5,"glue"],[2,"glue"],[6,"glue"],[6,"glue"],[11,"glue"]],"passed":false},{"actual":[[7,"forced"],[11,"glue"],[12,"glue"]],"check":"regression: glue legality context","expected":[[7,"forced"],[6,"glue"],[12,"penalty"],[6,"end"]],"passed":false},{"actual":[[13,"glue"],[14,"glue"],[14,"glue"],[13,"glue"],[6,"forced"]],"check":"partial-repair probe","expected":[[13,"glue"],[14,"glue"],[14,"glue"],[13,"glue"],[6,"forced"]],"passed":true},{"actual":[[6,"penalty"],[4,"glue"],[3,"end"]],"check":"hyphen penalty taken","expected":[[6,"penalty"],[4,"glue"],[3,"end"]],"passed":true},{"actual":[[5,"forced"],[3,"end"]],"check":"forced break","expected":[[5,"forced"],[3,"end"]],"passed":true},{"actual":[[10,"glue"],[10,"forced"],[11,"forced"],[2,"end"]],"check":"control layout","expected":[[10,"glue"],[10,"forced"],[11,"forced"],[2,"end"]],"passed":true},{"actual":[[10,"glue"],[10,"glue"],[6,"glue"],[12,"glue"],[9,"forced"]],"check":"control layout","expected":[[10,"glue"],[10,"glue"],[6,"glue"],[12,"glue"],[9,"forced"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: glue legality context\", \"actual\": [[7, \"glue\"], [4, \"glue\"], [2, \"glue\"], [7, \"glue\"], [7, \"glue\"]], \"expected\": [[8, \"penalty\"], [5, \"penalty\"], [3, \"penalty\"], [7, \"glue\"], [8, \"penalty\"]], \"passed\": false}, {\"check\": \"regression: glue legality context\", \"actual\": [[5, \"glue\"], [2, \"glue\"], [6, \"glue\"], [6, \"glue\"], [4, \"glue\"], [6, \"end\"]], \"expected\": [[5, \"glue\"], [2, \"glue\"], [6, \"glue\"], [6, \"glue\"], [11, \"glue\"]], \"passed\": false}, {\"check\": \"regression: glue legality context\", \"actual\": [[7, \"forced\"], [11, \"glue\"], [12, \"glue\"]], \"expected\": [[7, \"forced\"], [6, \"glue\"], [12, \"penalty\"], [6, \"end\"]], \"passed\": false}, {\"check\": \"partial-repair probe\", \"actual\": [[13, \"glue\"], [14, \"glue\"], [14, \"glue\"], [13, \"glue\"], [6, \"forced\"]], \"expected\": [[13, \"glue\"], [14, \"glue\"], [14, \"glue\"], [13, \"glue\"], [6, \"forced\"]], \"passed\": true}, {\"check\": \"hyphen penalty taken\", \"actual\": [[6, \"penalty\"], [4, \"glue\"], [3, \"end\"]], \"expected\": [[6, \"penalty\"], [4, \"glue\"], [3, \"end\"]], \"passed\": true}, {\"check\": \"forced break\", \"actual\": [[5, \"forced\"], [3, \"end\"]], \"expected\": [[5, \"forced\"], [3, \"end\"]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[10, \"glue\"], [10, \"forced\"], [11, \"forced\"], [2, \"end\"]], \"expected\": [[10, \"glue\"], [10, \"forced\"], [11, \"forced\"], [2, \"end\"]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[10, \"glue\"], [10, \"glue\"], [6, \"glue\"], [12, \"glue\"], [9, \"forced\"]], \"expected\": [[10, \"glue\"], [10, \"glue\"], [6, \"glue\"], [12, \"glue\"], [9, \"forced\"]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.925,"exit_code":0,"observations":[{"actual":[[8,"penalty"],[5,"penalty"],[3,"penalty"],[7,"glue"],[8,"penalty"]],"check":"regression: glue legality context","expected":[[8,"penalty"],[5,"penalty"],[3,"penalty"],[7,"glue"],[8,"penalty"]],"passed":true},{"actual":[[5,"glue"],[2,"glue"],[6,"glue"],[6,"glue"],[11,"glue"]],"check":"regression: glue legality context","expected":[[5,"glue"],[2,"glue"],[6,"glue"],[6,"glue"],[11,"glue"]],"passed":true},{"actual":[[7,"forced"],[6,"glue"],[12,"penalty"],[6,"end"]],"check":"regression: glue legality context","expected":[[7,"forced"],[6,"glue"],[12,"penalty"],[6,"end"]],"passed":true},{"actual":[[13,"glue"],[14,"glue"],[14,"glue"],[13,"glue"],[6,"forced"]],"check":"partial-repair probe","expected":[[13,"glue"],[14,"glue"],[14,"glue"],[13,"glue"],[6,"forced"]],"passed":true},{"actual":[[6,"penalty"],[4,"glue"],[3,"end"]],"check":"hyphen penalty taken","expected":[[6,"penalty"],[4,"glue"],[3,"end"]],"passed":true},{"actual":[[5,"forced"],[3,"end"]],"check":"forced break","expected":[[5,"forced"],[3,"end"]],"passed":true},{"actual":[[10,"glue"],[10,"forced"],[11,"forced"],[2,"end"]],"check":"control layout","expected":[[10,"glue"],[10,"forced"],[11,"forced"],[2,"end"]],"passed":true},{"actual":[[10,"glue"],[10,"glue"],[6,"glue"],[12,"glue"],[9,"forced"]],"check":"control layout","expected":[[10,"glue"],[10,"glue"],[6,"glue"],[12,"glue"],[9,"forced"]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: glue legality context\", \"actual\": [[8, \"penalty\"], [5, \"penalty\"], [3, \"penalty\"], [7, \"glue\"], [8, \"penalty\"]], \"expected\": [[8, \"penalty\"], [5, \"penalty\"], [3, \"penalty\"], [7, \"glue\"], [8, \"penalty\"]], \"passed\": true}, {\"check\": \"regression: glue legality context\", \"actual\": [[5, \"glue\"], [2, \"glue\"], [6, \"glue\"], [6, \"glue\"], [11, \"glue\"]], \"expected\": [[5, \"glue\"], [2, \"glue\"], [6, \"glue\"], [6, \"glue\"], [11, \"glue\"]], \"passed\": true}, {\"check\": \"regression: glue legality context\", \"actual\": [[7, \"forced\"], [6, \"glue\"], [12, \"penalty\"], [6, \"end\"]], \"expected\": [[7, \"forced\"], [6, \"glue\"], [12, \"penalty\"], [6, \"end\"]], \"passed\": true}, {\"check\": \"partial-repair probe\", \"actual\": [[13, \"glue\"], [14, \"glue\"], [14, \"glue\"], [13, \"glue\"], [6, \"forced\"]], \"expected\": [[13, \"glue\"], [14, \"glue\"], [14, \"glue\"], [13, \"glue\"], [6, \"forced\"]], \"passed\": true}, {\"check\": \"hyphen penalty taken\", \"actual\": [[6, \"penalty\"], [4, \"glue\"], [3, \"end\"]], \"expected\": [[6, \"penalty\"], [4, \"glue\"], [3, \"end\"]], \"passed\": true}, {\"check\": \"forced break\", \"actual\": [[5, \"forced\"], [3, \"end\"]], \"expected\": [[5, \"forced\"], [3, \"end\"]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[10, \"glue\"], [10, \"forced\"], [11, \"forced\"], [2, \"end\"]], \"expected\": [[10, \"glue\"], [10, \"forced\"], [11, \"forced\"], [2, \"end\"]], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [[10, \"glue\"], [10, \"glue\"], [6, \"glue\"], [12, \"glue\"], [9, \"forced\"]], \"expected\": [[10, \"glue\"], [10, \"glue\"], [6, \"glue\"], [12, \"glue\"], [9, \"forced\"]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}