{"abstract":"New expiry violates retry transition semantics","category":"HTTP retries","checks":7,"contract":"put(key,body,expires) creates a pending receipt if no live receipt exists at current logical time. Existing live matching key returns pending or cached; mismatched body returns conflict. commit succeeds only for a live pending receipt. at(time) moves monotonic time forward. Expiry at now is expired. lookup(key) reports missing/pending/cached. Return outcomes. Commit appends committed or ignored to expose whether a durable receipt write occurred.","contract_signature":"events","evaluation_group":"s3-http_retries-idempotency-expiry","failed_approach":"The attempted repair changes the faulty site to if expires<0: but still violates a regression oracle.","family":"s3-http_retries-idempotency-expiry-new-expiry","id":"FA-30036","implementations":{"attempt":{"sha256":"8fe1d7557ce0343936908b08b1bbae504a1f5bcc76a7066e589d90a3eced2fd6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    now=0; records={}; out=[]\n    for e in events:\n        if e[0]=='at': now=max(now,e[1])\n        elif e[0]=='put':\n            k,body,expires=e[1:]\n            old=records.get(k)\n            if old is not None and old[1]<=now:\n                records.pop(k); old=None\n            if old is None:\n                if expires<0: out.append('expired'); continue\n                records[k]=[body,expires,False,None]; out.append('new')\n            elif old[0]!=body: out.append('conflict')\n            elif old[2]: out.append(['cached',old[3]])\n            else: out.append('pending')\n        elif e[0]=='commit':\n            old=records.get(e[1])\n            if old is not None and old[1]>now and not old[2]:\n                old[2]=True; old[3]=e[2]; out.append('committed')\n            else: out.append('ignored')\n        elif e[0]=='lookup':\n            old=records.get(e[1])\n            if old is None or old[1]<=now: out.append('missing')\n            elif old[2]: out.append(['cached',old[3]])\n            else: out.append('pending')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([]), [])\ncheck('1', solve([('lookup','x'),('put','a',N,3),('put','a',N,3),('commit','a',N+9),('commit','a',999),('lookup','a'),('put','a',N,3),('put','a',N+1,3)]), ['missing','new','pending','committed','ignored',['cached',N+9],['cached',N+9],'conflict'])\ncheck('2', solve([('at',3),('put','a',N,3),('put','b',N,2)]), ['expired','expired'])\ncheck('3', solve([('put','a',N,3),('at',3),('commit','a',99),('lookup','a'),('put','a',N+1,5),('lookup','a')]), ['new','ignored','missing','new','pending'])\ncheck('4', solve([('at',4),('put','a',N,6),('at',6),('lookup','a')]), ['new','missing'])\ncheck('5', solve([('put','a',N,2),('at',3),('at',1),('lookup','a')]), ['new','missing'])\ncheck('6', solve([('commit','absent',N),('lookup','absent')]), ['ignored','missing'])\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":"7400ec1bfb316a39e9f0e8efe6f6f1f6267d97f190ddcba252736c6ce47da904","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(events):\n    now=0; records={}; out=[]\n    for e in events:\n        if e[0]=='at': now=max(now,e[1])\n        elif e[0]=='put':\n            k,body,expires=e[1:]\n            old=records.get(k)\n            if old is not None and old[1]<=now:\n                records.pop(k); old=None\n            if old is None:\n                if expires<now: out.append('expired'); continue\n                records[k]=[body,expires,False,None]; out.append('new')\n            elif old[0]!=body: out.append('conflict')\n            elif old[2]: out.append(['cached',old[3]])\n            else: out.append('pending')\n        elif e[0]=='commit':\n            old=records.get(e[1])\n            if old is not None and old[1]>now and not old[2]:\n                old[2]=True; old[3]=e[2]; out.append('committed')\n            else: out.append('ignored')\n        elif e[0]=='lookup':\n            old=records.get(e[1])\n            if old is None or old[1]<=now: out.append('missing')\n            elif old[2]: out.append(['cached',old[3]])\n            else: out.append('pending')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('0', solve([]), [])\ncheck('1', solve([('lookup','x'),('put','a',N,3),('put','a',N,3),('commit','a',N+9),('commit','a',999),('lookup','a'),('put','a',N,3),('put','a',N+1,3)]), ['missing','new','pending','committed','ignored',['cached',N+9],['cached',N+9],'conflict'])\ncheck('2', solve([('at',3),('put','a',N,3),('put','b',N,2)]), ['expired','expired'])\ncheck('3', solve([('put','a',N,3),('at',3),('commit','a',99),('lookup','a'),('put','a',N+1,5),('lookup','a')]), ['new','ignored','missing','new','pending'])\ncheck('4', solve([('at',4),('put','a',N,6),('at',6),('lookup','a')]), ['new','missing'])\ncheck('5', solve([('put','a',N,2),('at',3),('at',1),('lookup','a')]), ['new','missing'])\ncheck('6', solve([('commit','absent',N),('lookup','absent')]), ['ignored','missing'])\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-idempotency-expiry-new-expiry","generated_at":"2026-09-29T14:41:49.170350+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Offline deterministic model of HTTP request retries.","root_cause":"New expiry violates retry transition semantics","sha256":"e27fd0e2257048f129a6334a8e624c2f10514a8fa5dbce0e8b705673ef99cd32","title":"Idempotency receipt expiry during retry: New expiry violates retry transition semantics · 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":46.647,"exit_code":1,"observations":[{"actual":[],"check":"0","expected":[],"passed":true},{"actual":["missing","new","pending","committed","ignored",["cached",10],["cached",10],"conflict"],"check":"1","expected":["missing","new","pending","committed","ignored",["cached",10],["cached",10],"conflict"],"passed":true},{"actual":["new","new"],"check":"2","expected":["expired","expired"],"passed":false},{"actual":["new","ignored","missing","new","pending"],"check":"3","expected":["new","ignored","missing","new","pending"],"passed":true},{"actual":["new","missing"],"check":"4","expected":["new","missing"],"passed":true},{"actual":["new","missing"],"check":"5","expected":["new","missing"],"passed":true},{"actual":["ignored","missing"],"check":"6","expected":["ignored","missing"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"1\", \"actual\": [\"missing\", \"new\", \"pending\", \"committed\", \"ignored\", [\"cached\", 10], [\"cached\", 10], \"conflict\"], \"expected\": [\"missing\", \"new\", \"pending\", \"committed\", \"ignored\", [\"cached\", 10], [\"cached\", 10], \"conflict\"], \"passed\": true}, {\"check\": \"2\", \"actual\": [\"new\", \"new\"], \"expected\": [\"expired\", \"expired\"], \"passed\": false}, {\"check\": \"3\", \"actual\": [\"new\", \"ignored\", \"missing\", \"new\", \"pending\"], \"expected\": [\"new\", \"ignored\", \"missing\", \"new\", \"pending\"], \"passed\": true}, {\"check\": \"4\", \"actual\": [\"new\", \"missing\"], \"expected\": [\"new\", \"missing\"], \"passed\": true}, {\"check\": \"5\", \"actual\": [\"new\", \"missing\"], \"expected\": [\"new\", \"missing\"], \"passed\": true}, {\"check\": \"6\", \"actual\": [\"ignored\", \"missing\"], \"expected\": [\"ignored\", \"missing\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.668,"exit_code":1,"observations":[{"actual":[],"check":"0","expected":[],"passed":true},{"actual":["missing","new","pending","committed","ignored",["cached",10],["cached",10],"conflict"],"check":"1","expected":["missing","new","pending","committed","ignored",["cached",10],["cached",10],"conflict"],"passed":true},{"actual":["new","expired"],"check":"2","expected":["expired","expired"],"passed":false},{"actual":["new","ignored","missing","new","pending"],"check":"3","expected":["new","ignored","missing","new","pending"],"passed":true},{"actual":["new","missing"],"check":"4","expected":["new","missing"],"passed":true},{"actual":["new","missing"],"check":"5","expected":["new","missing"],"passed":true},{"actual":["ignored","missing"],"check":"6","expected":["ignored","missing"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"0\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"1\", \"actual\": [\"missing\", \"new\", \"pending\", \"committed\", \"ignored\", [\"cached\", 10], [\"cached\", 10], \"conflict\"], \"expected\": [\"missing\", \"new\", \"pending\", \"committed\", \"ignored\", [\"cached\", 10], [\"cached\", 10], \"conflict\"], \"passed\": true}, {\"check\": \"2\", \"actual\": [\"new\", \"expired\"], \"expected\": [\"expired\", \"expired\"], \"passed\": false}, {\"check\": \"3\", \"actual\": [\"new\", \"ignored\", \"missing\", \"new\", \"pending\"], \"expected\": [\"new\", \"ignored\", \"missing\", \"new\", \"pending\"], \"passed\": true}, {\"check\": \"4\", \"actual\": [\"new\", \"missing\"], \"expected\": [\"new\", \"missing\"], \"passed\": true}, {\"check\": \"5\", \"actual\": [\"new\", \"missing\"], \"expected\": [\"new\", \"missing\"], \"passed\": true}, {\"check\": \"6\", \"actual\": [\"ignored\", \"missing\"], \"expected\": [\"ignored\", \"missing\"], \"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."}}