{"abstract":"Crossing unique lines are all kept as anchors, producing an inconsistent alignment.","category":"Text diff and three-way merge","checks":8,"contract":"Candidates are lines occurring exactly once in the old side and exactly once in the new side, as (old index, new index) pairs in old order. Keep the longest chain with increasing new index, found with patience piles (bisect on pile tops by new index, back pointers to the previous pile top) and reconstructed from the top of the last pile. Return the anchor pairs.","evaluation_group":"w2-text-diff-merge-patience-anchors","failed_approach":"Searching old-index pile tops with the new index mixes coordinates and still misplaces candidates.","family":"w2-text-diff-merge-patience-anchors-chain-key","id":"FA-75511","implementations":{"attempt":{"sha256":"b25897d93e8b3901e81589a39b219651c2b4d299c3456a46bf5f2d9de9157587","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport bisect\nimport collections\nN = 1\nobservations = []\ndef solve(a, b):\n    ca = collections.Counter(a)\n    cb = collections.Counter(b)\n    posb = {x: j for j, x in enumerate(b)}\n    cand = [(i, posb[x]) for i, x in enumerate(a) if ca[x] == 1 and cb.get(x, 0) == 1]\n    tails = []\n    back = {}\n    for idx, (i, j) in enumerate(cand):\n        lo = bisect.bisect_left([cand[t][0] for t in tails], j)\n        if lo == len(tails):\n            tails.append(idx)\n        else:\n            tails[lo] = idx\n        back[idx] = tails[lo - 1] if lo > 0 else None\n    res = []\n    t = tails[-1] if tails else None\n    while t is not None:\n        res.append(list(cand[t]))\n        t = back[t]\n    return res[::-1]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['v', 'w', 'p', 'u']], [[1, 0], [2, 1], [3, 2]]), ('later short chain', [['m0', 'm1', 'm2', 'k'], ['k', 'm0', 'm1', 'm2']], [[0, 1], [1, 2], [2, 3]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    2: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['u', 'v', 'w', 'p']], [[0, 0], [1, 1], [2, 2], [3, 3]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'k'], ['k', 'm0', 'm1', 'm2', 'm3']], [[0, 1], [1, 2], [2, 3], [3, 4]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    3: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['v', 'w', 'p', 'u']], [[1, 0], [2, 1], [3, 2]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'm4', 'k'], ['k', 'm0', 'm1', 'm2', 'm3', 'm4']], [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    4: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['u', 'v', 'w', 'p']], [[0, 0], [1, 1], [2, 2], [3, 3]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'k'], ['k', 'm0', 'm1', 'm2', 'm3', 'm4', 'm5']], [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    5: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['v', 'w', 'p', 'u']], [[1, 0], [2, 1], [3, 2]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'k'], ['k', 'm0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6']], [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 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":"f3e4e22fe8df4306977da6e3b39cbf30765ccb06a3a043c3bf51bedeef3e9d3c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport bisect\nimport collections\nN = 1\nobservations = []\ndef solve(a, b):\n    ca = collections.Counter(a)\n    cb = collections.Counter(b)\n    posb = {x: j for j, x in enumerate(b)}\n    cand = [(i, posb[x]) for i, x in enumerate(a) if ca[x] == 1 and cb.get(x, 0) == 1]\n    tails = []\n    back = {}\n    for idx, (i, j) in enumerate(cand):\n        lo = bisect.bisect_left([cand[t][0] for t in tails], i)\n        if lo == len(tails):\n            tails.append(idx)\n        else:\n            tails[lo] = idx\n        back[idx] = tails[lo - 1] if lo > 0 else None\n    res = []\n    t = tails[-1] if tails else None\n    while t is not None:\n        res.append(list(cand[t]))\n        t = back[t]\n    return res[::-1]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['v', 'w', 'p', 'u']], [[1, 0], [2, 1], [3, 2]]), ('later short chain', [['m0', 'm1', 'm2', 'k'], ['k', 'm0', 'm1', 'm2']], [[0, 1], [1, 2], [2, 3]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    2: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['u', 'v', 'w', 'p']], [[0, 0], [1, 1], [2, 2], [3, 3]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'k'], ['k', 'm0', 'm1', 'm2', 'm3']], [[0, 1], [1, 2], [2, 3], [3, 4]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    3: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['v', 'w', 'p', 'u']], [[1, 0], [2, 1], [3, 2]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'm4', 'k'], ['k', 'm0', 'm1', 'm2', 'm3', 'm4']], [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    4: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['u', 'v', 'w', 'p']], [[0, 0], [1, 1], [2, 2], [3, 3]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'k'], ['k', 'm0', 'm1', 'm2', 'm3', 'm4', 'm5']], [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    5: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['v', 'w', 'p', 'u']], [[1, 0], [2, 1], [3, 2]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'k'], ['k', 'm0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6']], [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 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":"a4ca7ad5760d347b3246a7a4dd5466be1f11bce1a8b13acf73db996373b0bb00","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport bisect\nimport collections\nN = 1\nobservations = []\ndef solve(a, b):\n    ca = collections.Counter(a)\n    cb = collections.Counter(b)\n    posb = {x: j for j, x in enumerate(b)}\n    cand = [(i, posb[x]) for i, x in enumerate(a) if ca[x] == 1 and cb.get(x, 0) == 1]\n    tails = []\n    back = {}\n    for idx, (i, j) in enumerate(cand):\n        lo = bisect.bisect_left([cand[t][1] for t in tails], j)\n        if lo == len(tails):\n            tails.append(idx)\n        else:\n            tails[lo] = idx\n        back[idx] = tails[lo - 1] if lo > 0 else None\n    res = []\n    t = tails[-1] if tails else None\n    while t is not None:\n        res.append(list(cand[t]))\n        t = back[t]\n    return res[::-1]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {\n    1: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['v', 'w', 'p', 'u']], [[1, 0], [2, 1], [3, 2]]), ('later short chain', [['m0', 'm1', 'm2', 'k'], ['k', 'm0', 'm1', 'm2']], [[0, 1], [1, 2], [2, 3]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    2: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['u', 'v', 'w', 'p']], [[0, 0], [1, 1], [2, 2], [3, 3]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'k'], ['k', 'm0', 'm1', 'm2', 'm3']], [[0, 1], [1, 2], [2, 3], [3, 4]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    3: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['v', 'w', 'p', 'u']], [[1, 0], [2, 1], [3, 2]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'm4', 'k'], ['k', 'm0', 'm1', 'm2', 'm3', 'm4']], [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    4: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['u', 'v', 'w', 'p']], [[0, 0], [1, 1], [2, 2], [3, 3]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'k'], ['k', 'm0', 'm1', 'm2', 'm3', 'm4', 'm5']], [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 0]])],\n    5: [('unique lines in order', [['a', 'b', 'c', 'd'], ['a', 'x', 'c', 'd']], [[0, 0], [2, 2], [3, 3]]), ('crossing unique lines keep the longest chain', [['f1', 'f2', 'f3', 'g'], ['f2', 'f3', 'f1', 'g']], [[1, 0], [2, 1], [3, 3]]), ('duplicated in new side are not anchors', [['x', 'y', 'z'], ['y', 'x', 'y', 'z']], [[0, 1], [2, 3]]), ('duplicated in old side are not anchors', [['}', 'a', '}', 'b'], ['}', 'b', 'a']], [[3, 1]]), ('no unique common lines', [['r', 'r'], ['s', 's']], []), ('chain ends before the last candidate', [['u', 'v', 'w', 'p'], ['v', 'w', 'p', 'u']], [[1, 0], [2, 1], [3, 2]]), ('later short chain', [['m0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6', 'k'], ['k', 'm0', 'm1', 'm2', 'm3', 'm4', 'm5', 'm6']], [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]), ('single candidate', [['q', 'z'], ['z', 'q', 'q']], [[1, 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-patience-anchors-chain-key","generated_at":"2026-09-29T14:49:07.355372+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Patience diff anchors on unique lines to produce readable diffs of code with many repeated braces and blank lines.","repair":"Bisect pile tops by the candidate's new-side index.","root_cause":"The pile search bisects on old indices, which are always increasing, so every candidate extends the chain.","sha256":"53c0d41e952efcf83a4930cc6cf6c9307c8aa18fcef12f061bab7e8769a92989","title":"Patience diff anchors: piles are keyed by old index instead of new index · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.371,"exit_code":1,"observations":[{"actual":[[0,0],[2,2],[3,3]],"check":"unique lines in order","expected":[[0,0],[2,2],[3,3]],"passed":true},{"actual":[[2,1],[3,3]],"check":"crossing unique lines keep the longest chain","expected":[[1,0],[2,1],[3,3]],"passed":false},{"actual":[[0,1],[2,3]],"check":"duplicated in new side are not anchors","expected":[[0,1],[2,3]],"passed":true},{"actual":[[3,1]],"check":"duplicated in old side are not anchors","expected":[[3,1]],"passed":true},{"actual":[],"check":"no unique common lines","expected":[],"passed":true},{"actual":[[3,2]],"check":"chain ends before the last candidate","expected":[[1,0],[2,1],[3,2]],"passed":false},{"actual":[[0,1],[1,2],[2,3]],"check":"later short chain","expected":[[0,1],[1,2],[2,3]],"passed":true},{"actual":[[1,0]],"check":"single candidate","expected":[[1,0]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unique lines in order\", \"actual\": [[0, 0], [2, 2], [3, 3]], \"expected\": [[0, 0], [2, 2], [3, 3]], \"passed\": true}, {\"check\": \"crossing unique lines keep the longest chain\", \"actual\": [[2, 1], [3, 3]], \"expected\": [[1, 0], [2, 1], [3, 3]], \"passed\": false}, {\"check\": \"duplicated in new side are not anchors\", \"actual\": [[0, 1], [2, 3]], \"expected\": [[0, 1], [2, 3]], \"passed\": true}, {\"check\": \"duplicated in old side are not anchors\", \"actual\": [[3, 1]], \"expected\": [[3, 1]], \"passed\": true}, {\"check\": \"no unique common lines\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"chain ends before the last candidate\", \"actual\": [[3, 2]], \"expected\": [[1, 0], [2, 1], [3, 2]], \"passed\": false}, {\"check\": \"later short chain\", \"actual\": [[0, 1], [1, 2], [2, 3]], \"expected\": [[0, 1], [1, 2], [2, 3]], \"passed\": true}, {\"check\": \"single candidate\", \"actual\": [[1, 0]], \"expected\": [[1, 0]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.833,"exit_code":1,"observations":[{"actual":[[0,0],[2,2],[3,3]],"check":"unique lines in order","expected":[[0,0],[2,2],[3,3]],"passed":true},{"actual":[[0,2],[1,0],[2,1],[3,3]],"check":"crossing unique lines keep the longest chain","expected":[[1,0],[2,1],[3,3]],"passed":false},{"actual":[[0,1],[2,3]],"check":"duplicated in new side are not anchors","expected":[[0,1],[2,3]],"passed":true},{"actual":[[1,2],[3,1]],"check":"duplicated in old side are not anchors","expected":[[3,1]],"passed":false},{"actual":[],"check":"no unique common lines","expected":[],"passed":true},{"actual":[[0,3],[1,0],[2,1],[3,2]],"check":"chain ends before the last candidate","expected":[[1,0],[2,1],[3,2]],"passed":false},{"actual":[[0,1],[1,2],[2,3],[3,0]],"check":"later short chain","expected":[[0,1],[1,2],[2,3]],"passed":false},{"actual":[[1,0]],"check":"single candidate","expected":[[1,0]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unique lines in order\", \"actual\": [[0, 0], [2, 2], [3, 3]], \"expected\": [[0, 0], [2, 2], [3, 3]], \"passed\": true}, {\"check\": \"crossing unique lines keep the longest chain\", \"actual\": [[0, 2], [1, 0], [2, 1], [3, 3]], \"expected\": [[1, 0], [2, 1], [3, 3]], \"passed\": false}, {\"check\": \"duplicated in new side are not anchors\", \"actual\": [[0, 1], [2, 3]], \"expected\": [[0, 1], [2, 3]], \"passed\": true}, {\"check\": \"duplicated in old side are not anchors\", \"actual\": [[1, 2], [3, 1]], \"expected\": [[3, 1]], \"passed\": false}, {\"check\": \"no unique common lines\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"chain ends before the last candidate\", \"actual\": [[0, 3], [1, 0], [2, 1], [3, 2]], \"expected\": [[1, 0], [2, 1], [3, 2]], \"passed\": false}, {\"check\": \"later short chain\", \"actual\": [[0, 1], [1, 2], [2, 3], [3, 0]], \"expected\": [[0, 1], [1, 2], [2, 3]], \"passed\": false}, {\"check\": \"single candidate\", \"actual\": [[1, 0]], \"expected\": [[1, 0]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.151,"exit_code":0,"observations":[{"actual":[[0,0],[2,2],[3,3]],"check":"unique lines in order","expected":[[0,0],[2,2],[3,3]],"passed":true},{"actual":[[1,0],[2,1],[3,3]],"check":"crossing unique lines keep the longest chain","expected":[[1,0],[2,1],[3,3]],"passed":true},{"actual":[[0,1],[2,3]],"check":"duplicated in new side are not anchors","expected":[[0,1],[2,3]],"passed":true},{"actual":[[3,1]],"check":"duplicated in old side are not anchors","expected":[[3,1]],"passed":true},{"actual":[],"check":"no unique common lines","expected":[],"passed":true},{"actual":[[1,0],[2,1],[3,2]],"check":"chain ends before the last candidate","expected":[[1,0],[2,1],[3,2]],"passed":true},{"actual":[[0,1],[1,2],[2,3]],"check":"later short chain","expected":[[0,1],[1,2],[2,3]],"passed":true},{"actual":[[1,0]],"check":"single candidate","expected":[[1,0]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unique lines in order\", \"actual\": [[0, 0], [2, 2], [3, 3]], \"expected\": [[0, 0], [2, 2], [3, 3]], \"passed\": true}, {\"check\": \"crossing unique lines keep the longest chain\", \"actual\": [[1, 0], [2, 1], [3, 3]], \"expected\": [[1, 0], [2, 1], [3, 3]], \"passed\": true}, {\"check\": \"duplicated in new side are not anchors\", \"actual\": [[0, 1], [2, 3]], \"expected\": [[0, 1], [2, 3]], \"passed\": true}, {\"check\": \"duplicated in old side are not anchors\", \"actual\": [[3, 1]], \"expected\": [[3, 1]], \"passed\": true}, {\"check\": \"no unique common lines\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"chain ends before the last candidate\", \"actual\": [[1, 0], [2, 1], [3, 2]], \"expected\": [[1, 0], [2, 1], [3, 2]], \"passed\": true}, {\"check\": \"later short chain\", \"actual\": [[0, 1], [1, 2], [2, 3]], \"expected\": [[0, 1], [1, 2], [2, 3]], \"passed\": true}, {\"check\": \"single candidate\", \"actual\": [[1, 0]], \"expected\": [[1, 0]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}