FAILURE MAP
← Case archive

FA-29581 / HTTP retries / Open access

Retry reconciliation with a server receipt: Retry receipts collide across logical operation keys · case 01

Retry receipts collide across logical operation keys

Verified by executionVariant 1 · 6 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Retry receipts collide across logical operation keys

VERIFIED REPAIR

Restore the specified transition key,body=e[1],e[2].

Unsuccessful approach: The attempted repair changes the faulty site to key,body="global",e[2] but still violates a regression oracle.

Case contract

submit(key,body) returns new for absent key, pending for matching in-flight key, conflict for a changed body, and cached(value) for a completed matching key. commit(key,value) commits only existing pending entries. forget removes a receipt. Return decisions and receipt table.

Why this case matters

Offline deterministic model of HTTP request retries.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(events):
    receipts={}; out=[]
    for e in events:
        if e[0]=='submit':
            key,body=str(e[2]),e[2]
            if key not in receipts:
                receipts[key]=[body,'pending',None]
                out.append('new')
            elif receipts[key][0]!=body:
                out.append('conflict')
            elif receipts[key][1]=='pending':
                out.append('pending')
            else:
                out.append(['cached',receipts[key][2]])
        elif e[0]=='commit':
            if e[1] in receipts and receipts[e[1]][1]=='pending':
                receipts[e[1]][1]='done'
                receipts[e[1]][2]=e[2]
        elif e[0]=='forget':
            receipts.pop(e[1],None)
    return [out,receipts]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([]), [[],{}])
check('1', solve([('submit','a',N),('submit','a',N)]), [['new','pending'],{'a':[N,'pending',None]}])
check('2', solve([('submit','a',N),('submit','b',N),('submit','a',N+1)]), [['new','new','conflict'],{'a':[N,'pending',None],'b':[N,'pending',None]}])
check('3', solve([('submit','a',N),('commit','a',N+5),('commit','a',99),('submit','a',N),('submit','a',N+1)]), [['new',['cached',N+5],'conflict'],{'a':[N,'done',N+5]}])
check('4', solve([('commit','absent',N),('forget','absent')]), [[],{}])
check('5', solve([('submit','a',N),('submit','b',N+1),('forget','a'),('submit','a',N+2)]), [['new','new','new'],{'b':[N+1,'pending',None],'a':[N+2,'pending',None]}])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
0[[], {}][[], {}]Passed
1[['new', 'pending'], {'1': [1, 'pending', None]}][['new', 'pending'], {'a': [1, 'pending', None]}]Failed
2[['new', 'pending', 'new'], {'1': [1, 'pending', None], '2': [2, 'pending', None]}][['new', 'new', 'conflict'], {'a': [1, 'pending', None], 'b': [1, 'pending', None]}]Failed
3[['new', 'pending', 'new'], {'1': [1, 'pending', None], '2': [2, 'pending', None]}][['new', ['cached', 6], 'conflict'], {'a': [1, 'done', 6]}]Failed
4[[], {}][[], {}]Passed
5[['new', 'new', 'new'], {'1': [1, 'pending', None], '2': [2, 'pending', None], '3': [3, 'pending', None]}][['new', 'new', 'new'], {'a': [3, 'pending', None], 'b': [2, 'pending', None]}]Failed

SHA-256 / 1bc572b61149d5a24343e830c7a0675f74a2daf9964a0285bcca2c7501959fc6

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(events):
    receipts={}; out=[]
    for e in events:
        if e[0]=='submit':
            key,body="global",e[2]
            if key not in receipts:
                receipts[key]=[body,'pending',None]
                out.append('new')
            elif receipts[key][0]!=body:
                out.append('conflict')
            elif receipts[key][1]=='pending':
                out.append('pending')
            else:
                out.append(['cached',receipts[key][2]])
        elif e[0]=='commit':
            if e[1] in receipts and receipts[e[1]][1]=='pending':
                receipts[e[1]][1]='done'
                receipts[e[1]][2]=e[2]
        elif e[0]=='forget':
            receipts.pop(e[1],None)
    return [out,receipts]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([]), [[],{}])
