FA-30101 / HTTP retries / Open access
Failed response disposal and pool eligibility: Response open violates retry transition semantics · case 01
Response open violates retry transition semantics
ROOT CAUSE
Response open violates retry transition semantics
VERIFIED REPAIR
Restore the specified transition closed=False; eof=False.
Unsuccessful approach: The attempted repair changes the faulty site to closed=e[1]==0; eof=False but still violates a regression oracle.
Case contract
headers(length) opens failed response with remaining bytes; read(count) drains bounded content. eof confirms framing only if no bytes remain, otherwise poisons connection. close marks response closed; release returns pooled only for closed, fully drained, EOF-confirmed unpoisoned response. abort permanently poisons current connection. new resets all connection state. Return drain amounts and release disposition.
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):
remaining=0; closed=True; eof=False; poison=False; out=[]
for e in events:
if e[0]=='new': remaining=0; closed=True; eof=False; poison=False
elif e[0]=='headers':
remaining=e[1]; closed=True; eof=False
elif e[0]=='read':
if closed: out.append('closed'); continue
n=min(remaining,e[1]); remaining-=n; out.append(n)
elif e[0]=='eof':
if remaining!=0: poison=True
else: eof=True
elif e[0]=='close': closed=True
elif e[0]=='abort': poison=True; closed=True
elif e[0]=='release':
if poison: out.append('discard')
elif not closed: out.append('busy')
elif remaining!=0: out.append('unread')
elif not eof: out.append('unframed')
else: out.append('pooled')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([]), [])
check('1', solve([('headers',N+3),('read',2),('read',N+9),('eof',),('release',),('close',),('release',)]), [2,N+1,'busy','pooled'])
check('2', solve([('headers',1),('close',),('read',1),('release',)]), ['closed','unread'])
check('3', solve([('headers',1),('eof',),('read',1),('close',),('release',)]), [1,'discard'])
check('4', solve([('headers',0),('close',),('release',),('eof',),('release',)]), ['unframed','pooled'])
check('5', solve([('headers',0),('eof',),('abort',),('release',),('new',),('headers',0),('eof',),('close',),('release',)]), ['discard','pooled'])
check('6', solve([('headers',0),('eof',),('close',),('headers',0),('close',),('release',)]), ['unframed'])
check('7', solve([('headers',0),('read',1)]), [0])
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 0 | [] | [] | Passed |
| 1 | ['closed', 'closed', 'discard', 'discard'] | [2, 2, 'busy', 'pooled'] | Failed |
| 2 | ['closed', 'unread'] | ['closed', 'unread'] | Passed |
| 3 | ['closed', 'discard'] | [1, 'discard'] | Failed |
| 4 | ['unframed', 'pooled'] | ['unframed', 'pooled'] | Passed |
| 5 | ['discard', 'pooled'] | ['discard', 'pooled'] | Passed |
| 6 | ['unframed'] | ['unframed'] | Passed |
| 7 | ['closed'] | [0] | Failed |
SHA-256 / fff550eed4275e9a74f99f08ec043aafab487afcd16eedc6b0d9ab1a61d912c8
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(events):
remaining=0; closed=True; eof=False; poison=False; out=[]
for e in events:
if e[0]=='new': remaining=0; closed=True; eof=False; poison=False
elif e[0]=='headers':
remaining=e[1]; closed=e[1]==0; eof=False
elif e[0]=='read':
if closed: out.append('closed'); continue
n=min(remaining,e[1]); remaining-=n; out.append(n)
elif e[0]=='eof':
if remaining!=0: poison=True
else: eof=True
elif e[0]=='close': closed=True
elif e[0]=='abort': poison=True; closed=True
elif e[0]=='release':
if poison: out.append('discard')
elif not closed: out.append('busy')
elif remaining!=0: out.append('unread')
elif not eof: out.append('unframed')
else: out.append('pooled')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([]), [])
check('1', solve([('headers',N+3),('read',2),('read',N+9),('eof',),('release',),('close',),('release',)]), [2,N+1,'busy','pooled'])
check('2', solve([('headers',1),('close',),('read',1),('release',)]), ['closed','unread'])
check('3', solve([('headers',1),('eof',),('read',1),('close',),('release',)]), [1,'discard'])
check('4', solve([('headers',0),('close',),('release',),('eof',),('release',)]), ['unframed','pooled'])
check('5', solve([('headers',0),('eof',),('abort',),('release',),('new',),('headers',0),('eof',),('close',),('release',)]), ['discard','pooled'])
check('6', solve([('headers',0),('eof',),('close',),('headers',0),('close',),('release',)]), ['unframed'])
check('7', solve([('headers',0),('read',1)]), [0])
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 0 | [] | [] | Passed |
| 1 | [2, 2, 'busy', 'pooled'] | [2, 2, 'busy', 'pooled'] | Passed |
| 2 | ['closed', 'unread'] | ['closed', 'unread'] | Passed |
| 3 | [1, 'discard'] | [1, 'discard'] | Passed |
| 4 | ['unframed', 'pooled'] | ['unframed', 'pooled'] | Passed |
| 5 | ['discard', 'pooled'] | ['discard', 'pooled'] | Passed |
| 6 | ['unframed'] | ['unframed'] | Passed |
| 7 | ['closed'] | [0] | Failed |
SHA-256 / c22f81dd6e3b89f3151a88310b35c59d618a6c0c13ec242271da521e84b87a8f
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(events):
remaining=0; closed=True; eof=False; poison=False; out=[]
for e in events:
if e[0]=='new': remaining=0; closed=True; eof=False; poison=False
elif e[0]=='headers':
remaining=e[1]; closed=False; eof=False
elif e[0]=='read':
if closed: out.append('closed'); continue
n=min(remaining,e[1]); remaining-=n; out.append(n)
elif e[0]=='eof':
if remaining!=0: poison=True
else: eof=True
elif e[0]=='close': closed=True
elif e[0]=='abort': poison=True; closed=True
elif e[0]=='release':
if poison: out.append('discard')
elif not closed: out.append('busy')
elif remaining!=0: out.append('unread')
elif not eof: out.append('unframed')
else: out.append('pooled')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([]), [])
check('1', solve([('headers',N+3),('read',2),('read',N+9),('eof',),('release',),('close',),('release',)]), [2,N+1,'busy','pooled'])
check('2', solve([('headers',1),('close',),('read',1),('release',)]), ['closed','unread'])
check('3', solve([('headers',1),('eof',),('read',1),('close',),('release',)]), [1,'discard'])
check('4', solve([('headers',0),('close',),('release',),('eof',),('release',)]), ['unframed','pooled'])
check('5', solve([('headers',0),('eof',),('abort',),('release',),('new',),('headers',0),('eof',),('close',),('release',)]), ['discard','pooled'])
check('6', solve([('headers',0),('eof',),('close',),('headers',0),('close',),('release',)]), ['unframed'])
check('7', solve([('headers',0),('read',1)]), [0])
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 0 | [] | [] | Passed |
| 1 | [2, 2, 'busy', 'pooled'] | [2, 2, 'busy', 'pooled'] | Passed |
| 2 | ['closed', 'unread'] | ['closed', 'unread'] | Passed |
| 3 | [1, 'discard'] | [1, 'discard'] | Passed |
| 4 | ['unframed', 'pooled'] | ['unframed', 'pooled'] | Passed |
| 5 | ['discard', 'pooled'] | ['discard', 'pooled'] | Passed |
| 6 | ['unframed'] | ['unframed'] | Passed |
| 7 | [0] | [0] | Passed |
SHA-256 / 7d6ae0c23afde9e09b7faa67400ad79eb262c1a595982fa49c2174f34446fdd4
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:49.640514+00:00.
Case digest / 0b2883266eba6904bd4aeb504b9e809a0af0bcbd91aa22ea594a3d8d5375e39e