{"abstract":"URLs are broken between the two slashes of \"//\".","category":"Typography line breaking","checks":8,"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.","contract_signature":"x","evaluation_group":"w2-typography-line-breaking-url-breaking","failed_approach":"Checking the previous character but not the next still splits \"x//y\" before the pair.","family":"w2-typography-line-breaking-url-breaking-double-slash-integrity","id":"FA-80311","implementations":{"attempt":{"sha256":"860be1427159b0c7d7f209c1d248a152a75f7ae76b23e26ae0c4420e43c269c4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    url, width = x\n    n = len(url)\n    ok = set()\n    for p in range(1, n):\n        a, b = url[p - 1], url[p]\n        if a == ':':\n            ok.add(p)\n        elif a == '/' and url[p - 2:p] == '//':\n            ok.add(p)\n        elif b == '/' and a != '/':\n            ok.add(p)\n        elif b in '.-_?#%~':\n            ok.add(p)\n        elif a in '=&' or b in '=&':\n            ok.add(p)\n    lines = []\n    start = 0\n    while n - start > width:\n        cands = [p for p in ok if start < p <= start + width]\n        cut = max(cands) if cands else start + width\n        lines.append(url[start:cut])\n        start = cut\n    lines.append(url[start:])\n    return lines\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: double slash integrity', ['https://x.io/search?term=line%20break&lang=en', 7], ['https:', '//x.io', '/search', '?term=', 'line', '%20brea', 'k&lang=', 'en']), ('regression: double slash integrity', ['https://example.com/path/to/page.html', 7], ['https:', '//', 'example', '.com', '/path', '/to', '/page', '.html']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 9], ['http://a', '.b.org', '/x//y?q=1', '&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 9], ['http://a', '.b.org', '/x//y?q=1', '&r=2']), ('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', ['https://w.org/a=b/c&d', 5], ['https', '://w', '.org', '/a=b', '/c&d']), ('control layout', ['file:///usr/local/share/doc', 14], ['file:///usr', '/local/share', '/doc'])], [('regression: double slash integrity', ['https://www.docs.io/a/b/c#sec-3', 7], ['https:', '//www', '.docs', '.io/a/b', '/c#sec', '-3']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 6], ['http:', '//a.b', '.org', '/x//y', '?q=1&r', '=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 9], ['http://a', '.b.org', '/x//y?q=1', '&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('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', ['https://www.docs.io/a/b/c#sec-3', 4], ['http', 's://', 'www', '.doc', 's.io', '/a/b', '/c', '#sec', '-3']), ('control layout', ['https://t.co/AbCdEf', 5], ['https', '://t', '.co', '/AbCd', 'Ef'])], [('regression: double slash integrity', ['https://example.com/path/to/page.html', 7], ['https:', '//', 'example', '.com', '/path', '/to', '/page', '.html']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 6], ['http:', '//a.b', '.org', '/x//y', '?q=1&r', '=2']), ('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', ['file:///usr/local/share/doc', 7], ['file://', '/usr', '/local', '/share', '/doc']), ('control layout', ['https://www.docs.io/a/b/c#sec-3', 14], ['https://www', '.docs.io/a/b/c', '#sec-3'])], [('regression: double slash integrity', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 5], ['ftp:', '//', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']), ('regression: double slash integrity', ['https://t.co/AbCdEf', 7], ['https:', '//t.co', '/AbCdEf']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 9], ['http://a', '.b.org', '/x//y?q=1', '&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('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', ['https://w.org/a=b/c&d', 16], ['https://w.org/a=', 'b/c&d']), ('control layout', ['https://example.com/path/to/page.html', 11], ['https://', 'example.com', '/path/to', '/page.html'])], [('regression: double slash integrity', ['https://example.com/path/to/page.html', 7], ['https:', '//', 'example', '.com', '/path', '/to', '/page', '.html']), ('regression: double slash integrity', ['file:///usr/local/share/doc', 6], ['file:', '///usr', '/local', '/share', '/doc']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 16], ['http://a.b.org', '/x//y?q=1&r=2']), ('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', ['mailto:someone@example.com', 15], ['mailto:', 'someone@example', '.com']), ('control layout', ['file:///usr/local/share/doc', 12], ['file:///usr', '/local/share', '/doc'])]]\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":"59087e45d671414ed15c566d5f4ff831d379e52975f3a1e38557368618390af5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    url, width = x\n    n = len(url)\n    ok = set()\n    for p in range(1, n):\n        a, b = url[p - 1], url[p]\n        if a == ':':\n            ok.add(p)\n        elif a == '/' and url[p - 2:p] == '//':\n            ok.add(p)\n        elif b == '/':\n            ok.add(p)\n        elif b in '.-_?#%~':\n            ok.add(p)\n        elif a in '=&' or b in '=&':\n            ok.add(p)\n    lines = []\n    start = 0\n    while n - start > width:\n        cands = [p for p in ok if start < p <= start + width]\n        cut = max(cands) if cands else start + width\n        lines.append(url[start:cut])\n        start = cut\n    lines.append(url[start:])\n    return lines\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: double slash integrity', ['https://x.io/search?term=line%20break&lang=en', 7], ['https:', '//x.io', '/search', '?term=', 'line', '%20brea', 'k&lang=', 'en']), ('regression: double slash integrity', ['https://example.com/path/to/page.html', 7], ['https:', '//', 'example', '.com', '/path', '/to', '/page', '.html']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 9], ['http://a', '.b.org', '/x//y?q=1', '&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 9], ['http://a', '.b.org', '/x//y?q=1', '&r=2']), ('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', ['https://w.org/a=b/c&d', 5], ['https', '://w', '.org', '/a=b', '/c&d']), ('control layout', ['file:///usr/local/share/doc', 14], ['file:///usr', '/local/share', '/doc'])], [('regression: double slash integrity', ['https://www.docs.io/a/b/c#sec-3', 7], ['https:', '//www', '.docs', '.io/a/b', '/c#sec', '-3']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 6], ['http:', '//a.b', '.org', '/x//y', '?q=1&r', '=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 9], ['http://a', '.b.org', '/x//y?q=1', '&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('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', ['https://www.docs.io/a/b/c#sec-3', 4], ['http', 's://', 'www', '.doc', 's.io', '/a/b', '/c', '#sec', '-3']), ('control layout', ['https://t.co/AbCdEf', 5], ['https', '://t', '.co', '/AbCd', 'Ef'])], [('regression: double slash integrity', ['https://example.com/path/to/page.html', 7], ['https:', '//', 'example', '.com', '/path', '/to', '/page', '.html']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 6], ['http:', '//a.b', '.org', '/x//y', '?q=1&r', '=2']), ('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', ['file:///usr/local/share/doc', 7], ['file://', '/usr', '/local', '/share', '/doc']), ('control layout', ['https://www.docs.io/a/b/c#sec-3', 14], ['https://www', '.docs.io/a/b/c', '#sec-3'])], [('regression: double slash integrity', ['ftp://files.site.net/pub/file-name_v2.tar.gz', 5], ['ftp:', '//', 'files', '.site', '.net', '/pub', '/file', '-name', '_v2', '.tar', '.gz']), ('regression: double slash integrity', ['https://t.co/AbCdEf', 7], ['https:', '//t.co', '/AbCdEf']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 9], ['http://a', '.b.org', '/x//y?q=1', '&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('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', ['https://w.org/a=b/c&d', 16], ['https://w.org/a=', 'b/c&d']), ('control layout', ['https://example.com/path/to/page.html', 11], ['https://', 'example.com', '/path/to', '/page.html'])], [('regression: double slash integrity', ['https://example.com/path/to/page.html', 7], ['https:', '//', 'example', '.com', '/path', '/to', '/page', '.html']), ('regression: double slash integrity', ['file:///usr/local/share/doc', 6], ['file:', '///usr', '/local', '/share', '/doc']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 8], ['http://a', '.b.org', '/x//y?q=', '1&r=2']), ('regression: double slash integrity', ['http://a.b.org/x//y?q=1&r=2', 16], ['http://a.b.org', '/x//y?q=1&r=2']), ('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', ['mailto:someone@example.com', 15], ['mailto:', 'someone@example', '.com']), ('control layout', ['file:///usr/local/share/doc', 12], ['file:///usr', '/local/share', '/doc'])]]\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-url-breaking-double-slash-integrity","generated_at":"2026-09-29T14:49:52.806865+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.","root_cause":"Any position before a slash is a break opportunity.","sha256":"0eb7f56b1977e16a195094bc9682f77920629de23dffc8f9ab8472be8c6f35d5","title":"URL line breaking: double slash integrity · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":38.665,"exit_code":1,"observations":[{"actual":["https:","//x.io","/search","?term=","line","%20brea","k&lang=","en"],"check":"regression: double slash integrity","expected":["https:","//x.io","/search","?term=","line","%20brea","k&lang=","en"],"passed":true},{"actual":["https:","//","example",".com","/path","/to","/page",".html"],"check":"regression: double slash integrity","expected":["https:","//","example",".com","/path","/to","/page",".html"],"passed":true},{"actual":["http://a",".b.org/x","//y?q=1&r","=2"],"check":"regression: double slash integrity","expected":["http://a",".b.org","/x//y?q=1","&r=2"],"passed":false},{"actual":["http://a",".b.org/x","//y?q=1&r","=2"],"check":"regression: double slash integrity","expected":["http://a",".b.org","/x//y?q=1","&r=2"],"passed":false},{"actual":["http://a.b",".org/x//y","?q=1&r=2"],"check":"double slash inside path","expected":["http://a.b",".org/x//y","?q=1&r=2"],"passed":true},{"actual":["https://","example",".com","/path/to","/page",".html"],"check":"break after scheme","expected":["https://","example",".com","/path/to","/page",".html"],"passed":true},{"actual":["https","://w",".org","/a=b","/c&d"],"check":"control layout","expected":["https","://w",".org","/a=b","/c&d"],"passed":true},{"actual":["file:///usr","/local/share","/doc"],"check":"control layout","expected":["file:///usr","/local/share","/doc"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: double slash integrity\", \"actual\": [\"https:\", \"//x.io\", \"/search\", \"?term=\", \"line\", \"%20brea\", \"k&lang=\", \"en\"], \"expected\": [\"https:\", \"//x.io\", \"/search\", \"?term=\", \"line\", \"%20brea\", \"k&lang=\", \"en\"], \"passed\": true}, {\"check\": \"regression: double slash integrity\", \"actual\": [\"https:\", \"//\", \"example\", \".com\", \"/path\", \"/to\", \"/page\", \".html\"], \"expected\": [\"https:\", \"//\", \"example\", \".com\", \"/path\", \"/to\", \"/page\", \".html\"], \"passed\": true}, {\"check\": \"regression: double slash integrity\", \"actual\": [\"http://a\", \".b.org/x\", \"//y?q=1&r\", \"=2\"], \"expected\": [\"http://a\", \".b.org\", \"/x//y?q=1\", \"&r=2\"], \"passed\": false}, {\"check\": \"regression: double slash integrity\", \"actual\": [\"http://a\", \".b.org/x\", \"//y?q=1&r\", \"=2\"], \"expected\": [\"http://a\", \".b.org\", \"/x//y?q=1\", \"&r=2\"], \"passed\": false}, {\"check\": \"double slash inside path\", \"actual\": [\"http://a.b\", \".org/x//y\", \"?q=1&r=2\"], \"expected\": [\"http://a.b\", \".org/x//y\", \"?q=1&r=2\"], \"passed\": true}, {\"check\": \"break after scheme\", \"actual\": [\"https://\", \"example\", \".com\", \"/path/to\", \"/page\", \".html\"], \"expected\": [\"https://\", \"example\", \".com\", \"/path/to\", \"/page\", \".html\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"https\", \"://w\", \".org\", \"/a=b\", \"/c&d\"], \"expected\": [\"https\", \"://w\", \".org\", \"/a=b\", \"/c&d\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"file:///usr\", \"/local/share\", \"/doc\"], \"expected\": [\"file:///usr\", \"/local/share\", \"/doc\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.505,"exit_code":1,"observations":[{"actual":["https:/","/x.io","/search","?term=","line","%20brea","k&lang=","en"],"check":"regression: double slash integrity","expected":["https:","//x.io","/search","?term=","line","%20brea","k&lang=","en"],"passed":false},{"actual":["https:/","/","example",".com","/path","/to","/page",".html"],"check":"regression: double slash integrity","expected":["https:","//","example",".com","/path","/to","/page",".html"],"passed":false},{"actual":["http://a",".b.org/x/","/y?q=1&r=","2"],"check":"regression: double slash integrity","expected":["http://a",".b.org","/x//y?q=1","&r=2"],"passed":false},{"actual":["http://a",".b.org/x/","/y?q=1&r=","2"],"check":"regression: double slash integrity","expected":["http://a",".b.org","/x//y?q=1","&r=2"],"passed":false},{"actual":["http://a.b",".org/x//y","?q=1&r=2"],"check":"double slash inside path","expected":["http://a.b",".org/x//y","?q=1&r=2"],"passed":true},{"actual":["https://","example",".com","/path/to","/page",".html"],"check":"break after scheme","expected":["https://","example",".com","/path/to","/page",".html"],"passed":true},{"actual":["https","://w",".org","/a=b","/c&d"],"check":"control layout","expected":["https","://w",".org","/a=b","/c&d"],"passed":true},{"actual":["file:///usr","/local/share","/doc"],"check":"control layout","expected":["file:///usr","/local/share","/doc"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: double slash integrity\", \"actual\": [\"https:/\", \"/x.io\", \"/search\", \"?term=\", \"line\", \"%20brea\", \"k&lang=\", \"en\"], \"expected\": [\"https:\", \"//x.io\", \"/search\", \"?term=\", \"line\", \"%20brea\", \"k&lang=\", \"en\"], \"passed\": false}, {\"check\": \"regression: double slash integrity\", \"actual\": [\"https:/\", \"/\", \"example\", \".com\", \"/path\", \"/to\", \"/page\", \".html\"], \"expected\": [\"https:\", \"//\", \"example\", \".com\", \"/path\", \"/to\", \"/page\", \".html\"], \"passed\": false}, {\"check\": \"regression: double slash integrity\", \"actual\": [\"http://a\", \".b.org/x/\", \"/y?q=1&r=\", \"2\"], \"expected\": [\"http://a\", \".b.org\", \"/x//y?q=1\", \"&r=2\"], \"passed\": false}, {\"check\": \"regression: double slash integrity\", \"actual\": [\"http://a\", \".b.org/x/\", \"/y?q=1&r=\", \"2\"], \"expected\": [\"http://a\", \".b.org\", \"/x//y?q=1\", \"&r=2\"], \"passed\": false}, {\"check\": \"double slash inside path\", \"actual\": [\"http://a.b\", \".org/x//y\", \"?q=1&r=2\"], \"expected\": [\"http://a.b\", \".org/x//y\", \"?q=1&r=2\"], \"passed\": true}, {\"check\": \"break after scheme\", \"actual\": [\"https://\", \"example\", \".com\", \"/path/to\", \"/page\", \".html\"], \"expected\": [\"https://\", \"example\", \".com\", \"/path/to\", \"/page\", \".html\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"https\", \"://w\", \".org\", \"/a=b\", \"/c&d\"], \"expected\": [\"https\", \"://w\", \".org\", \"/a=b\", \"/c&d\"], \"passed\": true}, {\"check\": \"control layout\", \"actual\": [\"file:///usr\", \"/local/share\", \"/doc\"], \"expected\": [\"file:///usr\", \"/local/share\", \"/doc\"], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}