{"abstract":"Effect teardown stops after one disposer fails.","category":"Client state","checks":6,"contract":"Effect resources dispose in reverse registration order. Every disposer runs even when an earlier one fails; failure identities are reported in disposal order.","evaluation_group":"s3-client-state-effect-disposer-stack","failed_approach":"The partial repair still violates at least one explicit regression oracle.","family":"s3-client-state-effect-disposer-stack","id":"FA-24751","implementations":{"attempt":{"sha256":"0de901d363497ddfebe02243266dad4cc1576e86dead131843946715561e904d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(disposers):\n    return [name for name,failed in disposers],[name for name,failed in disposers if failed]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('failure does not stop', solve([('outer',False),('inner',True)]), (['inner','outer'],['inner']))\ncheck('multiple failures', solve([('a',True),('b',True)]), (['b','a'],['b','a']))\ncheck('normal lifo', solve([('a',False),('b',False)]), (['b','a'],[]))\ncheck('none registered', solve([]), ([],[]))\ncheck('one failed', solve([('a',True)]), (['a'],['a']))\ncheck('parameterized stack', solve([(str(i),False) for i in range(N+2)]), ([str(i) for i in reversed(range(N+2))],[]))\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":"163b7bcd2cd0a08cb1de186a3b984136e889c9ae857f93ffb29d858d730a3eba","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(disposers):\n    done=[]; errors=[]\n    for name,failed in reversed(disposers):\n        done.append(name)\n        if failed: errors.append(name); break\n    return done,errors\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('failure does not stop', solve([('outer',False),('inner',True)]), (['inner','outer'],['inner']))\ncheck('multiple failures', solve([('a',True),('b',True)]), (['b','a'],['b','a']))\ncheck('normal lifo', solve([('a',False),('b',False)]), (['b','a'],[]))\ncheck('none registered', solve([]), ([],[]))\ncheck('one failed', solve([('a',True)]), (['a'],['a']))\ncheck('parameterized stack', solve([(str(i),False) for i in range(N+2)]), ([str(i) for i in reversed(range(N+2))],[]))\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":"4b6b4b38e845c927670760d8e07348efaac76eb1914aa89c05d5a7bd45d2d838","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(disposers):\n    done=[]; errors=[]\n    for name,failed in reversed(disposers):\n        done.append(name)\n        if failed: errors.append(name)\n    return done,errors\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('failure does not stop', solve([('outer',False),('inner',True)]), (['inner','outer'],['inner']))\ncheck('multiple failures', solve([('a',True),('b',True)]), (['b','a'],['b','a']))\ncheck('normal lifo', solve([('a',False),('b',False)]), (['b','a'],[]))\ncheck('none registered', solve([]), ([],[]))\ncheck('one failed', solve([('a',True)]), (['a'],['a']))\ncheck('parameterized stack', solve([(str(i),False) for i in range(N+2)]), ([str(i) for i in reversed(range(N+2))],[]))\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":"This models the stated application policy only; no browser or framework conformance is claimed. 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-client-state-effect-disposer-stack","generated_at":"2026-09-29T14:41:00.390234+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A bounded offline client-state transition with explicit lifecycle inputs.","repair":"Effect resources dispose in reverse registration order. Every disposer runs even when an earlier one fails; failure identities are reported in disposal order.","root_cause":"The faulty implementation violates Effect resources dispose in reverse registration order. Every disposer runs even when an earlier one fails; failure identities are reported in disposal order.","sha256":"e949d05e206a05d3ee0c8f436bb7e71a25c8d47394173cb6c8d945da380b7787","title":"Effect teardown stops after one disposer fails · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.458,"exit_code":1,"observations":[{"actual":[["outer","inner"],["inner"]],"check":"failure does not stop","expected":[["inner","outer"],["inner"]],"passed":false},{"actual":[["a","b"],["a","b"]],"check":"multiple failures","expected":[["b","a"],["b","a"]],"passed":false},{"actual":[["a","b"],[]],"check":"normal lifo","expected":[["b","a"],[]],"passed":false},{"actual":[[],[]],"check":"none registered","expected":[[],[]],"passed":true},{"actual":[["a"],["a"]],"check":"one failed","expected":[["a"],["a"]],"passed":true},{"actual":[["0","1","2"],[]],"check":"parameterized stack","expected":[["2","1","0"],[]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"failure does not stop\", \"actual\": [[\"outer\", \"inner\"], [\"inner\"]], \"expected\": [[\"inner\", \"outer\"], [\"inner\"]], \"passed\": false}, {\"check\": \"multiple failures\", \"actual\": [[\"a\", \"b\"], [\"a\", \"b\"]], \"expected\": [[\"b\", \"a\"], [\"b\", \"a\"]], \"passed\": false}, {\"check\": \"normal lifo\", \"actual\": [[\"a\", \"b\"], []], \"expected\": [[\"b\", \"a\"], []], \"passed\": false}, {\"check\": \"none registered\", \"actual\": [[], []], \"expected\": [[], []], \"passed\": true}, {\"check\": \"one failed\", \"actual\": [[\"a\"], [\"a\"]], \"expected\": [[\"a\"], [\"a\"]], \"passed\": true}, {\"check\": \"parameterized stack\", \"actual\": [[\"0\", \"1\", \"2\"], []], \"expected\": [[\"2\", \"1\", \"0\"], []], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.615,"exit_code":1,"observations":[{"actual":[["inner"],["inner"]],"check":"failure does not stop","expected":[["inner","outer"],["inner"]],"passed":false},{"actual":[["b"],["b"]],"check":"multiple failures","expected":[["b","a"],["b","a"]],"passed":false},{"actual":[["b","a"],[]],"check":"normal lifo","expected":[["b","a"],[]],"passed":true},{"actual":[[],[]],"check":"none registered","expected":[[],[]],"passed":true},{"actual":[["a"],["a"]],"check":"one failed","expected":[["a"],["a"]],"passed":true},{"actual":[["2","1","0"],[]],"check":"parameterized stack","expected":[["2","1","0"],[]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"failure does not stop\", \"actual\": [[\"inner\"], [\"inner\"]], \"expected\": [[\"inner\", \"outer\"], [\"inner\"]], \"passed\": false}, {\"check\": \"multiple failures\", \"actual\": [[\"b\"], [\"b\"]], \"expected\": [[\"b\", \"a\"], [\"b\", \"a\"]], \"passed\": false}, {\"check\": \"normal lifo\", \"actual\": [[\"b\", \"a\"], []], \"expected\": [[\"b\", \"a\"], []], \"passed\": true}, {\"check\": \"none registered\", \"actual\": [[], []], \"expected\": [[], []], \"passed\": true}, {\"check\": \"one failed\", \"actual\": [[\"a\"], [\"a\"]], \"expected\": [[\"a\"], [\"a\"]], \"passed\": true}, {\"check\": \"parameterized stack\", \"actual\": [[\"2\", \"1\", \"0\"], []], \"expected\": [[\"2\", \"1\", \"0\"], []], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.288,"exit_code":0,"observations":[{"actual":[["inner","outer"],["inner"]],"check":"failure does not stop","expected":[["inner","outer"],["inner"]],"passed":true},{"actual":[["b","a"],["b","a"]],"check":"multiple failures","expected":[["b","a"],["b","a"]],"passed":true},{"actual":[["b","a"],[]],"check":"normal lifo","expected":[["b","a"],[]],"passed":true},{"actual":[[],[]],"check":"none registered","expected":[[],[]],"passed":true},{"actual":[["a"],["a"]],"check":"one failed","expected":[["a"],["a"]],"passed":true},{"actual":[["2","1","0"],[]],"check":"parameterized stack","expected":[["2","1","0"],[]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"failure does not stop\", \"actual\": [[\"inner\", \"outer\"], [\"inner\"]], \"expected\": [[\"inner\", \"outer\"], [\"inner\"]], \"passed\": true}, {\"check\": \"multiple failures\", \"actual\": [[\"b\", \"a\"], [\"b\", \"a\"]], \"expected\": [[\"b\", \"a\"], [\"b\", \"a\"]], \"passed\": true}, {\"check\": \"normal lifo\", \"actual\": [[\"b\", \"a\"], []], \"expected\": [[\"b\", \"a\"], []], \"passed\": true}, {\"check\": \"none registered\", \"actual\": [[], []], \"expected\": [[], []], \"passed\": true}, {\"check\": \"one failed\", \"actual\": [[\"a\"], [\"a\"]], \"expected\": [[\"a\"], [\"a\"]], \"passed\": true}, {\"check\": \"parameterized stack\", \"actual\": [[\"2\", \"1\", \"0\"], []], \"expected\": [[\"2\", \"1\", \"0\"], []], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}