check('1', solve([('submit','a',N),('submit','a',N)]), [['new','pending'],{'a':[N,'pending',None]}])
check('2', solve([('submit','a',N),('submit','b',N),('submit','a',N+1)]), [['new','new','conflict'],{'a':[N,'pending',None],'b':[N,'pending',None]}])
check('3', solve([('submit','a',N),('commit','a',N+5),('commit','a',99),('submit','a',N),('submit','a',N+1)]), [['new',['cached',N+5],'conflict'],{'a':[N,'done',N+5]}])
check('4', solve([('commit','absent',N),('forget','absent')]), [[],{}])
check('5', solve([('submit','a',N),('submit','b',N+1),('forget','a'),('submit','a',N+2)]), [['new','new','new'],{'b':[N+1,'pending',None],'a':[N+2,'pending',None]}])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
0[[], {}][[], {}]Passed
1[['new', 'pending'], {'global': [1, 'pending', None]}][['new', 'pending'], {'a': [1, 'pending', None]}]Failed
2[['new', 'pending', 'conflict'], {'global': [1, 'pending', None]}][['new', 'new', 'conflict'], {'a': [1, 'pending', None], 'b': [1, 'pending', None]}]Failed
3[['new', 'pending', 'conflict'], {'global': [1, 'pending', None]}][['new', ['cached', 6], 'conflict'], {'a': [1, 'done', 6]}]Failed
4[[], {}][[], {}]Passed
5[['new', 'conflict', 'conflict'], {'global': [1, 'pending', None]}][['new', 'new', 'new'], {'a': [3, 'pending', None], 'b': [2, 'pending', None]}]Failed

SHA-256 / fc83646dd5d4d8164e86d91cc5b6073f058373a4efe9865ab307f254f5840b5b

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(events):
    receipts={}; out=[]
    for e in events:
        if e[0]=='submit':
            key,body=e[1],e[2]
            if key not in receipts:
                receipts[key]=[body,'pending',None]
                out.append('new')
            elif receipts[key][0]!=body:
                out.append('conflict')
            elif receipts[key][1]=='pending':
                out.append('pending')
            else:
                out.append(['cached',receipts[key][2]])
        elif e[0]=='commit':
            if e[1] in receipts and receipts[e[1]][1]=='pending':
                receipts[e[1]][1]='done'
                receipts[e[1]][2]=e[2]
        elif e[0]=='forget':
            receipts.pop(e[1],None)
    return [out,receipts]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([]), [[],{}])
check('1', solve([('submit','a',N),('submit','a',N)]), [['new','pending'],{'a':[N,'pending',None]}])
check('2', solve([('submit','a',N),('submit','b',N),('submit','a',N+1)]), [['new','new','conflict'],{'a':[N,'pending',None],'b':[N,'pending',None]}])
check('3', solve([('submit','a',N),('commit','a',N+5),('commit','a',99),('submit','a',N),('submit','a',N+1)]), [['new',['cached',N+5],'conflict'],{'a':[N,'done',N+5]}])
check('4', solve([('commit','absent',N),('forget','absent')]), [[],{}])
check('5', solve([('submit','a',N),('submit','b',N+1),('forget','a'),('submit','a',N+2)]), [['new','new','new'],{'b':[N+1,'pending',None],'a':[N+2,'pending',None]}])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
0[[], {}][[], {}]Passed
1[['new', 'pending'], {'a': [1, 'pending', None]}][['new', 'pending'], {'a': [1, 'pending', None]}]Passed
2[['new', 'new', 'conflict'], {'a': [1, 'pending', None], 'b': [1, 'pending', None]}][['new', 'new', 'conflict'], {'a': [1, 'pending', None], 'b': [1, 'pending', None]}]Passed
3[['new', ['cached', 6], 'conflict'], {'a': [1, 'done', 6]}][['new', ['cached', 6], 'conflict'], {'a': [1, 'done', 6]}]Passed
4[[], {}][[], {}]Passed
5[['new', 'new', 'new'], {'a': [3, 'pending', None], 'b': [2, 'pending', None]}][['new', 'new', 'new'], {'a': [3, 'pending', None], 'b': [2, 'pending', None]}]Passed

SHA-256 / d954eef688bc7ddbed441b3968ffe7e8f2aca46edfd6335bbe8676104a62e2cb

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:41:44.540755+00:00.

Case digest / f3f97473943cadad00e09796c7c052a5c75b544f098d177337125165e1d5afcf