{"abstract":"Retry starts after an empty response already completed","category":"HTTP retries","checks":7,"contract":"begin starts an attempt only while nonterminal, headers records a status, deliver(bytes) records irreversible delivery, fail allows retry only before any delivered bytes. A zero-byte delivery is reversible. finish terminally succeeds. cancel terminally cancels. New attempts reset their local status but never erase already exposed data. Return retry decisions and exposed byte count.","evaluation_group":"s3-http_retries-response-consumer","failed_approach":"The attempted repair changes the faulty site to if terminal and delivered>0: out.append('terminal'); continue\n        active but still violates a regression oracle.","family":"s3-http_retries-response-consumer-start-terminal","id":"FA-29681","implementations":{"attempt":{"sha256":"2c5660a607d4a6fc57f1597c5e1b45e546bd8cf98caba74e73aa8c95198f32b6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    active=False; delivered=0; status=None; terminal=False; out=[]\n    for e in events:\n        if e[0]=='begin':\n            if terminal and delivered>0: out.append('terminal'); continue\n            active=True\n            status=None\n        elif e[0]=='headers' and active:\n            status=e[1]\n        elif e[0]=='deliver' and active:\n            delivered+=e[1]\n        elif e[0]=='fail':\n            if terminal: out.append('terminal'); continue\n            if not active: out.append('inactive'); continue\n            active=False\n            if delivered>0:\n                terminal=True\n                out.append(['partial',status])\n            else: out.append(['retry',status])\n        elif e[0]=='finish' and active:\n            terminal=True; active=False; out.append('success')\n        elif e[0]=='cancel':\n            terminal=True; active=False; out.append('cancelled')\n    return [out,delivered]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([]), [[],0])\ncheck('1', solve([('fail',)]), [['inactive'],0])\ncheck('2', solve([('begin',),('headers',503),('deliver',0),('fail',),('fail',),('begin',),('fail',)]), [[['retry',503],'inactive',['retry',None]],0])\ncheck('3', solve([('begin',),('headers',200),('deliver',1),('deliver',0),('fail',),('begin',)]), [[['partial',200],'terminal'],1])\ncheck('4', solve([('begin',),('headers',502),('deliver',N+2),('deliver',2),('fail',)]), [[['partial',502]],N+4])\ncheck('5', solve([('begin',),('finish',),('begin',),('fail',)]), [['success','terminal','terminal'],0])\ncheck('6', solve([('begin',),('cancel',),('begin',)]), [['cancelled','terminal'],0])\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":"792199faa413d14f5577a417fc7aa47790a1a7e046e514fbdfd5e5d0ac3fae61","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    active=False; delivered=0; status=None; terminal=False; out=[]\n    for e in events:\n        if e[0]=='begin':\n            if False: out.append('terminal'); continue\n            active=True\n            status=None\n        elif e[0]=='headers' and active:\n            status=e[1]\n        elif e[0]=='deliver' and active:\n            delivered+=e[1]\n        elif e[0]=='fail':\n            if terminal: out.append('terminal'); continue\n            if not active: out.append('inactive'); continue\n            active=False\n            if delivered>0:\n                terminal=True\n                out.append(['partial',status])\n            else: out.append(['retry',status])\n        elif e[0]=='finish' and active:\n            terminal=True; active=False; out.append('success')\n        elif e[0]=='cancel':\n            terminal=True; active=False; out.append('cancelled')\n    return [out,delivered]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([]), [[],0])\ncheck('1', solve([('fail',)]), [['inactive'],0])\ncheck('2', solve([('begin',),('headers',503),('deliver',0),('fail',),('fail',),('begin',),('fail',)]), [[['retry',503],'inactive',['retry',None]],0])\ncheck('3', solve([('begin',),('headers',200),('deliver',1),('deliver',0),('fail',),('begin',)]), [[['partial',200],'terminal'],1])\ncheck('4', solve([('begin',),('headers',502),('deliver',N+2),('deliver',2),('fail',)]), [[['partial',502]],N+4])\ncheck('5', solve([('begin',),('finish',),('begin',),('fail',)]), [['success','terminal','terminal'],0])\ncheck('6', solve([('begin',),('cancel',),('begin',)]), [['cancelled','terminal'],0])\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":"364ede61dc03da887ab908f371923b3dd15510b1408c40eef135c5261cb33632","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    active=False; delivered=0; status=None; terminal=False; out=[]\n    for e in events:\n        if e[0]=='begin':\n            if terminal: out.append('terminal'); continue\n            active=True\n            status=None\n        elif e[0]=='headers' and active:\n            status=e[1]\n        elif e[0]=='deliver' and active:\n            delivered+=e[1]\n        elif e[0]=='fail':\n            if terminal: out.append('terminal'); continue\n            if not active: out.append('inactive'); continue\n            active=False\n            if delivered>0:\n                terminal=True\n                out.append(['partial',status])\n            else: out.append(['retry',status])\n        elif e[0]=='finish' and active:\n            terminal=True; active=False; out.append('success')\n        elif e[0]=='cancel':\n            terminal=True; active=False; out.append('cancelled')\n    return [out,delivered]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([]), [[],0])\ncheck('1', solve([('fail',)]), [['inactive'],0])\ncheck('2', solve([('begin',),('headers',503),('deliver',0),('fail',),('fail',),('begin',),('fail',)]), [[['retry',503],'inactive',['retry',None]],0])\ncheck('3', solve([('begin',),('headers',200),('deliver',1),('deliver',0),('fail',),('begin',)]), [[['partial',200],'terminal'],1])\ncheck('4', solve([('begin',),('headers',502),('deliver',N+2),('deliver',2),('fail',)]), [[['partial',502]],N+4])\ncheck('5', solve([('begin',),('finish',),('begin',),('fail',)]), [['success','terminal','terminal'],0])\ncheck('6', solve([('begin',),('cancel',),('begin',)]), [['cancelled','terminal'],0])\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":"Stipulated bounded simulator, not a complete HTTP implementation or a standards conformance claim. 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-http_retries-response-consumer-start-terminal","generated_at":"2026-09-29T14:41:45.560319+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Offline deterministic model of HTTP request retries.","repair":"Restore the specified transition if terminal: out.append('terminal'); continue\n        active.","root_cause":"Retry starts after an empty response already completed","sha256":"35865284ed14b7cc42c42517639acd3eaca7846159455e1c22f047712896935e","title":"Retry after consumer-visible response delivery: Retry starts after an empty response already completed · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.784,"exit_code":1,"observations":[{"actual":[[],0],"check":"0","expected":[[],0],"passed":true},{"actual":[["inactive"],0],"check":"1","expected":[["inactive"],0],"passed":true},{"actual":[[["retry",503],"inactive",["retry",null]],0],"check":"2","expected":[[["retry",503],"inactive",["retry",null]],0],"passed":true},{"actual":[[["partial",200],"terminal"],1],"check":"3","expected":[[["partial",200],"terminal"],1],"passed":true},{"actual":[[["partial",502]],5],"check":"4","expected":[[["partial",502]],5],"passed":true},{"actual":[["success","terminal"],0],"check":"5","expected":[["success","terminal","terminal"],0],"passed":false},{"actual":[["cancelled"],0],"check":"6","expected":[["cancelled","terminal"],0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [[], 0], \"expected\": [[], 0], \"passed\": true}, {\"check\": \"1\", \"actual\": [[\"inactive\"], 0], \"expected\": [[\"inactive\"], 0], \"passed\": true}, {\"check\": \"2\", \"actual\": [[[\"retry\", 503], \"inactive\", [\"retry\", null]], 0], \"expected\": [[[\"retry\", 503], \"inactive\", [\"retry\", null]], 0], \"passed\": true}, {\"check\": \"3\", \"actual\": [[[\"partial\", 200], \"terminal\"], 1], \"expected\": [[[\"partial\", 200], \"terminal\"], 1], \"passed\": true}, {\"check\": \"4\", \"actual\": [[[\"partial\", 502]], 5], \"expected\": [[[\"partial\", 502]], 5], \"passed\": true}, {\"check\": \"5\", \"actual\": [[\"success\", \"terminal\"], 0], \"expected\": [[\"success\", \"terminal\", \"terminal\"], 0], \"passed\": false}, {\"check\": \"6\", \"actual\": [[\"cancelled\"], 0], \"expected\": [[\"cancelled\", \"terminal\"], 0], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.682,"exit_code":1,"observations":[{"actual":[[],0],"check":"0","expected":[[],0],"passed":true},{"actual":[["inactive"],0],"check":"1","expected":[["inactive"],0],"passed":true},{"actual":[[["retry",503],"inactive",["retry",null]],0],"check":"2","expected":[[["retry",503],"inactive",["retry",null]],0],"passed":true},{"actual":[[["partial",200]],1],"check":"3","expected":[[["partial",200],"terminal"],1],"passed":false},{"actual":[[["partial",502]],5],"check":"4","expected":[[["partial",502]],5],"passed":true},{"actual":[["success","terminal"],0],"check":"5","expected":[["success","terminal","terminal"],0],"passed":false},{"actual":[["cancelled"],0],"check":"6","expected":[["cancelled","terminal"],0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [[], 0], \"expected\": [[], 0], \"passed\": true}, {\"check\": \"1\", \"actual\": [[\"inactive\"], 0], \"expected\": [[\"inactive\"], 0], \"passed\": true}, {\"check\": \"2\", \"actual\": [[[\"retry\", 503], \"inactive\", [\"retry\", null]], 0], \"expected\": [[[\"retry\", 503], \"inactive\", [\"retry\", null]], 0], \"passed\": true}, {\"check\": \"3\", \"actual\": [[[\"partial\", 200]], 1], \"expected\": [[[\"partial\", 200], \"terminal\"], 1], \"passed\": false}, {\"check\": \"4\", \"actual\": [[[\"partial\", 502]], 5], \"expected\": [[[\"partial\", 502]], 5], \"passed\": true}, {\"check\": \"5\", \"actual\": [[\"success\", \"terminal\"], 0], \"expected\": [[\"success\", \"terminal\", \"terminal\"], 0], \"passed\": false}, {\"check\": \"6\", \"actual\": [[\"cancelled\"], 0], \"expected\": [[\"cancelled\", \"terminal\"], 0], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.163,"exit_code":0,"observations":[{"actual":[[],0],"check":"0","expected":[[],0],"passed":true},{"actual":[["inactive"],0],"check":"1","expected":[["inactive"],0],"passed":true},{"actual":[[["retry",503],"inactive",["retry",null]],0],"check":"2","expected":[[["retry",503],"inactive",["retry",null]],0],"passed":true},{"actual":[[["partial",200],"terminal"],1],"check":"3","expected":[[["partial",200],"terminal"],1],"passed":true},{"actual":[[["partial",502]],5],"check":"4","expected":[[["partial",502]],5],"passed":true},{"actual":[["success","terminal","terminal"],0],"check":"5","expected":[["success","terminal","terminal"],0],"passed":true},{"actual":[["cancelled","terminal"],0],"check":"6","expected":[["cancelled","terminal"],0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [[], 0], \"expected\": [[], 0], \"passed\": true}, {\"check\": \"1\", \"actual\": [[\"inactive\"], 0], \"expected\": [[\"inactive\"], 0], \"passed\": true}, {\"check\": \"2\", \"actual\": [[[\"retry\", 503], \"inactive\", [\"retry\", null]], 0], \"expected\": [[[\"retry\", 503], \"inactive\", [\"retry\", null]], 0], \"passed\": true}, {\"check\": \"3\", \"actual\": [[[\"partial\", 200], \"terminal\"], 1], \"expected\": [[[\"partial\", 200], \"terminal\"], 1], \"passed\": true}, {\"check\": \"4\", \"actual\": [[[\"partial\", 502]], 5], \"expected\": [[[\"partial\", 502]], 5], \"passed\": true}, {\"check\": \"5\", \"actual\": [[\"success\", \"terminal\", \"terminal\"], 0], \"expected\": [[\"success\", \"terminal\", \"terminal\"], 0], \"passed\": true}, {\"check\": \"6\", \"actual\": [[\"cancelled\", \"terminal\"], 0], \"expected\": [[\"cancelled\", \"terminal\"], 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}