FAILURE MAP
← Case archive

FA-80241 / Typography line breaking / Open access

Hanging-indent list labels: label clearance · case 01

Labels exactly as wide as the hang touch the text.

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

ROOT CAUSE

The clearance test ignores the one-space gap after the label.

VERIFIED REPAIR

Require label width plus one space to fit inside the hang.

Unsuccessful approach: Tolerating a label one wider than the hang overprints the text.

Case contract

Input [label, words, width, hang]. The label starts at column 0; first-line text starts at column hang when label+1 space fits, else right after label plus one space. Continuation lines are indented by hang. Greedy fill with unit spaces measuring absolute columns. Return padded lines.

Why this case matters

Line breaking decides where paragraphs wrap on screen and in print; a wrong decision point shifts every following line.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    label, words, width, hang = x
    lines = []
    first = True
    start = hang if len(label) <= hang else len(label) + 1
    cur = []
    col = start
    for w in words:
        need = col + len(w) if not cur else col + 1 + len(w)
        if cur and need > width:
            prefix = label.ljust(start) if first else ' ' * hang
            lines.append(prefix + ' '.join(cur))
            first = False
            cur = [w]
            col = hang + len(w)
        else:
            cur.append(w)
            col = need
    if cur:
        prefix = label.ljust(start) if first else ' ' * hang
        lines.append(prefix + ' '.join(cur))
    return lines
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: label clearance', ['Note:', ['type', 'x'], 12, 5], ['Note: type x']), ('regression: label clearance', ['A.1.2', ['x', 'a', 'grid', 'baseline', 'a', 'on', 'x'], 12, 5], ['A.1.2 x a', '     grid', '     baseline', '     a on x']), ('regression: label clearance', ['(a)', ['type', 'is', 'at', 'on'], 20, 3], ['(a) type is at on']), ('regression: label clearance', ['1.', ['type', 'serif', 'a', 'the', 'at', 'kerning', 'at'], 17, 2], ['1. type serif a', '  the at kerning', '  at']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['(a)', ['ink', 'baseline', 'serif', 'on'], 16, 4], ['(a) ink baseline', '    serif on']), ('control layout', ['(a)', ['x', 'x', 'type'], 14, 5], ['(a)  x x type'])], [('regression: label clearance', ['Note:', ['baseline', 'baseline', 'at', 'grid', 'ink', 'type'], 21, 5], ['Note: baseline', '     baseline at grid', '     ink type']), ('regression: label clearance', ['1.', ['measure', 'grid', 'kerning'], 13, 2], ['1. measure', '  grid', '  kerning']), ('regression: label clearance', ['1.', ['x', 'the', 'kerning', 'x', 'baseline', 'grid'], 20, 2], ['1. x the kerning x', '  baseline grid']), ('regression: label clearance', ['Note:', ['baseline', 'serif', 'x', 'grid', 'serif', 'x', 'type'], 18, 5], ['Note: baseline', '     serif x grid', '     serif x type']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['1.', ['ink', 'kerning'], 22, 5], ['1.   ink kerning']), ('control layout', ['A.1.2', ['x', 'ink', 'on'], 15, 3], ['A.1.2 x ink on'])], [('regression: label clearance', ['A.1.2', ['kerning', 'x', 'the', 'measure', 'ink', 'measure'], 13, 5], ['A.1.2 kerning', '     x the', '     measure', '     ink', '     measure']), ('regression: label clearance', ['10.', ['grid', 'is', 'type', 'of', 'of', 'of', 'a', 'on', 'ink'], 19, 3], ['10. grid is type of', '   of of a on ink']), ('regression: label clearance', ['iv.', ['x', 'x'], 13, 3], ['iv. x x']), ('regression: label clearance', ['(a)', ['of', 'of', 'grid', 'grid'], 15, 3], ['(a) of of grid', '   grid']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('control layout', ['A.1.2', ['ink', 'ink', 'on', 'serif', 'is', 'baseline', 'a', 'on', 'serif'], 16, 2], ['A.1.2 ink ink on', '  serif is', '  baseline a on', '  serif']), ('control layout', ['•', ['baseline', 'is', 'at'], 15, 2], ['• baseline is', '  at'])], [('regression: label clearance', ['(a)', ['at', 'on', 'of', 'grid', 'at', 'a', 'type', 'measure', 'grid'], 18, 3], ['(a) at on of grid', '   at a type', '   measure grid']), ('regression: label clearance', ['A.1.2', ['of', 'serif', 'at', 'serif', 'of', 'is'], 19, 5], ['A.1.2 of serif at', '     serif of is']), ('regression: label clearance', ['(a)', ['serif', 'x'], 19, 3], ['(a) serif x']), ('partial-repair probe', ['Note:', ['grid', 'on', 'at'], 22, 4], ['Note: grid on at']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['iv.', ['of', 'is'], 17, 4], ['iv. of is']), ('control layout', ['10.', ['measure', 'of', 'x', 'of', 'kerning', 'a', 'serif', 'baseline'], 20, 4], ['10. measure of x of', '    kerning a serif', '    baseline'])], [('regression: label clearance', ['A.1.2', ['at', 'of', 'ink', 'x', 'is', 'type', 'grid'], 18, 5], ['A.1.2 at of ink x', '     is type grid']), ('regression: label clearance', ['(a)', ['serif', 'x'], 19, 3], ['(a) serif x']), ('regression: label clearance', ['1.', ['x', 'type', 'baseline'], 22, 2], ['1. x type baseline']), ('regression: label clearance', ['(a)', ['at', 'on', 'of', 'grid', 'at', 'a', 'type', 'measure', 'grid'], 18, 3], ['(a) at on of grid', '   at a type', '   measure grid']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['(a)', ['type', 'on', 'the', 'measure'], 16, 5], ['(a)  type on the', '     measure']), ('control layout', ['Note:', ['at', 'of'], 16, 2], ['Note: at of'])]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: label clearance['Note:type x']['Note: type x']Failed
regression: label clearance['A.1.2x a', ' grid', ' baseline', ' a on x']['A.1.2 x a', ' grid', ' baseline', ' a on x']Failed
regression: label clearance['(a)type is at on']['(a) type is at on']Failed
regression: label clearance['1.type serif a', ' the at kerning', ' at']['1. type serif a', ' the at kerning', ' at']Failed
label overflows hang['Note: the type', ' grid is on', ' serif']['Note: the type', ' grid is on', ' serif']Passed
label exactly one short of hang['1. the type', ' grid is', ' on']['1. the type', ' grid is', ' on']Passed
control layout['(a) ink baseline', ' serif on']['(a) ink baseline', ' serif on']Passed
control layout['(a) x x type']['(a) x x type']Passed

