FAILURE MAP
← Case archive

FA-80321 / Typography line breaking / Open access

URL line breaking: period break side · case 01

Lines end with a dangling period instead of starting with it.

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

ROOT CAUSE

Punctuation breaks are placed after the character instead of before it.

VERIFIED REPAIR

Break before periods, hyphens, underscores and similar marks.

Unsuccessful approach: Keeping only . ? # misses hyphens and underscores.

Case contract

Input [url, width]. Break opportunities (no hyphen added): after ":"; after "//" (never between its slashes); before a single "/"; before . - _ ? # % ~; before or after = and &. While the rest exceeds the width, break at the latest opportunity within width characters, else hard-break at width. Return 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):
    url, width = x
    n = len(url)
    ok = set()
    for p in range(1, n):
        a, b = url[p - 1], url[p]
        if a == ':':
            ok.add(p)
        elif a == '/' and url[p - 2:p] == '//':
            ok.add(p)
        elif b == '/' and a != '/' and url[p + 1:p + 2] != '/':
            ok.add(p)
        elif a in '.-_?#%~':
            ok.add(p)
        elif a in '=&' or b in '=&':
            ok.add(p)
    lines = []
    start = 0
    while n - start > width:
        cands = [p for p in ok if start < p <= start + width]
        cut = max(cands) if cands else start + width
        lines.append(url[start:cut])
        start = cut
    lines.append(url[start:])
    return lines
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 5], ['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']), ('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 6], ['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']), ('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 6], ['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('control layout', ['file:///usr/local/share/doc', 7], ['file://', '/usr', '/local', '/share', '/doc']), ('control layout', ['file:///usr/local/share/doc', 14], ['file:///usr', '/local/share', '/doc']), ('control layout', ['file:///usr/local/share/doc', 4], ['file', ':///', 'usr', '/loc', 'al', '/sha', 're', '/doc'])], [('regression: period break side', ['https://w.org/a=b/c&d', 12], ['https://w', '.org/a=b/c&d']), ('regression: period break side', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 16], ['ftp://files.site', '.net/pub/file', '-name_v2.tar.gz']), ('regression: period break side', ['https://www.docs.io/a/b/c#sec-3', 5], ['https', '://', 'www', '.docs', '.io/a', '/b/c', '#sec', '-3']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 7], ['http://', 'a.b.org', '/x//y?q', '=1&r=2']), ('control layout', ['https://x.io/search?term=line%20break&lang=en', 15], ['https://x.io', '/search?term=', 'line%20break&', 'lang=en'])], [('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 16], ['https://sub', '.domain.example', '.co.uk/~user', '/page']), ('regression: period break side', ['https://example.com/path/to/page.html', 9], ['https://', 'example', '.com/path', '/to/page', '.html']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 9], ['https://x', '.io', '/search', '?term=', 'line', '%20break&', 'lang=en']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 9], ['https://', 'sub', '.domain', '.example', '.co.uk/', '~user', '/page']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('control layout', ['file:///usr/local/share/doc', 6], ['file:', '///usr', '/local', '/share', '/doc']), ('control layout', ['https://w.org/a=b/c&d', 15], ['https://w.org/a', '=b/c&d'])], [('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 8], ['ftp://', 'files', '.site', '.net/pub', '/file', '-name_v2', '.tar.gz']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 15], ['https://sub', '.domain.example', '.co.uk/~user', '/page']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 5], ['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 4], ['http', 's://', 'sub', '.dom', 'ain', '.exa', 'mple', '.co', '.uk/', '~use', 'r', '/pag', 'e']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 15], ['http://a.b.org', '/x//y?q=1&r=2']), ('control layout', ['https://x.io/search?term=line%20break&lang=en', 15], ['https://x.io', '/search?term=', 'line%20break&', 'lang=en'])], [('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 6], ['https:', '//x.io', '/searc', 'h?term', '=line', '%20bre', 'ak&', 'lang=', 'en']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 5], ['https', '://', 'sub', '.doma', 'in', '.exam', 'ple', '.co', '.uk/', '~user', '/page']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 4], ['http', 's://', 'sub', '.dom', 'ain', '.exa', 'mple', '.co', '.uk/', '~use', 'r', '/pag', 'e']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 7], ['https:', '//x.io', '/search', '?term=', 'line', '%20brea', 'k&lang=', 'en']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 14], ['http://a.b.org', '/x//y?q=1&r=2']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 15], ['http://a.b.org', '/x//y?q=1&r=2'])]]
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
double slash inside path['http://a.', 'b.org/x//', 'y?q=1&r=2']['http://a.b', '.org/x//y', '?q=1&r=2']Failed
regression: period break side['https', '://x.', 'io', '/sear', 'ch?', 'term=', 'line%', '20bre', 'ak&', 'lang=', 'en']['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']Failed
regression: period break side['ftp://', 'files.', 'site.', 'net', '/pub', '/file-', 'name_', 'v2.', 'tar.gz']['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']Failed
regression: period break side['ftp://', 'files.', 'site.', 'net', '/pub', '/file-', 'name_', 'v2.', 'tar.gz']['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']Failed
break after scheme['https://', 'example.', 'com/path', '/to', '/page.', 'html']['https://', 'example', '.com', '/path/to', '/page', '.html']Failed
control layout['file://', '/usr', '/local', '/share', '/doc']['file://', '/usr', '/local', '/share', '/doc']Passed
control layout['file:///usr', '/local/share', '/doc']['file:///usr', '/local/share', '/doc']Passed
control layout['file', ':///', 'usr', '/loc', 'al', '/sha', 're', '/doc']['file', ':///', 'usr', '/loc', 'al', '/sha', 're', '/doc']Passed

SHA-256 / 8d05301788da126fff690ba9e9ad8dac041194b0f3f7a30ef962963f721894a6

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    url, width = x
    n = len(url)
    ok = set()
    for p in range(1, n):
        a, b = url[p - 1], url[p]
        if a == ':':
            ok.add(p)
        elif a == '/' and url[p - 2:p] == '//':
            ok.add(p)
        elif b == '/' and a != '/' and url[p + 1:p + 2] != '/':
            ok.add(p)
        elif b in '.?#':
            ok.add(p)
        elif a in '=&' or b in '=&':
            ok.add(p)
    lines = []
    start = 0
    while n - start > width:
        cands = [p for p in ok if start < p <= start + width]
        cut = max(cands) if cands else start + width
        lines.append(url[start:cut])
        start = cut
    lines.append(url[start:])
    return lines
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 5], ['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']), ('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 6], ['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']), ('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 6], ['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('control layout', ['file:///usr/local/share/doc', 7], ['file://', '/usr', '/local', '/share', '/doc']), ('control layout', ['file:///usr/local/share/doc', 14], ['file:///usr', '/local/share', '/doc']), ('control layout', ['file:///usr/local/share/doc', 4], ['file', ':///', 'usr', '/loc', 'al', '/sha', 're', '/doc'])], [('regression: period break side', ['https://w.org/a=b/c&d', 12], ['https://w', '.org/a=b/c&d']), ('regression: period break side', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 16], ['ftp://files.site', '.net/pub/file', '-name_v2.tar.gz']), ('regression: period break side', ['https://www.docs.io/a/b/c#sec-3', 5], ['https', '://', 'www', '.docs', '.io/a', '/b/c', '#sec', '-3']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 7], ['http://', 'a.b.org', '/x//y?q', '=1&r=2']), ('control layout', ['https://x.io/search?term=line%20break&lang=en', 15], ['https://x.io', '/search?term=', 'line%20break&', 'lang=en'])], [('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 16], ['https://sub', '.domain.example', '.co.uk/~user', '/page']), ('regression: period break side', ['https://example.com/path/to/page.html', 9], ['https://', 'example', '.com/path', '/to/page', '.html']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 9], ['https://x', '.io', '/search', '?term=', 'line', '%20break&', 'lang=en']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 9], ['https://', 'sub', '.domain', '.example', '.co.uk/', '~user', '/page']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('control layout', ['file:///usr/local/share/doc', 6], ['file:', '///usr', '/local', '/share', '/doc']), ('control layout', ['https://w.org/a=b/c&d', 15], ['https://w.org/a', '=b/c&d'])], [('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 8], ['ftp://', 'files', '.site', '.net/pub', '/file', '-name_v2', '.tar.gz']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 15], ['https://sub', '.domain.example', '.co.uk/~user', '/page']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 5], ['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 4], ['http', 's://', 'sub', '.dom', 'ain', '.exa', 'mple', '.co', '.uk/', '~use', 'r', '/pag', 'e']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 15], ['http://a.b.org', '/x//y?q=1&r=2']), ('control layout', ['https://x.io/search?term=line%20break&lang=en', 15], ['https://x.io', '/search?term=', 'line%20break&', 'lang=en'])], [('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 6], ['https:', '//x.io', '/searc', 'h?term', '=line', '%20bre', 'ak&', 'lang=', 'en']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 5], ['https', '://', 'sub', '.doma', 'in', '.exam', 'ple', '.co', '.uk/', '~user', '/page']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 4], ['http', 's://', 'sub', '.dom', 'ain', '.exa', 'mple', '.co', '.uk/', '~use', 'r', '/pag', 'e']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 7], ['https:', '//x.io', '/search', '?term=', 'line', '%20brea', 'k&lang=', 'en']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 14], ['http://a.b.org', '/x//y?q=1&r=2']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 15], ['http://a.b.org', '/x//y?q=1&r=2'])]]
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
double slash inside path['http://a.b', '.org/x//y', '?q=1&r=2']['http://a.b', '.org/x//y', '?q=1&r=2']Passed
regression: period break side['https', '://x', '.io', '/sear', 'ch', '?term', '=', 'line%', '20bre', 'ak&', 'lang=', 'en']['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']Failed
regression: period break side['ftp://', 'files', '.site', '.net', '/pub', '/file-', 'name_v', '2.tar', '.gz']['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']Failed
regression: period break side['ftp://', 'files', '.site', '.net', '/pub', '/file-', 'name_v', '2.tar', '.gz']['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']Failed
break after scheme['https://', 'example', '.com', '/path/to', '/page', '.html']['https://', 'example', '.com', '/path/to', '/page', '.html']Passed
control layout['file://', '/usr', '/local', '/share', '/doc']['file://', '/usr', '/local', '/share', '/doc']Passed
control layout['file:///usr', '/local/share', '/doc']['file:///usr', '/local/share', '/doc']Passed
control layout['file', ':///', 'usr', '/loc', 'al', '/sha', 're', '/doc']['file', ':///', 'usr', '/loc', 'al', '/sha', 're', '/doc']Passed

SHA-256 / ffe734f082e374c3154fedc9673d1e3af9c8353531c364af68117058ad2fbde7

3 / The verified repair

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

N = 1
observations = []
def solve(x):
    url, width = x
    n = len(url)
    ok = set()
    for p in range(1, n):
        a, b = url[p - 1], url[p]
        if a == ':':
            ok.add(p)
        elif a == '/' and url[p - 2:p] == '//':
            ok.add(p)
        elif b == '/' and a != '/' and url[p + 1:p + 2] != '/':
            ok.add(p)
        elif b in '.-_?#%~':
            ok.add(p)
        elif a in '=&' or b in '=&':
            ok.add(p)
    lines = []
    start = 0
    while n - start > width:
        cands = [p for p in ok if start < p <= start + width]
        cut = max(cands) if cands else start + width
        lines.append(url[start:cut])
        start = cut
    lines.append(url[start:])
    return lines
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 5], ['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']), ('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 6], ['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']), ('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 6], ['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('control layout', ['file:///usr/local/share/doc', 7], ['file://', '/usr', '/local', '/share', '/doc']), ('control layout', ['file:///usr/local/share/doc', 14], ['file:///usr', '/local/share', '/doc']), ('control layout', ['file:///usr/local/share/doc', 4], ['file', ':///', 'usr', '/loc', 'al', '/sha', 're', '/doc'])], [('regression: period break side', ['https://w.org/a=b/c&d', 12], ['https://w', '.org/a=b/c&d']), ('regression: period break side', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 16], ['ftp://files.site', '.net/pub/file', '-name_v2.tar.gz']), ('regression: period break side', ['https://www.docs.io/a/b/c#sec-3', 5], ['https', '://', 'www', '.docs', '.io/a', '/b/c', '#sec', '-3']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 7], ['http://', 'a.b.org', '/x//y?q', '=1&r=2']), ('control layout', ['https://x.io/search?term=line%20break&lang=en', 15], ['https://x.io', '/search?term=', 'line%20break&', 'lang=en'])], [('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 16], ['https://sub', '.domain.example', '.co.uk/~user', '/page']), ('regression: period break side', ['https://example.com/path/to/page.html', 9], ['https://', 'example', '.com/path', '/to/page', '.html']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 9], ['https://x', '.io', '/search', '?term=', 'line', '%20break&', 'lang=en']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 9], ['https://', 'sub', '.domain', '.example', '.co.uk/', '~user', '/page']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('control layout', ['file:///usr/local/share/doc', 6], ['file:', '///usr', '/local', '/share', '/doc']), ('control layout', ['https://w.org/a=b/c&d', 15], ['https://w.org/a', '=b/c&d'])], [('regression: period break side', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 8], ['ftp://', 'files', '.site', '.net/pub', '/file', '-name_v2', '.tar.gz']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 15], ['https://sub', '.domain.example', '.co.uk/~user', '/page']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 5], ['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 4], ['http', 's://', 'sub', '.dom', 'ain', '.exa', 'mple', '.co', '.uk/', '~use', 'r', '/pag', 'e']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 15], ['http://a.b.org', '/x//y?q=1&r=2']), ('control layout', ['https://x.io/search?term=line%20break&lang=en', 15], ['https://x.io', '/search?term=', 'line%20break&', 'lang=en'])], [('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 6], ['https:', '//x.io', '/searc', 'h?term', '=line', '%20bre', 'ak&', 'lang=', 'en']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 5], ['https', '://', 'sub', '.doma', 'in', '.exam', 'ple', '.co', '.uk/', '~user', '/page']), ('regression: period break side', ['https://sub.domain.example.co.uk/~user/page', 4], ['http', 's://', 'sub', '.dom', 'ain', '.exa', 'mple', '.co', '.uk/', '~use', 'r', '/pag', 'e']), ('regression: period break side', ['https://x.io/search?term=line%20break&lang=en', 7], ['https:', '//x.io', '/search', '?term=', 'line', '%20brea', 'k&lang=', 'en']), ('double slash inside path', ['http://a.b.org/x//y?q=1&r=2', 10], ['http://a.b', '.org/x//y', '?q=1&r=2']), ('break after scheme', ['https://example.com/path/to/page.html', 8], ['https://', 'example', '.com', '/path/to', '/page', '.html']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 14], ['http://a.b.org', '/x//y?q=1&r=2']), ('control layout', ['http://a.b.org/x//y?q=1&r=2', 15], ['http://a.b.org', '/x//y?q=1&r=2'])]]
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
double slash inside path['http://a.b', '.org/x//y', '?q=1&r=2']['http://a.b', '.org/x//y', '?q=1&r=2']Passed
regression: period break side['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']['https', '://x', '.io', '/sear', 'ch', '?term', '=line', '%20br', 'eak&', 'lang=', 'en']Passed
regression: period break side['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']Passed
regression: period break side['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']['ftp://', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']Passed
break after scheme['https://', 'example', '.com', '/path/to', '/page', '.html']['https://', 'example', '.com', '/path/to', '/page', '.html']Passed
control layout['file://', '/usr', '/local', '/share', '/doc']['file://', '/usr', '/local', '/share', '/doc']Passed
control layout['file:///usr', '/local/share', '/doc']['file:///usr', '/local/share', '/doc']Passed
control layout['file', ':///', 'usr', '/loc', 'al', '/sha', 're', '/doc']['file', ':///', 'usr', '/loc', 'al', '/sha', 're', '/doc']Passed

SHA-256 / e317b077ab6cb31ce95795e91bfdec1ad00c818a130529eddc55e5c1a2a79f48

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.845862+00:00.

Case digest / a840c5e0054d7e77837c7cf50318ec4eed24e4c283c26fb320ca4399dac1e766