{"abstract":"Replay store violates retry transition semantics","category":"HTTP retries","checks":7,"contract":"open(memory threshold,total limit) begins capturing byte-list chunks. append stores an entire chunk only if total limit permits; crossing memory threshold spills all prior memory and new chunk to modeled disk. fail_disk invalidates captured body. seal finalizes; replay returns captured bytes only when sealed and valid. Overflow is terminal until next open. Return replay decisions and storage mode.","evaluation_group":"s3-http_retries-retry-spool","failed_approach":"The attempted repair changes the faulty site to disk but still violates a regression oracle.","family":"s3-http_retries-retry-spool-replay-store","id":"FA-30596","implementations":{"attempt":{"sha256":"77e94db5cb66a36a237df7de3decb955dbfc2ac7ae9856ddaa5418e8d8a8cad4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    threshold=0; limit=0; memory=[]; disk=[]; size=0; mode='memory'; state='idle'; out=[]\n    for e in events:\n        if e[0]=='open':\n            threshold=e[1]; limit=e[2]; memory=[]; disk=[]; size=0; mode='memory'; state='capturing'\n        elif e[0]=='append':\n            if state!='capturing': continue\n            chunk=list(e[1])\n            if size+len(chunk)>limit:\n                state='overflow'; memory=[]; disk=[]; continue\n            if mode=='memory' and size+len(chunk)>threshold:\n                disk=list(memory); memory=[]; mode='disk'\n            if mode=='disk': disk.extend(chunk)\n            else: memory.extend(chunk)\n            size+=len(chunk)\n        elif e[0]=='seal':\n            if state=='capturing': state='sealed'\n        elif e[0]=='fail_disk':\n            if mode=='disk': state='io-error'; memory=[]; disk=[]\n        elif e[0]=='replay':\n            if state!='sealed': out.append(state); continue\n            out.append(list(disk))\n    return [out,mode]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([]), [[],'memory'])\ncheck('1', solve([('open',3,8),('append',[N,N+1]),('append',[N+2]),('seal',),('replay',)]), [[[N,N+1,N+2]],'memory'])\ncheck('2', solve([('open',2,8),('append',[N,N+1]),('append',[N+2,N+3]),('append',[N+4]),('seal',),('replay',)]), [[[N,N+1,N+2,N+3,N+4]],'disk'])\ncheck('3', solve([('open',2,3),('append',[N,N+1]),('append',[N+2]),('append',[N+3]),('seal',),('replay',)]), [['overflow'],'disk'])\ncheck('4', solve([('open',0,4),('append',[N]),('fail_disk',),('seal',),('replay',),('open',4,4),('append',[N+1]),('seal',),('replay',)]), [['io-error',[N+1]],'memory'])\ncheck('5', solve([('open',2,2),('append',[N]),('replay',),('seal',),('append',[N+1]),('replay',)]), [['capturing',[N]],'memory'])\ncheck('6', solve([('open',0,0),('append',[]),('seal',),('replay',)]), [[[]],'memory'])\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":"5c7c2c308f39569bdb75a51a0cc99358d1be0e06ba7df02f4cd22992494750b7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    threshold=0; limit=0; memory=[]; disk=[]; size=0; mode='memory'; state='idle'; out=[]\n    for e in events:\n        if e[0]=='open':\n            threshold=e[1]; limit=e[2]; memory=[]; disk=[]; size=0; mode='memory'; state='capturing'\n        elif e[0]=='append':\n            if state!='capturing': continue\n            chunk=list(e[1])\n            if size+len(chunk)>limit:\n                state='overflow'; memory=[]; disk=[]; continue\n            if mode=='memory' and size+len(chunk)>threshold:\n                disk=list(memory); memory=[]; mode='disk'\n            if mode=='disk': disk.extend(chunk)\n            else: memory.extend(chunk)\n            size+=len(chunk)\n        elif e[0]=='seal':\n            if state=='capturing': state='sealed'\n        elif e[0]=='fail_disk':\n            if mode=='disk': state='io-error'; memory=[]; disk=[]\n        elif e[0]=='replay':\n            if state!='sealed': out.append(state); continue\n            out.append(list(memory))\n    return [out,mode]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([]), [[],'memory'])\ncheck('1', solve([('open',3,8),('append',[N,N+1]),('append',[N+2]),('seal',),('replay',)]), [[[N,N+1,N+2]],'memory'])\ncheck('2', solve([('open',2,8),('append',[N,N+1]),('append',[N+2,N+3]),('append',[N+4]),('seal',),('replay',)]), [[[N,N+1,N+2,N+3,N+4]],'disk'])\ncheck('3', solve([('open',2,3),('append',[N,N+1]),('append',[N+2]),('append',[N+3]),('seal',),('replay',)]), [['overflow'],'disk'])\ncheck('4', solve([('open',0,4),('append',[N]),('fail_disk',),('seal',),('replay',),('open',4,4),('append',[N+1]),('seal',),('replay',)]), [['io-error',[N+1]],'memory'])\ncheck('5', solve([('open',2,2),('append',[N]),('replay',),('seal',),('append',[N+1]),('replay',)]), [['capturing',[N]],'memory'])\ncheck('6', solve([('open',0,0),('append',[]),('seal',),('replay',)]), [[[]],'memory'])\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":"3d1804eb8df0a19e00936722d7d55e99e0d04122b7e9e2e9505ea59b66387cb9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    threshold=0; limit=0; memory=[]; disk=[]; size=0; mode='memory'; state='idle'; out=[]\n    for e in events:\n        if e[0]=='open':\n            threshold=e[1]; limit=e[2]; memory=[]; disk=[]; size=0; mode='memory'; state='capturing'\n        elif e[0]=='append':\n            if state!='capturing': continue\n            chunk=list(e[1])\n            if size+len(chunk)>limit:\n                state='overflow'; memory=[]; disk=[]; continue\n            if mode=='memory' and size+len(chunk)>threshold:\n                disk=list(memory); memory=[]; mode='disk'\n            if mode=='disk': disk.extend(chunk)\n            else: memory.extend(chunk)\n            size+=len(chunk)\n        elif e[0]=='seal':\n            if state=='capturing': state='sealed'\n        elif e[0]=='fail_disk':\n            if mode=='disk': state='io-error'; memory=[]; disk=[]\n        elif e[0]=='replay':\n            if state!='sealed': out.append(state); continue\n            out.append(list(disk if mode=='disk' else memory))\n    return [out,mode]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([]), [[],'memory'])\ncheck('1', solve([('open',3,8),('append',[N,N+1]),('append',[N+2]),('seal',),('replay',)]), [[[N,N+1,N+2]],'memory'])\ncheck('2', solve([('open',2,8),('append',[N,N+1]),('append',[N+2,N+3]),('append',[N+4]),('seal',),('replay',)]), [[[N,N+1,N+2,N+3,N+4]],'disk'])\ncheck('3', solve([('open',2,3),('append',[N,N+1]),('append',[N+2]),('append',[N+3]),('seal',),('replay',)]), [['overflow'],'disk'])\ncheck('4', solve([('open',0,4),('append',[N]),('fail_disk',),('seal',),('replay',),('open',4,4),('append',[N+1]),('seal',),('replay',)]), [['io-error',[N+1]],'memory'])\ncheck('5', solve([('open',2,2),('append',[N]),('replay',),('seal',),('append',[N+1]),('replay',)]), [['capturing',[N]],'memory'])\ncheck('6', solve([('open',0,0),('append',[]),('seal',),('replay',)]), [[[]],'memory'])\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-retry-spool-replay-store","generated_at":"2026-09-29T14:41:54.320954+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 disk if mode=='disk' else memory.","root_cause":"Replay store violates retry transition semantics","sha256":"523b6e9c0f1f59acf4be1f69d23c0585a60247acb74a6690c945a8dbf64e46cb","title":"Bounded body spooling for replay: Replay store violates retry transition semantics · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.355,"exit_code":1,"observations":[{"actual":[[],"memory"],"check":"0","expected":[[],"memory"],"passed":true},{"actual":[[[]],"memory"],"check":"1","expected":[[[1,2,3]],"memory"],"passed":false},{"actual":[[[1,2,3,4,5]],"disk"],"check":"2","expected":[[[1,2,3,4,5]],"disk"],"passed":true},{"actual":[["overflow"],"disk"],"check":"3","expected":[["overflow"],"disk"],"passed":true},{"actual":[["io-error",[]],"memory"],"check":"4","expected":[["io-error",[2]],"memory"],"passed":false},{"actual":[["capturing",[]],"memory"],"check":"5","expected":[["capturing",[1]],"memory"],"passed":false},{"actual":[[[]],"memory"],"check":"6","expected":[[[]],"memory"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [[], \"memory\"], \"expected\": [[], \"memory\"], \"passed\": true}, {\"check\": \"1\", \"actual\": [[[]], \"memory\"], \"expected\": [[[1, 2, 3]], \"memory\"], \"passed\": false}, {\"check\": \"2\", \"actual\": [[[1, 2, 3, 4, 5]], \"disk\"], \"expected\": [[[1, 2, 3, 4, 5]], \"disk\"], \"passed\": true}, {\"check\": \"3\", \"actual\": [[\"overflow\"], \"disk\"], \"expected\": [[\"overflow\"], \"disk\"], \"passed\": true}, {\"check\": \"4\", \"actual\": [[\"io-error\", []], \"memory\"], \"expected\": [[\"io-error\", [2]], \"memory\"], \"passed\": false}, {\"check\": \"5\", \"actual\": [[\"capturing\", []], \"memory\"], \"expected\": [[\"capturing\", [1]], \"memory\"], \"passed\": false}, {\"check\": \"6\", \"actual\": [[[]], \"memory\"], \"expected\": [[[]], \"memory\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.743,"exit_code":1,"observations":[{"actual":[[],"memory"],"check":"0","expected":[[],"memory"],"passed":true},{"actual":[[[1,2,3]],"memory"],"check":"1","expected":[[[1,2,3]],"memory"],"passed":true},{"actual":[[[]],"disk"],"check":"2","expected":[[[1,2,3,4,5]],"disk"],"passed":false},{"actual":[["overflow"],"disk"],"check":"3","expected":[["overflow"],"disk"],"passed":true},{"actual":[["io-error",[2]],"memory"],"check":"4","expected":[["io-error",[2]],"memory"],"passed":true},{"actual":[["capturing",[1]],"memory"],"check":"5","expected":[["capturing",[1]],"memory"],"passed":true},{"actual":[[[]],"memory"],"check":"6","expected":[[[]],"memory"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [[], \"memory\"], \"expected\": [[], \"memory\"], \"passed\": true}, {\"check\": \"1\", \"actual\": [[[1, 2, 3]], \"memory\"], \"expected\": [[[1, 2, 3]], \"memory\"], \"passed\": true}, {\"check\": \"2\", \"actual\": [[[]], \"disk\"], \"expected\": [[[1, 2, 3, 4, 5]], \"disk\"], \"passed\": false}, {\"check\": \"3\", \"actual\": [[\"overflow\"], \"disk\"], \"expected\": [[\"overflow\"], \"disk\"], \"passed\": true}, {\"check\": \"4\", \"actual\": [[\"io-error\", [2]], \"memory\"], \"expected\": [[\"io-error\", [2]], \"memory\"], \"passed\": true}, {\"check\": \"5\", \"actual\": [[\"capturing\", [1]], \"memory\"], \"expected\": [[\"capturing\", [1]], \"memory\"], \"passed\": true}, {\"check\": \"6\", \"actual\": [[[]], \"memory\"], \"expected\": [[[]], \"memory\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.597,"exit_code":0,"observations":[{"actual":[[],"memory"],"check":"0","expected":[[],"memory"],"passed":true},{"actual":[[[1,2,3]],"memory"],"check":"1","expected":[[[1,2,3]],"memory"],"passed":true},{"actual":[[[1,2,3,4,5]],"disk"],"check":"2","expected":[[[1,2,3,4,5]],"disk"],"passed":true},{"actual":[["overflow"],"disk"],"check":"3","expected":[["overflow"],"disk"],"passed":true},{"actual":[["io-error",[2]],"memory"],"check":"4","expected":[["io-error",[2]],"memory"],"passed":true},{"actual":[["capturing",[1]],"memory"],"check":"5","expected":[["capturing",[1]],"memory"],"passed":true},{"actual":[[[]],"memory"],"check":"6","expected":[[[]],"memory"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [[], \"memory\"], \"expected\": [[], \"memory\"], \"passed\": true}, {\"check\": \"1\", \"actual\": [[[1, 2, 3]], \"memory\"], \"expected\": [[[1, 2, 3]], \"memory\"], \"passed\": true}, {\"check\": \"2\", \"actual\": [[[1, 2, 3, 4, 5]], \"disk\"], \"expected\": [[[1, 2, 3, 4, 5]], \"disk\"], \"passed\": true}, {\"check\": \"3\", \"actual\": [[\"overflow\"], \"disk\"], \"expected\": [[\"overflow\"], \"disk\"], \"passed\": true}, {\"check\": \"4\", \"actual\": [[\"io-error\", [2]], \"memory\"], \"expected\": [[\"io-error\", [2]], \"memory\"], \"passed\": true}, {\"check\": \"5\", \"actual\": [[\"capturing\", [1]], \"memory\"], \"expected\": [[\"capturing\", [1]], \"memory\"], \"passed\": true}, {\"check\": \"6\", \"actual\": [[[]], \"memory\"], \"expected\": [[[]], \"memory\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}