SHA-256 / c51cf830c5cf6ba8e8b03a5f7b69bb7fa366651d736a7d8cf338b2e355a91d7b

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    label, words, width, hang = x
    lines = []
    first = True
    start = hang if len(label) <= hang + 1 else len(label) + 1
    cur = []
    col = start
    for w in words:
        need = col + len(w) if not cur else col + 1 + len(w)
        if cur and need > width:
            prefix = label.ljust(start) if first else ' ' * hang
            lines.append(prefix + ' '.join(cur))
            first = False
            cur = [w]
            col = hang + len(w)
        else:
            cur.append(w)
            col = need
    if cur:
        prefix = label.ljust(start) if first else ' ' * hang
        lines.append(prefix + ' '.join(cur))
    return lines
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: label clearance', ['Note:', ['type', 'x'], 12, 5], ['Note: type x']), ('regression: label clearance', ['A.1.2', ['x', 'a', 'grid', 'baseline', 'a', 'on', 'x'], 12, 5], ['A.1.2 x a', '     grid', '     baseline', '     a on x']), ('regression: label clearance', ['(a)', ['type', 'is', 'at', 'on'], 20, 3], ['(a) type is at on']), ('regression: label clearance', ['1.', ['type', 'serif', 'a', 'the', 'at', 'kerning', 'at'], 17, 2], ['1. type serif a', '  the at kerning', '  at']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['(a)', ['ink', 'baseline', 'serif', 'on'], 16, 4], ['(a) ink baseline', '    serif on']), ('control layout', ['(a)', ['x', 'x', 'type'], 14, 5], ['(a)  x x type'])], [('regression: label clearance', ['Note:', ['baseline', 'baseline', 'at', 'grid', 'ink', 'type'], 21, 5], ['Note: baseline', '     baseline at grid', '     ink type']), ('regression: label clearance', ['1.', ['measure', 'grid', 'kerning'], 13, 2], ['1. measure', '  grid', '  kerning']), ('regression: label clearance', ['1.', ['x', 'the', 'kerning', 'x', 'baseline', 'grid'], 20, 2], ['1. x the kerning x', '  baseline grid']), ('regression: label clearance', ['Note:', ['baseline', 'serif', 'x', 'grid', 'serif', 'x', 'type'], 18, 5], ['Note: baseline', '     serif x grid', '     serif x type']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['1.', ['ink', 'kerning'], 22, 5], ['1.   ink kerning']), ('control layout', ['A.1.2', ['x', 'ink', 'on'], 15, 3], ['A.1.2 x ink on'])], [('regression: label clearance', ['A.1.2', ['kerning', 'x', 'the', 'measure', 'ink', 'measure'], 13, 5], ['A.1.2 kerning', '     x the', '     measure', '     ink', '     measure']), ('regression: label clearance', ['10.', ['grid', 'is', 'type', 'of', 'of', 'of', 'a', 'on', 'ink'], 19, 3], ['10. grid is type of', '   of of a on ink']), ('regression: label clearance', ['iv.', ['x', 'x'], 13, 3], ['iv. x x']), ('regression: label clearance', ['(a)', ['of', 'of', 'grid', 'grid'], 15, 3], ['(a) of of grid', '   grid']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('control layout', ['A.1.2', ['ink', 'ink', 'on', 'serif', 'is', 'baseline', 'a', 'on', 'serif'], 16, 2], ['A.1.2 ink ink on', '  serif is', '  baseline a on', '  serif']), ('control layout', ['•', ['baseline', 'is', 'at'], 15, 2], ['• baseline is', '  at'])], [('regression: label clearance', ['(a)', ['at', 'on', 'of', 'grid', 'at', 'a', 'type', 'measure', 'grid'], 18, 3], ['(a) at on of grid', '   at a type', '   measure grid']), ('regression: label clearance', ['A.1.2', ['of', 'serif', 'at', 'serif', 'of', 'is'], 19, 5], ['A.1.2 of serif at', '     serif of is']), ('regression: label clearance', ['(a)', ['serif', 'x'], 19, 3], ['(a) serif x']), ('partial-repair probe', ['Note:', ['grid', 'on', 'at'], 22, 4], ['Note: grid on at']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['iv.', ['of', 'is'], 17, 4], ['iv. of is']), ('control layout', ['10.', ['measure', 'of', 'x', 'of', 'kerning', 'a', 'serif', 'baseline'], 20, 4], ['10. measure of x of', '    kerning a serif', '    baseline'])], [('regression: label clearance', ['A.1.2', ['at', 'of', 'ink', 'x', 'is', 'type', 'grid'], 18, 5], ['A.1.2 at of ink x', '     is type grid']), ('regression: label clearance', ['(a)', ['serif', 'x'], 19, 3], ['(a) serif x']), ('regression: label clearance', ['1.', ['x', 'type', 'baseline'], 22, 2], ['1. x type baseline']), ('regression: label clearance', ['(a)', ['at', 'on', 'of', 'grid', 'at', 'a', 'type', 'measure', 'grid'], 18, 3], ['(a) at on of grid', '   at a type', '   measure grid']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['(a)', ['type', 'on', 'the', 'measure'], 16, 5], ['(a)  type on the', '     measure']), ('control layout', ['Note:', ['at', 'of'], 16, 2], ['Note: at of'])]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: label clearance['Note:type x']['Note: type x']Failed
regression: label clearance['A.1.2x a', ' grid', ' baseline', ' a on x']['A.1.2 x a', ' grid', ' baseline', ' a on x']Failed
regression: label clearance['(a)type is at on']['(a) type is at on']Failed
regression: label clearance['1.type serif a', ' the at kerning', ' at']['1. type serif a', ' the at kerning', ' at']Failed
label overflows hang['Note: the type', ' grid is on', ' serif']['Note: the type', ' grid is on', ' serif']Passed
label exactly one short of hang['1. the type', ' grid is', ' on']['1. the type', ' grid is', ' on']Passed
control layout['(a) ink baseline', ' serif on']['(a) ink baseline', ' serif on']Passed
control layout['(a) x x type']['(a) x x type']Passed

