{"abstract":"Graceful deque close wakes consumers before buffered items drain.","category":"Bounded deques","checks":9,"contract":"Graceful close forbids future insertion but permits draining buffered values. Empty closed deque reports closed rather than empty. Terminal consumer waiters wake exactly on first empty close or final drain.","contract_signature":"x","evaluation_group":"s3-bounded-deques-graceful-close","failed_approach":"The partial repair still applies the incorrect transition to an admitted boundary or multi-element case.","family":"s3-bounded-deques-graceful-close-close-drain-barrier","id":"FA-46781","implementations":{"attempt":{"sha256":"c00515b525dc630817d7391c543e4a0c255840d0d11d93637219203ad3b86bf4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    a,closed,op,value,cap,waiters=x\n    if op=='close':\n        wakes=waiters if not closed and len(a)<=1 else []\n        return [a,True,None,wakes,not closed]\n    if op=='push':\n        if closed or len(a)==cap:return [a,closed,None,[],False]\n        return [a+[value],closed,None,[],True]\n    if not a:return [a,closed,'closed' if closed else 'empty',[],False]\n    result=a[1:]\n    wakes=waiters if closed and not result else []\n    return [result,closed,a[0],wakes,True]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([[N],False,\"close\",0,3,[1,2]]), {1: [[1], True, None, [], True], 2: [[2], True, None, [], True], 3: [[3], True, None, [], True], 4: [[4], True, None, [], True], 5: [[5], True, None, [], True]}[N])\ncheck('1', solve([[],False,\"close\",0,3,[1,2]]), {1: [[], True, None, [1, 2], True], 2: [[], True, None, [1, 2], True], 3: [[], True, None, [1, 2], True], 4: [[], True, None, [1, 2], True], 5: [[], True, None, [1, 2], True]}[N])\ncheck('2', solve([[],True,\"close\",0,3,[1,2]]), {1: [[], True, None, [], False], 2: [[], True, None, [], False], 3: [[], True, None, [], False], 4: [[], True, None, [], False], 5: [[], True, None, [], False]}[N])\ncheck('3', solve([[N],True,\"push\",N+1,3,[1]]), {1: [[1], True, None, [], False], 2: [[2], True, None, [], False], 3: [[3], True, None, [], False], 4: [[4], True, None, [], False], 5: [[5], True, None, [], False]}[N])\ncheck('4', solve([[N,N+1],True,\"pop\",0,3,[1]]), {1: [[2], True, 1, [], True], 2: [[3], True, 2, [], True], 3: [[4], True, 3, [], True], 4: [[5], True, 4, [], True], 5: [[6], True, 5, [], True]}[N])\ncheck('5', solve([[N],True,\"pop\",0,3,[1,2]]), {1: [[], True, 1, [1, 2], True], 2: [[], True, 2, [1, 2], True], 3: [[], True, 3, [1, 2], True], 4: [[], True, 4, [1, 2], True], 5: [[], True, 5, [1, 2], True]}[N])\ncheck('6', solve([[],True,\"pop\",0,3,[1]]), {1: [[], True, 'closed', [], False], 2: [[], True, 'closed', [], False], 3: [[], True, 'closed', [], False], 4: [[], True, 'closed', [], False], 5: [[], True, 'closed', [], False]}[N])\ncheck('7', solve([[],False,\"pop\",0,3,[1]]), {1: [[], False, 'empty', [], False], 2: [[], False, 'empty', [], False], 3: [[], False, 'empty', [], False], 4: [[], False, 'empty', [], False], 5: [[], False, 'empty', [], False]}[N])\ncheck('8', solve([[N],False,\"push\",N+1,3,[]]), {1: [[1, 2], False, None, [], True], 2: [[2, 3], False, None, [], True], 3: [[3, 4], False, None, [], True], 4: [[4, 5], False, None, [], True], 5: [[5, 6], False, None, [], True]}[N])\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":"4b5f8f9fb21399b078b5649593849624cede27c056d6ae7cef6b56df78fb3e1b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    a,closed,op,value,cap,waiters=x\n    if op=='close':\n        wakes=waiters if not closed else []\n        return [a,True,None,wakes,not closed]\n    if op=='push':\n        if closed or len(a)==cap:return [a,closed,None,[],False]\n        return [a+[value],closed,None,[],True]\n    if not a:return [a,closed,'closed' if closed else 'empty',[],False]\n    result=a[1:]\n    wakes=waiters if closed and not result else []\n    return [result,closed,a[0],wakes,True]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([[N],False,\"close\",0,3,[1,2]]), {1: [[1], True, None, [], True], 2: [[2], True, None, [], True], 3: [[3], True, None, [], True], 4: [[4], True, None, [], True], 5: [[5], True, None, [], True]}[N])\ncheck('1', solve([[],False,\"close\",0,3,[1,2]]), {1: [[], True, None, [1, 2], True], 2: [[], True, None, [1, 2], True], 3: [[], True, None, [1, 2], True], 4: [[], True, None, [1, 2], True], 5: [[], True, None, [1, 2], True]}[N])\ncheck('2', solve([[],True,\"close\",0,3,[1,2]]), {1: [[], True, None, [], False], 2: [[], True, None, [], False], 3: [[], True, None, [], False], 4: [[], True, None, [], False], 5: [[], True, None, [], False]}[N])\ncheck('3', solve([[N],True,\"push\",N+1,3,[1]]), {1: [[1], True, None, [], False], 2: [[2], True, None, [], False], 3: [[3], True, None, [], False], 4: [[4], True, None, [], False], 5: [[5], True, None, [], False]}[N])\ncheck('4', solve([[N,N+1],True,\"pop\",0,3,[1]]), {1: [[2], True, 1, [], True], 2: [[3], True, 2, [], True], 3: [[4], True, 3, [], True], 4: [[5], True, 4, [], True], 5: [[6], True, 5, [], True]}[N])\ncheck('5', solve([[N],True,\"pop\",0,3,[1,2]]), {1: [[], True, 1, [1, 2], True], 2: [[], True, 2, [1, 2], True], 3: [[], True, 3, [1, 2], True], 4: [[], True, 4, [1, 2], True], 5: [[], True, 5, [1, 2], True]}[N])\ncheck('6', solve([[],True,\"pop\",0,3,[1]]), {1: [[], True, 'closed', [], False], 2: [[], True, 'closed', [], False], 3: [[], True, 'closed', [], False], 4: [[], True, 'closed', [], False], 5: [[], True, 'closed', [], False]}[N])\ncheck('7', solve([[],False,\"pop\",0,3,[1]]), {1: [[], False, 'empty', [], False], 2: [[], False, 'empty', [], False], 3: [[], False, 'empty', [], False], 4: [[], False, 'empty', [], False], 5: [[], False, 'empty', [], False]}[N])\ncheck('8', solve([[N],False,\"push\",N+1,3,[]]), {1: [[1, 2], False, None, [], True], 2: [[2, 3], False, None, [], True], 3: [[3, 4], False, None, [], True], 4: [[4, 5], False, None, [], True], 5: [[5, 6], False, None, [], True]}[N])\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-graceful-close-close-drain-barrier","generated_at":"2026-09-29T14:44:35.646782+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.","root_cause":"Graceful deque close wakes consumers before buffered items drain.","sha256":"f4693a54b8bf46a911dfe06c72a14fa4a8f6152cefc6ff8a7b7887c5e112bb82","title":"Graceful deque close wakes consumers before buffered items drain · 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":39.554,"exit_code":1,"observations":[{"actual":[[1],true,null,[1,2],true],"check":"0","expected":[[1],true,null,[],true],"passed":false},{"actual":[[],true,null,[1,2],true],"check":"1","expected":[[],true,null,[1,2],true],"passed":true},{"actual":[[],true,null,[],false],"check":"2","expected":[[],true,null,[],false],"passed":true},{"actual":[[1],true,null,[],false],"check":"3","expected":[[1],true,null,[],false],"passed":true},{"actual":[[2],true,1,[],true],"check":"4","expected":[[2],true,1,[],true],"passed":true},{"actual":[[],true,1,[1,2],true],"check":"5","expected":[[],true,1,[1,2],true],"passed":true},{"actual":[[],true,"closed",[],false],"check":"6","expected":[[],true,"closed",[],false],"passed":true},{"actual":[[],false,"empty",[],false],"check":"7","expected":[[],false,"empty",[],false],"passed":true},{"actual":[[1,2],false,null,[],true],"check":"8","expected":[[1,2],false,null,[],true],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [[1], true, null, [1, 2], true], \"expected\": [[1], true, null, [], true], \"passed\": false}, {\"check\": \"1\", \"actual\": [[], true, null, [1, 2], true], \"expected\": [[], true, null, [1, 2], true], \"passed\": true}, {\"check\": \"2\", \"actual\": [[], true, null, [], false], \"expected\": [[], true, null, [], false], \"passed\": true}, {\"check\": \"3\", \"actual\": [[1], true, null, [], false], \"expected\": [[1], true, null, [], false], \"passed\": true}, {\"check\": \"4\", \"actual\": [[2], true, 1, [], true], \"expected\": [[2], true, 1, [], true], \"passed\": true}, {\"check\": \"5\", \"actual\": [[], true, 1, [1, 2], true], \"expected\": [[], true, 1, [1, 2], true], \"passed\": true}, {\"check\": \"6\", \"actual\": [[], true, \"closed\", [], false], \"expected\": [[], true, \"closed\", [], false], \"passed\": true}, {\"check\": \"7\", \"actual\": [[], false, \"empty\", [], false], \"expected\": [[], false, \"empty\", [], false], \"passed\": true}, {\"check\": \"8\", \"actual\": [[1, 2], false, null, [], true], \"expected\": [[1, 2], false, null, [], true], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.859,"exit_code":1,"observations":[{"actual":[[1],true,null,[1,2],true],"check":"0","expected":[[1],true,null,[],true],"passed":false},{"actual":[[],true,null,[1,2],true],"check":"1","expected":[[],true,null,[1,2],true],"passed":true},{"actual":[[],true,null,[],false],"check":"2","expected":[[],true,null,[],false],"passed":true},{"actual":[[1],true,null,[],false],"check":"3","expected":[[1],true,null,[],false],"passed":true},{"actual":[[2],true,1,[],true],"check":"4","expected":[[2],true,1,[],true],"passed":true},{"actual":[[],true,1,[1,2],true],"check":"5","expected":[[],true,1,[1,2],true],"passed":true},{"actual":[[],true,"closed",[],false],"check":"6","expected":[[],true,"closed",[],false],"passed":true},{"actual":[[],false,"empty",[],false],"check":"7","expected":[[],false,"empty",[],false],"passed":true},{"actual":[[1,2],false,null,[],true],"check":"8","expected":[[1,2],false,null,[],true],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [[1], true, null, [1, 2], true], \"expected\": [[1], true, null, [], true], \"passed\": false}, {\"check\": \"1\", \"actual\": [[], true, null, [1, 2], true], \"expected\": [[], true, null, [1, 2], true], \"passed\": true}, {\"check\": \"2\", \"actual\": [[], true, null, [], false], \"expected\": [[], true, null, [], false], \"passed\": true}, {\"check\": \"3\", \"actual\": [[1], true, null, [], false], \"expected\": [[1], true, null, [], false], \"passed\": true}, {\"check\": \"4\", \"actual\": [[2], true, 1, [], true], \"expected\": [[2], true, 1, [], true], \"passed\": true}, {\"check\": \"5\", \"actual\": [[], true, 1, [1, 2], true], \"expected\": [[], true, 1, [1, 2], true], \"passed\": true}, {\"check\": \"6\", \"actual\": [[], true, \"closed\", [], false], \"expected\": [[], true, \"closed\", [], false], \"passed\": true}, {\"check\": \"7\", \"actual\": [[], false, \"empty\", [], false], \"expected\": [[], false, \"empty\", [], false], \"passed\": true}, {\"check\": \"8\", \"actual\": [[1, 2], false, null, [], true], \"expected\": [[1, 2], false, null, [], true], \"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."}}