{"abstract":"Extra removed or added lines produce spurious pairs against an empty line.","category":"Text diff and three-way merge","checks":8,"contract":"Within each block of consecutive \"-\" lines immediately followed by consecutive \"+\" lines, pair the i-th removed line with the i-th added line (extra lines stay unpaired). For each pair report the common prefix length and the common suffix length, where the suffix may not overlap the prefix. Return [old, new, prefix, suffix] rows.","evaluation_group":"w2-text-diff-merge-intraline-pairing","failed_approach":"Filtering pairs with an empty added side still pairs extra added lines with an empty removal.","family":"w2-text-diff-merge-intraline-pairing-unequal-counts","id":"FA-75686","implementations":{"attempt":{"sha256":"3560116af58a20e8b2168c97231d1fe6b8b691cdfb7a31ff5bde9b6a21bdc0d2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport itertools\nN = 1\nobservations = []\ndef solve(ops):\n    res = []\n    i = 0\n    while i < len(ops):\n        if ops[i][0] != '-':\n            i += 1\n            continue\n        dels = []\n        while i < len(ops) and ops[i][0] == '-':\n            dels.append(ops[i][1])\n            i += 1\n        adds = []\n        while i < len(ops) and ops[i][0] == '+':\n            adds.append(ops[i][1])\n            i += 1\n        for d, a in [x for x in itertools.zip_longest(dels, adds, fillvalue='') if x[1] != '']:\n            p = 0\n            while p < min(len(d), len(a)) and d[p] == a[p]:\n                p += 1\n            s = 0\n            while s < min(len(d), len(a)) - p and d[-1 - s] == a[-1 - s]:\n                s += 1\n            res.append([d, a, p, s])\n    return res\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 21']]], [['value = 1', 'value = 21', 8, 1]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'ababab']]], [['abab', 'ababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r1']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    2: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 22']]], [['value = 1', 'value = 22', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'abababab']]], [['abab', 'abababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r2']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    3: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 23']]], [['value = 1', 'value = 23', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'ababababab']]], [['abab', 'ababababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r3']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    4: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 24']]], [['value = 1', 'value = 24', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'abababababab']]], [['abab', 'abababababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r4']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    5: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 25']]], [['value = 1', 'value = 25', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'ababababababab']]], [['abab', 'ababababababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r5']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n}[N]\nfor label, args, expected in cases:\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":"3e8b73eb54956f972a855a471352ca3dd4e80507c3405c5d0eb10f9077d2a41a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport itertools\nN = 1\nobservations = []\ndef solve(ops):\n    res = []\n    i = 0\n    while i < len(ops):\n        if ops[i][0] != '-':\n            i += 1\n            continue\n        dels = []\n        while i < len(ops) and ops[i][0] == '-':\n            dels.append(ops[i][1])\n            i += 1\n        adds = []\n        while i < len(ops) and ops[i][0] == '+':\n            adds.append(ops[i][1])\n            i += 1\n        for d, a in itertools.zip_longest(dels, adds, fillvalue=''):\n            p = 0\n            while p < min(len(d), len(a)) and d[p] == a[p]:\n                p += 1\n            s = 0\n            while s < min(len(d), len(a)) - p and d[-1 - s] == a[-1 - s]:\n                s += 1\n            res.append([d, a, p, s])\n    return res\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 21']]], [['value = 1', 'value = 21', 8, 1]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'ababab']]], [['abab', 'ababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r1']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    2: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 22']]], [['value = 1', 'value = 22', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'abababab']]], [['abab', 'abababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r2']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    3: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 23']]], [['value = 1', 'value = 23', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'ababababab']]], [['abab', 'ababababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r3']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    4: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 24']]], [['value = 1', 'value = 24', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'abababababab']]], [['abab', 'abababababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r4']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    5: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 25']]], [['value = 1', 'value = 25', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'ababababababab']]], [['abab', 'ababababababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r5']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n}[N]\nfor label, args, expected in cases:\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":"9ab514a32626ced31b0ec0cafb9e2adab1de9e358c2bd2ef432b1066885a5eb3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport itertools\nN = 1\nobservations = []\ndef solve(ops):\n    res = []\n    i = 0\n    while i < len(ops):\n        if ops[i][0] != '-':\n            i += 1\n            continue\n        dels = []\n        while i < len(ops) and ops[i][0] == '-':\n            dels.append(ops[i][1])\n            i += 1\n        adds = []\n        while i < len(ops) and ops[i][0] == '+':\n            adds.append(ops[i][1])\n            i += 1\n        for d, a in zip(dels, adds):\n            p = 0\n            while p < min(len(d), len(a)) and d[p] == a[p]:\n                p += 1\n            s = 0\n            while s < min(len(d), len(a)) - p and d[-1 - s] == a[-1 - s]:\n                s += 1\n            res.append([d, a, p, s])\n    return res\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 21']]], [['value = 1', 'value = 21', 8, 1]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'ababab']]], [['abab', 'ababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r1']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    2: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 22']]], [['value = 1', 'value = 22', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'abababab']]], [['abab', 'abababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r2']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    3: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 23']]], [['value = 1', 'value = 23', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'ababababab']]], [['abab', 'ababababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r3']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    4: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 24']]], [['value = 1', 'value = 24', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'abababababab']]], [['abab', 'abababababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r4']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n    5: [('simple replacement', [[[' ', 'ctx'], ['-', 'value = 1'], ['+', 'value = 25']]], [['value = 1', 'value = 25', 8, 0]]), ('suffix must not overlap prefix', [[['-', 'aa'], ['+', 'aaa']]], [['aa', 'aaa', 2, 0]]), ('overlap with repeated characters', [[['-', 'abab'], ['+', 'ababababababab']]], [['abab', 'ababababababab', 4, 0]]), ('pairs do not cross context', [[['-', 'old'], [' ', 'keep'], ['+', 'new']]], []), ('more deletions than insertions', [[['-', 'x1'], ['-', 'x2'], ['+', 'y1']]], [['x1', 'y1', 0, 1]]), ('more insertions than deletions', [[['-', 'p'], ['+', 'q'], ['+', 'r5']]], [['p', 'q', 0, 0]]), ('pure insertion block', [[['+', 'only'], [' ', 'c'], ['-', 'd'], ['+', 'e']]], [['d', 'e', 0, 0]]), ('two blocks', [[['-', 'foo(a)'], ['+', 'foo(b)'], [' ', 'x'], [' ', 'y'], ['-', 'bar'], ['+', 'baz']]], [['foo(a)', 'foo(b)', 4, 1], ['bar', 'baz', 2, 0]])],\n}[N]\nfor label, args, expected in cases:\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, bounded teaching model of one diff, patch or merge rule with stipulated conventions; it is not a production diff or version-control implementation and makes no claim of conformance to any specific tool. 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-text-diff-merge-intraline-pairing-unequal-counts","generated_at":"2026-09-29T14:49:09.116071+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Word and character highlighting inside changed lines depends on pairing lines and trimming their shared ends.","repair":"Pair only up to the shorter of the two runs.","root_cause":"Pairs are formed with zip_longest, padding the shorter side.","sha256":"4c0ac9f59d47f380d39e8c6a842d346a4067c88854c6cb9cd0f37ce0af97d82b","title":"Intraline change pairing: unmatched lines are paired with empty strings · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.572,"exit_code":1,"observations":[{"actual":[["value = 1","value = 21",8,1]],"check":"simple replacement","expected":[["value = 1","value = 21",8,1]],"passed":true},{"actual":[["aa","aaa",2,0]],"check":"suffix must not overlap prefix","expected":[["aa","aaa",2,0]],"passed":true},{"actual":[["abab","ababab",4,0]],"check":"overlap with repeated characters","expected":[["abab","ababab",4,0]],"passed":true},{"actual":[],"check":"pairs do not cross context","expected":[],"passed":true},{"actual":[["x1","y1",0,1]],"check":"more deletions than insertions","expected":[["x1","y1",0,1]],"passed":true},{"actual":[["p","q",0,0],["","r1",0,0]],"check":"more insertions than deletions","expected":[["p","q",0,0]],"passed":false},{"actual":[["d","e",0,0]],"check":"pure insertion block","expected":[["d","e",0,0]],"passed":true},{"actual":[["foo(a)","foo(b)",4,1],["bar","baz",2,0]],"check":"two blocks","expected":[["foo(a)","foo(b)",4,1],["bar","baz",2,0]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"simple replacement\", \"actual\": [[\"value = 1\", \"value = 21\", 8, 1]], \"expected\": [[\"value = 1\", \"value = 21\", 8, 1]], \"passed\": true}, {\"check\": \"suffix must not overlap prefix\", \"actual\": [[\"aa\", \"aaa\", 2, 0]], \"expected\": [[\"aa\", \"aaa\", 2, 0]], \"passed\": true}, {\"check\": \"overlap with repeated characters\", \"actual\": [[\"abab\", \"ababab\", 4, 0]], \"expected\": [[\"abab\", \"ababab\", 4, 0]], \"passed\": true}, {\"check\": \"pairs do not cross context\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"more deletions than insertions\", \"actual\": [[\"x1\", \"y1\", 0, 1]], \"expected\": [[\"x1\", \"y1\", 0, 1]], \"passed\": true}, {\"check\": \"more insertions than deletions\", \"actual\": [[\"p\", \"q\", 0, 0], [\"\", \"r1\", 0, 0]], \"expected\": [[\"p\", \"q\", 0, 0]], \"passed\": false}, {\"check\": \"pure insertion block\", \"actual\": [[\"d\", \"e\", 0, 0]], \"expected\": [[\"d\", \"e\", 0, 0]], \"passed\": true}, {\"check\": \"two blocks\", \"actual\": [[\"foo(a)\", \"foo(b)\", 4, 1], [\"bar\", \"baz\", 2, 0]], \"expected\": [[\"foo(a)\", \"foo(b)\", 4, 1], [\"bar\", \"baz\", 2, 0]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.037,"exit_code":1,"observations":[{"actual":[["value = 1","value = 21",8,1]],"check":"simple replacement","expected":[["value = 1","value = 21",8,1]],"passed":true},{"actual":[["aa","aaa",2,0]],"check":"suffix must not overlap prefix","expected":[["aa","aaa",2,0]],"passed":true},{"actual":[["abab","ababab",4,0]],"check":"overlap with repeated characters","expected":[["abab","ababab",4,0]],"passed":true},{"actual":[["old","",0,0]],"check":"pairs do not cross context","expected":[],"passed":false},{"actual":[["x1","y1",0,1],["x2","",0,0]],"check":"more deletions than insertions","expected":[["x1","y1",0,1]],"passed":false},{"actual":[["p","q",0,0],["","r1",0,0]],"check":"more insertions than deletions","expected":[["p","q",0,0]],"passed":false},{"actual":[["d","e",0,0]],"check":"pure insertion block","expected":[["d","e",0,0]],"passed":true},{"actual":[["foo(a)","foo(b)",4,1],["bar","baz",2,0]],"check":"two blocks","expected":[["foo(a)","foo(b)",4,1],["bar","baz",2,0]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"simple replacement\", \"actual\": [[\"value = 1\", \"value = 21\", 8, 1]], \"expected\": [[\"value = 1\", \"value = 21\", 8, 1]], \"passed\": true}, {\"check\": \"suffix must not overlap prefix\", \"actual\": [[\"aa\", \"aaa\", 2, 0]], \"expected\": [[\"aa\", \"aaa\", 2, 0]], \"passed\": true}, {\"check\": \"overlap with repeated characters\", \"actual\": [[\"abab\", \"ababab\", 4, 0]], \"expected\": [[\"abab\", \"ababab\", 4, 0]], \"passed\": true}, {\"check\": \"pairs do not cross context\", \"actual\": [[\"old\", \"\", 0, 0]], \"expected\": [], \"passed\": false}, {\"check\": \"more deletions than insertions\", \"actual\": [[\"x1\", \"y1\", 0, 1], [\"x2\", \"\", 0, 0]], \"expected\": [[\"x1\", \"y1\", 0, 1]], \"passed\": false}, {\"check\": \"more insertions than deletions\", \"actual\": [[\"p\", \"q\", 0, 0], [\"\", \"r1\", 0, 0]], \"expected\": [[\"p\", \"q\", 0, 0]], \"passed\": false}, {\"check\": \"pure insertion block\", \"actual\": [[\"d\", \"e\", 0, 0]], \"expected\": [[\"d\", \"e\", 0, 0]], \"passed\": true}, {\"check\": \"two blocks\", \"actual\": [[\"foo(a)\", \"foo(b)\", 4, 1], [\"bar\", \"baz\", 2, 0]], \"expected\": [[\"foo(a)\", \"foo(b)\", 4, 1], [\"bar\", \"baz\", 2, 0]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.87,"exit_code":0,"observations":[{"actual":[["value = 1","value = 21",8,1]],"check":"simple replacement","expected":[["value = 1","value = 21",8,1]],"passed":true},{"actual":[["aa","aaa",2,0]],"check":"suffix must not overlap prefix","expected":[["aa","aaa",2,0]],"passed":true},{"actual":[["abab","ababab",4,0]],"check":"overlap with repeated characters","expected":[["abab","ababab",4,0]],"passed":true},{"actual":[],"check":"pairs do not cross context","expected":[],"passed":true},{"actual":[["x1","y1",0,1]],"check":"more deletions than insertions","expected":[["x1","y1",0,1]],"passed":true},{"actual":[["p","q",0,0]],"check":"more insertions than deletions","expected":[["p","q",0,0]],"passed":true},{"actual":[["d","e",0,0]],"check":"pure insertion block","expected":[["d","e",0,0]],"passed":true},{"actual":[["foo(a)","foo(b)",4,1],["bar","baz",2,0]],"check":"two blocks","expected":[["foo(a)","foo(b)",4,1],["bar","baz",2,0]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"simple replacement\", \"actual\": [[\"value = 1\", \"value = 21\", 8, 1]], \"expected\": [[\"value = 1\", \"value = 21\", 8, 1]], \"passed\": true}, {\"check\": \"suffix must not overlap prefix\", \"actual\": [[\"aa\", \"aaa\", 2, 0]], \"expected\": [[\"aa\", \"aaa\", 2, 0]], \"passed\": true}, {\"check\": \"overlap with repeated characters\", \"actual\": [[\"abab\", \"ababab\", 4, 0]], \"expected\": [[\"abab\", \"ababab\", 4, 0]], \"passed\": true}, {\"check\": \"pairs do not cross context\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"more deletions than insertions\", \"actual\": [[\"x1\", \"y1\", 0, 1]], \"expected\": [[\"x1\", \"y1\", 0, 1]], \"passed\": true}, {\"check\": \"more insertions than deletions\", \"actual\": [[\"p\", \"q\", 0, 0]], \"expected\": [[\"p\", \"q\", 0, 0]], \"passed\": true}, {\"check\": \"pure insertion block\", \"actual\": [[\"d\", \"e\", 0, 0]], \"expected\": [[\"d\", \"e\", 0, 0]], \"passed\": true}, {\"check\": \"two blocks\", \"actual\": [[\"foo(a)\", \"foo(b)\", 4, 1], [\"bar\", \"baz\", 2, 0]], \"expected\": [[\"foo(a)\", \"foo(b)\", 4, 1], [\"bar\", \"baz\", 2, 0]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}