SHA-256 / 491bfa270a968c346746722dfe98a4c8038ada91223e7f4da6a318327bc4b2a7

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    label, words, width, hang = x
    lines = []
    first = True
    start = hang if len(label) + 1 <= hang else len(label) + 1
    cur = []
    col = start
    for w in words:
        need = col + len(w) if not cur else col + 1 + len(w)
        if cur and need > width:
            prefix = label.ljust(start) if first else ' ' * hang
            lines.append(prefix + ' '.join(cur))
            first = False
            cur = [w]
            col = hang + len(w)
        else:
            cur.append(w)
            col = need
    if cur:
        prefix = label.ljust(start) if first else ' ' * hang
        lines.append(prefix + ' '.join(cur))
    return lines
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: label clearance', ['Note:', ['type', 'x'], 12, 5], ['Note: type x']), ('regression: label clearance', ['A.1.2', ['x', 'a', 'grid', 'baseline', 'a', 'on', 'x'], 12, 5], ['A.1.2 x a', '     grid', '     baseline', '     a on x']), ('regression: label clearance', ['(a)', ['type', 'is', 'at', 'on'], 20, 3], ['(a) type is at on']), ('regression: label clearance', ['1.', ['type', 'serif', 'a', 'the', 'at', 'kerning', 'at'], 17, 2], ['1. type serif a', '  the at kerning', '  at']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['(a)', ['ink', 'baseline', 'serif', 'on'], 16, 4], ['(a) ink baseline', '    serif on']), ('control layout', ['(a)', ['x', 'x', 'type'], 14, 5], ['(a)  x x type'])], [('regression: label clearance', ['Note:', ['baseline', 'baseline', 'at', 'grid', 'ink', 'type'], 21, 5], ['Note: baseline', '     baseline at grid', '     ink type']), ('regression: label clearance', ['1.', ['measure', 'grid', 'kerning'], 13, 2], ['1. measure', '  grid', '  kerning']), ('regression: label clearance', ['1.', ['x', 'the', 'kerning', 'x', 'baseline', 'grid'], 20, 2], ['1. x the kerning x', '  baseline grid']), ('regression: label clearance', ['Note:', ['baseline', 'serif', 'x', 'grid', 'serif', 'x', 'type'], 18, 5], ['Note: baseline', '     serif x grid', '     serif x type']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['1.', ['ink', 'kerning'], 22, 5], ['1.   ink kerning']), ('control layout', ['A.1.2', ['x', 'ink', 'on'], 15, 3], ['A.1.2 x ink on'])], [('regression: label clearance', ['A.1.2', ['kerning', 'x', 'the', 'measure', 'ink', 'measure'], 13, 5], ['A.1.2 kerning', '     x the', '     measure', '     ink', '     measure']), ('regression: label clearance', ['10.', ['grid', 'is', 'type', 'of', 'of', 'of', 'a', 'on', 'ink'], 19, 3], ['10. grid is type of', '   of of a on ink']), ('regression: label clearance', ['iv.', ['x', 'x'], 13, 3], ['iv. x x']), ('regression: label clearance', ['(a)', ['of', 'of', 'grid', 'grid'], 15, 3], ['(a) of of grid', '   grid']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('control layout', ['A.1.2', ['ink', 'ink', 'on', 'serif', 'is', 'baseline', 'a', 'on', 'serif'], 16, 2], ['A.1.2 ink ink on', '  serif is', '  baseline a on', '  serif']), ('control layout', ['•', ['baseline', 'is', 'at'], 15, 2], ['• baseline is', '  at'])], [('regression: label clearance', ['(a)', ['at', 'on', 'of', 'grid', 'at', 'a', 'type', 'measure', 'grid'], 18, 3], ['(a) at on of grid', '   at a type', '   measure grid']), ('regression: label clearance', ['A.1.2', ['of', 'serif', 'at', 'serif', 'of', 'is'], 19, 5], ['A.1.2 of serif at', '     serif of is']), ('regression: label clearance', ['(a)', ['serif', 'x'], 19, 3], ['(a) serif x']), ('partial-repair probe', ['Note:', ['grid', 'on', 'at'], 22, 4], ['Note: grid on at']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['iv.', ['of', 'is'], 17, 4], ['iv. of is']), ('control layout', ['10.', ['measure', 'of', 'x', 'of', 'kerning', 'a', 'serif', 'baseline'], 20, 4], ['10. measure of x of', '    kerning a serif', '    baseline'])], [('regression: label clearance', ['A.1.2', ['at', 'of', 'ink', 'x', 'is', 'type', 'grid'], 18, 5], ['A.1.2 at of ink x', '     is type grid']), ('regression: label clearance', ['(a)', ['serif', 'x'], 19, 3], ['(a) serif x']), ('regression: label clearance', ['1.', ['x', 'type', 'baseline'], 22, 2], ['1. x type baseline']), ('regression: label clearance', ['(a)', ['at', 'on', 'of', 'grid', 'at', 'a', 'type', 'measure', 'grid'], 18, 3], ['(a) at on of grid', '   at a type', '   measure grid']), ('label overflows hang', ['Note:', ['the', 'type', 'grid', 'is', 'on', 'serif'], 14, 3], ['Note: the type', '   grid is on', '   serif']), ('label exactly one short of hang', ['1.', ['the', 'type', 'grid', 'is', 'on'], 12, 3], ['1. the type', '   grid is', '   on']), ('control layout', ['(a)', ['type', 'on', 'the', 'measure'], 16, 5], ['(a)  type on the', '     measure']), ('control layout', ['Note:', ['at', 'of'], 16, 2], ['Note: at of'])]]
for label, args, expected in fixtures[N - 1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: label clearance['Note: type x']['Note: type x']Passed
regression: label clearance['A.1.2 x a', ' grid', ' baseline', ' a on x']['A.1.2 x a', ' grid', ' baseline', ' a on x']Passed
regression: label clearance['(a) type is at on']['(a) type is at on']Passed
regression: label clearance['1. type serif a', ' the at kerning', ' at']['1. type serif a', ' the at kerning', ' at']Passed
label overflows hang['Note: the type', ' grid is on', ' serif']['Note: the type', ' grid is on', ' serif']Passed
label exactly one short of hang['1. the type', ' grid is', ' on']['1. the type', ' grid is', ' on']Passed
control layout['(a) ink baseline', ' serif on']['(a) ink baseline', ' serif on']Passed
control layout['(a) x x type']['(a) x x type']Passed

SHA-256 / 55cbcd01e9a859a2a9684305732ba2e7fa186b67f7dbf018a9a13c60342c62d1

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:49:52.159397+00:00.

Case digest / c6de3132beeea2c60b7d6c21c0f5399379b1e4517afdc861bdc04da0a00681a6