FA-30096 / HTTP retries / Open access
Failed response disposal and pool eligibility: Remaining length violates retry transition semantics · case 01
Remaining length violates retry transition semantics
ROOT CAUSE
Remaining length violates retry transition semantics
VERIFIED REPAIR
Restore the specified transition remaining=e[1].
Unsuccessful approach: The attempted repair changes the faulty site to remaining=max(0,e[1]-1) 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=0; 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 | [0, 0, 'busy', 'pooled'] | [2, 2, 'busy', 'pooled'] | Failed |
| 2 | ['closed', 'unframed'] | ['closed', 'unread'] | Failed |
| 3 | [0, 'pooled'] | [1, 'discard'] | Failed |
| 4 | ['unframed', 'pooled'] | ['unframed', 'pooled'] | Passed |
| 5 | ['discard', 'pooled'] | ['discard', 'pooled'] | Passed |
| 6 | ['unframed'] | ['unframed'] | Passed |
| 7 | [0] | [0] | Passed |
SHA-256 / 4b970c4734f72858bcd57b92981b84ac1e69752c5d7afd73befbdb6400c951ca
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=max(0,e[1]-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, 1, 'busy', 'pooled'] | [2, 2, 'busy', 'pooled'] | Failed |
| 2 | ['closed', 'unframed'] | ['closed', 'unread'] | Failed |
| 3 | [0, 'pooled'] | [1, 'discard'] | Failed |
| 4 | ['unframed', 'pooled'] | ['unframed', 'pooled'] | Passed |
| 5 | ['discard', 'pooled'] | ['discard', 'pooled'] | Passed |
| 6 | ['unframed'] | ['unframed'] | Passed |
| 7 | [0] | [0] | Passed |
SHA-256 / df0480568f03f727d817d564d5296b755a0e7a900e01ef52b61cc261067495ba
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.615877+00:00.
Case digest / d516e177b4fb62dff9a50ae74e6fbe559bc73b09450c9a8b6d1c949e7c1bb7d6