{"abstract":"Unlink leaves the predecessor pointing at the detached node.","category":"Bounded deques","checks":6,"contract":"Unlink one selected node from a finite doubly linked deque with sentinel S. Nodes are keyed by identity; return forward IDs, backward IDs, removed node links, size, sentinel endpoint links and reciprocal-link validity. Every input ID is unique.","evaluation_group":"s3-bounded-deques-intrusive-unlink","failed_approach":"The partial repair still applies the incorrect transition to an admitted boundary or multi-element case.","family":"s3-bounded-deques-intrusive-unlink-predecessor-edge","id":"FA-45936","implementations":{"attempt":{"sha256":"7e44c20b02467c949cd295e1e9e6b3152d1f6b846af63cbee0585ae89e70f068","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    ids, victim = x\n    nodes = {'S': ['S','S']}\n    for i, value in enumerate(ids):\n        nodes[value] = [ids[i-1] if i else 'S', ids[i+1] if i+1 < len(ids) else 'S']\n    if ids:\n        nodes['S'] = [ids[-1],ids[0]]\n    size = len(ids)\n    left, right = nodes[victim]\n    nodes[left][1] = right if left == \"S\" else victim\n    nodes[right][0] = left\n    nodes[victim] = [None,None]\n    size -= 1\n    forward = []\n    current = nodes['S'][1]\n    for _ in range(len(ids)+1):\n        if current == 'S' or current is None: break\n        forward.append(current)\n        current = nodes[current][1]\n    backward = []\n    current = nodes['S'][0]\n    for _ in range(len(ids)+1):\n        if current == 'S' or current is None: break\n        backward.append(current)\n        current = nodes[current][0]\n    valid = all(nodes[nodes[v][0]][1] == v and nodes[nodes[v][1]][0] == v for v in forward if nodes[v][0] is not None and nodes[v][1] is not None)\n    return [forward,backward,nodes[victim],size,nodes['S'],valid]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('middle unlink', solve([[N,N+1,N+2],N+1]), [[N,N+2],[N+2,N],[None,None],2,[N+2,N],True])\ncheck('head unlink', solve([[N,N+1,N+2],N]), [[N+1,N+2],[N+2,N+1],[None,None],2,[N+2,N+1],True])\ncheck('tail unlink', solve([[N,N+1,N+2],N+2]), [[N,N+1],[N+1,N],[None,None],2,[N+1,N],True])\ncheck('only node', solve([[N],N]), [[],[],[None,None],0,[\"S\",\"S\"],True])\ncheck('pair head', solve([[N,N+1],N]), [[N+1],[N+1],[None,None],1,[N+1,N+1],True])\ncheck('long middle', solve([[N,N+1,N+2,N+3,N+4],N+2]), [[N,N+1,N+3,N+4],[N+4,N+3,N+1,N],[None,None],4,[N+4,N],True])\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":"4a0682b164fdec098af2ac4b34fc883d02a2003ac1e046c746ad2d29760d6ef9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    ids, victim = x\n    nodes = {'S': ['S','S']}\n    for i, value in enumerate(ids):\n        nodes[value] = [ids[i-1] if i else 'S', ids[i+1] if i+1 < len(ids) else 'S']\n    if ids:\n        nodes['S'] = [ids[-1],ids[0]]\n    size = len(ids)\n    left, right = nodes[victim]\n    nodes[left][1] = victim\n    nodes[right][0] = left\n    nodes[victim] = [None,None]\n    size -= 1\n    forward = []\n    current = nodes['S'][1]\n    for _ in range(len(ids)+1):\n        if current == 'S' or current is None: break\n        forward.append(current)\n        current = nodes[current][1]\n    backward = []\n    current = nodes['S'][0]\n    for _ in range(len(ids)+1):\n        if current == 'S' or current is None: break\n        backward.append(current)\n        current = nodes[current][0]\n    valid = all(nodes[nodes[v][0]][1] == v and nodes[nodes[v][1]][0] == v for v in forward if nodes[v][0] is not None and nodes[v][1] is not None)\n    return [forward,backward,nodes[victim],size,nodes['S'],valid]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('middle unlink', solve([[N,N+1,N+2],N+1]), [[N,N+2],[N+2,N],[None,None],2,[N+2,N],True])\ncheck('head unlink', solve([[N,N+1,N+2],N]), [[N+1,N+2],[N+2,N+1],[None,None],2,[N+2,N+1],True])\ncheck('tail unlink', solve([[N,N+1,N+2],N+2]), [[N,N+1],[N+1,N],[None,None],2,[N+1,N],True])\ncheck('only node', solve([[N],N]), [[],[],[None,None],0,[\"S\",\"S\"],True])\ncheck('pair head', solve([[N,N+1],N]), [[N+1],[N+1],[None,None],1,[N+1,N+1],True])\ncheck('long middle', solve([[N,N+1,N+2,N+3,N+4],N+2]), [[N,N+1,N+3,N+4],[N+4,N+3,N+1,N],[None,None],4,[N+4,N],True])\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":"3ae9149a9b856352139003db699b56d2d0ed738050dc647ebe38200d700331f0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    ids, victim = x\n    nodes = {'S': ['S','S']}\n    for i, value in enumerate(ids):\n        nodes[value] = [ids[i-1] if i else 'S', ids[i+1] if i+1 < len(ids) else 'S']\n    if ids:\n        nodes['S'] = [ids[-1],ids[0]]\n    size = len(ids)\n    left, right = nodes[victim]\n    nodes[left][1] = right\n    nodes[right][0] = left\n    nodes[victim] = [None,None]\n    size -= 1\n    forward = []\n    current = nodes['S'][1]\n    for _ in range(len(ids)+1):\n        if current == 'S' or current is None: break\n        forward.append(current)\n        current = nodes[current][1]\n    backward = []\n    current = nodes['S'][0]\n    for _ in range(len(ids)+1):\n        if current == 'S' or current is None: break\n        backward.append(current)\n        current = nodes[current][0]\n    valid = all(nodes[nodes[v][0]][1] == v and nodes[nodes[v][1]][0] == v for v in forward if nodes[v][0] is not None and nodes[v][1] is not None)\n    return [forward,backward,nodes[victim],size,nodes['S'],valid]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('middle unlink', solve([[N,N+1,N+2],N+1]), [[N,N+2],[N+2,N],[None,None],2,[N+2,N],True])\ncheck('head unlink', solve([[N,N+1,N+2],N]), [[N+1,N+2],[N+2,N+1],[None,None],2,[N+2,N+1],True])\ncheck('tail unlink', solve([[N,N+1,N+2],N+2]), [[N,N+1],[N+1,N],[None,None],2,[N+1,N],True])\ncheck('only node', solve([[N],N]), [[],[],[None,None],0,[\"S\",\"S\"],True])\ncheck('pair head', solve([[N,N+1],N]), [[N+1],[N+1],[None,None],1,[N+1,N+1],True])\ncheck('long middle', solve([[N,N+1,N+2,N+3,N+4],N+2]), [[N,N+1,N+3,N+4],[N+4,N+3,N+1,N],[None,None],4,[N+4,N],True])\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":"Offline finite deterministic model; no claim of production implementation or concurrent memory-model conformance. 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":"s3-bounded-deques-intrusive-unlink-predecessor-edge","generated_at":"2026-09-29T14:44:27.195587+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Controlled bounded deque implementation model with explicit storage and lifecycle observations.","repair":"Restore the documented predecessor edge invariant in intrusive-unlink.","root_cause":"Only the sentinel fast path is repaired, leaving interior forward edges stale.","sha256":"3b8eb5ffcd4446f8bcf19c285225fffa32ba45f87e1bdc58cd07c1a56b830cb2","title":"Unlink leaves the predecessor pointing at the detached node · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.187,"exit_code":1,"observations":[{"actual":[[1,2],[3,1],[null,null],2,[3,1],false],"check":"middle unlink","expected":[[1,3],[3,1],[null,null],2,[3,1],true],"passed":false},{"actual":[[2,3],[3,2],[null,null],2,[3,2],true],"check":"head unlink","expected":[[2,3],[3,2],[null,null],2,[3,2],true],"passed":true},{"actual":[[1,2,3],[2,1],[null,null],2,[2,1],false],"check":"tail unlink","expected":[[1,2],[2,1],[null,null],2,[2,1],true],"passed":false},{"actual":[[],[],[null,null],0,["S","S"],true],"check":"only node","expected":[[],[],[null,null],0,["S","S"],true],"passed":true},{"actual":[[2],[2],[null,null],1,[2,2],true],"check":"pair head","expected":[[2],[2],[null,null],1,[2,2],true],"passed":true},{"actual":[[1,2,3],[5,4,2,1],[null,null],4,[5,1],false],"check":"long middle","expected":[[1,2,4,5],[5,4,2,1],[null,null],4,[5,1],true],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"middle unlink\", \"actual\": [[1, 2], [3, 1], [null, null], 2, [3, 1], false], \"expected\": [[1, 3], [3, 1], [null, null], 2, [3, 1], true], \"passed\": false}, {\"check\": \"head unlink\", \"actual\": [[2, 3], [3, 2], [null, null], 2, [3, 2], true], \"expected\": [[2, 3], [3, 2], [null, null], 2, [3, 2], true], \"passed\": true}, {\"check\": \"tail unlink\", \"actual\": [[1, 2, 3], [2, 1], [null, null], 2, [2, 1], false], \"expected\": [[1, 2], [2, 1], [null, null], 2, [2, 1], true], \"passed\": false}, {\"check\": \"only node\", \"actual\": [[], [], [null, null], 0, [\"S\", \"S\"], true], \"expected\": [[], [], [null, null], 0, [\"S\", \"S\"], true], \"passed\": true}, {\"check\": \"pair head\", \"actual\": [[2], [2], [null, null], 1, [2, 2], true], \"expected\": [[2], [2], [null, null], 1, [2, 2], true], \"passed\": true}, {\"check\": \"long middle\", \"actual\": [[1, 2, 3], [5, 4, 2, 1], [null, null], 4, [5, 1], false], \"expected\": [[1, 2, 4, 5], [5, 4, 2, 1], [null, null], 4, [5, 1], true], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.745,"exit_code":1,"observations":[{"actual":[[1,2],[3,1],[null,null],2,[3,1],false],"check":"middle unlink","expected":[[1,3],[3,1],[null,null],2,[3,1],true],"passed":false},{"actual":[[1],[3,2],[null,null],2,[3,1],true],"check":"head unlink","expected":[[2,3],[3,2],[null,null],2,[3,2],true],"passed":false},{"actual":[[1,2,3],[2,1],[null,null],2,[2,1],false],"check":"tail unlink","expected":[[1,2],[2,1],[null,null],2,[2,1],true],"passed":false},{"actual":[[1],[],[null,null],0,["S",1],true],"check":"only node","expected":[[],[],[null,null],0,["S","S"],true],"passed":false},{"actual":[[1],[2],[null,null],1,[2,1],true],"check":"pair head","expected":[[2],[2],[null,null],1,[2,2],true],"passed":false},{"actual":[[1,2,3],[5,4,2,1],[null,null],4,[5,1],false],"check":"long middle","expected":[[1,2,4,5],[5,4,2,1],[null,null],4,[5,1],true],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"middle unlink\", \"actual\": [[1, 2], [3, 1], [null, null], 2, [3, 1], false], \"expected\": [[1, 3], [3, 1], [null, null], 2, [3, 1], true], \"passed\": false}, {\"check\": \"head unlink\", \"actual\": [[1], [3, 2], [null, null], 2, [3, 1], true], \"expected\": [[2, 3], [3, 2], [null, null], 2, [3, 2], true], \"passed\": false}, {\"check\": \"tail unlink\", \"actual\": [[1, 2, 3], [2, 1], [null, null], 2, [2, 1], false], \"expected\": [[1, 2], [2, 1], [null, null], 2, [2, 1], true], \"passed\": false}, {\"check\": \"only node\", \"actual\": [[1], [], [null, null], 0, [\"S\", 1], true], \"expected\": [[], [], [null, null], 0, [\"S\", \"S\"], true], \"passed\": false}, {\"check\": \"pair head\", \"actual\": [[1], [2], [null, null], 1, [2, 1], true], \"expected\": [[2], [2], [null, null], 1, [2, 2], true], \"passed\": false}, {\"check\": \"long middle\", \"actual\": [[1, 2, 3], [5, 4, 2, 1], [null, null], 4, [5, 1], false], \"expected\": [[1, 2, 4, 5], [5, 4, 2, 1], [null, null], 4, [5, 1], true], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":45.19,"exit_code":0,"observations":[{"actual":[[1,3],[3,1],[null,null],2,[3,1],true],"check":"middle unlink","expected":[[1,3],[3,1],[null,null],2,[3,1],true],"passed":true},{"actual":[[2,3],[3,2],[null,null],2,[3,2],true],"check":"head unlink","expected":[[2,3],[3,2],[null,null],2,[3,2],true],"passed":true},{"actual":[[1,2],[2,1],[null,null],2,[2,1],true],"check":"tail unlink","expected":[[1,2],[2,1],[null,null],2,[2,1],true],"passed":true},{"actual":[[],[],[null,null],0,["S","S"],true],"check":"only node","expected":[[],[],[null,null],0,["S","S"],true],"passed":true},{"actual":[[2],[2],[null,null],1,[2,2],true],"check":"pair head","expected":[[2],[2],[null,null],1,[2,2],true],"passed":true},{"actual":[[1,2,4,5],[5,4,2,1],[null,null],4,[5,1],true],"check":"long middle","expected":[[1,2,4,5],[5,4,2,1],[null,null],4,[5,1],true],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"middle unlink\", \"actual\": [[1, 3], [3, 1], [null, null], 2, [3, 1], true], \"expected\": [[1, 3], [3, 1], [null, null], 2, [3, 1], true], \"passed\": true}, {\"check\": \"head unlink\", \"actual\": [[2, 3], [3, 2], [null, null], 2, [3, 2], true], \"expected\": [[2, 3], [3, 2], [null, null], 2, [3, 2], true], \"passed\": true}, {\"check\": \"tail unlink\", \"actual\": [[1, 2], [2, 1], [null, null], 2, [2, 1], true], \"expected\": [[1, 2], [2, 1], [null, null], 2, [2, 1], true], \"passed\": true}, {\"check\": \"only node\", \"actual\": [[], [], [null, null], 0, [\"S\", \"S\"], true], \"expected\": [[], [], [null, null], 0, [\"S\", \"S\"], true], \"passed\": true}, {\"check\": \"pair head\", \"actual\": [[2], [2], [null, null], 1, [2, 2], true], \"expected\": [[2], [2], [null, null], 1, [2, 2], true], \"passed\": true}, {\"check\": \"long middle\", \"actual\": [[1, 2, 4, 5], [5, 4, 2, 1], [null, null], 4, [5, 1], true], \"expected\": [[1, 2, 4, 5], [5, 4, 2, 1], [null, null], 4, [5, 1], true], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}