FAILURE MAP
← Case archive

FA-29721 / HTTP retries / Open access

Retry after consumer-visible response delivery: A partially exposed response is not terminally sealed · case 01

A partially exposed response is not terminally sealed

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

ROOT CAUSE

A partially exposed response is not terminally sealed

VERIFIED REPAIR

Restore the specified transition terminal=True out.append.

Unsuccessful approach: The attempted repair changes the faulty site to terminal=delivered>1 out.append but still violates a regression oracle.

Case contract

begin starts an attempt only while nonterminal, headers records a status, deliver(bytes) records irreversible delivery, fail allows retry only before any delivered bytes. A zero-byte delivery is reversible. finish terminally succeeds. cancel terminally cancels. New attempts reset their local status but never erase already exposed data. Return retry decisions and exposed byte count.

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):
    active=False; delivered=0; status=None; terminal=False; out=[]
    for e in events:
        if e[0]=='begin':
            if terminal: out.append('terminal'); continue
            active=True
            status=None
        elif e[0]=='headers' and active:
            status=e[1]
        elif e[0]=='deliver' and active:
            delivered+=e[1]
        elif e[0]=='fail':
            if terminal: out.append('terminal'); continue
            if not active: out.append('inactive'); continue
            active=False
            if delivered>0:
                terminal=False
                out.append(['partial',status])
            else: out.append(['retry',status])
        elif e[0]=='finish' and active:
            terminal=True; active=False; out.append('success')
        elif e[0]=='cancel':
            terminal=True; active=False; out.append('cancelled')
    return [out,delivered]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([]), [[],0])
check('1', solve([('fail',)]), [['inactive'],0])
check('2', solve([('begin',),('headers',503),('deliver',0),('fail',),('fail',),('begin',),('fail',)]), [[['retry',503],'inactive',['retry',None]],0])
check('3', solve([('begin',),('headers',200),('deliver',1),('deliver',0),('fail',),('begin',)]), [[['partial',200],'terminal'],1])
check('4', solve([('begin',),('headers',502),('deliver',N+2),('deliver',2),('fail',)]), [[['partial',502]],N+4])
check('5', solve([('begin',),('finish',),('begin',),('fail',)]), [['success','terminal','terminal'],0])
check('6', solve([('begin',),('cancel',),('begin',)]), [['cancelled','terminal'],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 fixtureActualExpectedOutcome
0[[], 0][[], 0]Passed
1[['inactive'], 0][['inactive'], 0]Passed
2[[['retry', 503], 'inactive', ['retry', None]], 0][[['retry', 503], 'inactive', ['retry', None]], 0]Passed
3[[['partial', 200]], 1][[['partial', 200], 'terminal'], 1]Failed
4[[['partial', 502]], 5][[['partial', 502]], 5]Passed
5[['success', 'terminal', 'terminal'], 0][['success', 'terminal', 'terminal'], 0]Passed
6[['cancelled', 'terminal'], 0][['cancelled', 'terminal'], 0]Passed

SHA-256 / b33593edb49d447a52aa06b6ca5ea542e0c410ff5fc7874fcd2c211c1fe15f05

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(events):
    active=False; delivered=0; status=None; terminal=False; out=[]
    for e in events:
        if e[0]=='begin':
            if terminal: out.append('terminal'); continue
            active=True
            status=None
        elif e[0]=='headers' and active:
            status=e[1]
        elif e[0]=='deliver' and active:
            delivered+=e[1]
        elif e[0]=='fail':
            if terminal: out.append('terminal'); continue
            if not active: out.append('inactive'); continue
            active=False
            if delivered>0:
                terminal=delivered>1
                out.append(['partial',status])
            else: out.append(['retry',status])
        elif e[0]=='finish' and active:
            terminal=True; active=False; out.append('success')
        elif e[0]=='cancel':
            terminal=True; active=False; out.append('cancelled')
    return [out,delivered]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([]), [[],0])
check('1', solve([('fail',)]), [['inactive'],0])
check('2', solve([('begin',),('headers',503),('deliver',0),('fail',),('fail',),('begin',),('fail',)]), [[['retry',503],'inactive',['retry',None]],0])
check('3', solve([('begin',),('headers',200),('deliver',1),('deliver',0),('fail',),('begin',)]), [[['partial',200],'terminal'],1])
check('4', solve([('begin',),('headers',502),('deliver',N+2),('deliver',2),('fail',)]), [[['partial',502]],N+4])
check('5', solve([('begin',),('finish',),('begin',),('fail',)]), [['success','terminal','terminal'],0])
check('6', solve([('begin',),('cancel',),('begin',)]), [['cancelled','terminal'],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 fixtureActualExpectedOutcome
0[[], 0][[], 0]Passed
1[['inactive'], 0][['inactive'], 0]Passed
2[[['retry', 503], 'inactive', ['retry', None]], 0][[['retry', 503], 'inactive', ['retry', None]], 0]Passed
3[[['partial', 200]], 1][[['partial', 200], 'terminal'], 1]Failed
4[[['partial', 502]], 5][[['partial', 502]], 5]Passed
5[['success', 'terminal', 'terminal'], 0][['success', 'terminal', 'terminal'], 0]Passed
6[['cancelled', 'terminal'], 0][['cancelled', 'terminal'], 0]Passed

SHA-256 / c0c04296f2c5cf0fc2dad866af838ca5508785f50aaddc68c285add79e79a3f5

3 / The verified repair

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

N = 1
observations = []
def solve(events):
    active=False; delivered=0; status=None; terminal=False; out=[]
    for e in events:
        if e[0]=='begin':
            if terminal: out.append('terminal'); continue
            active=True
            status=None
        elif e[0]=='headers' and active:
            status=e[1]
        elif e[0]=='deliver' and active:
            delivered+=e[1]
        elif e[0]=='fail':
            if terminal: out.append('terminal'); continue
            if not active: out.append('inactive'); continue
            active=False
            if delivered>0:
                terminal=True
                out.append(['partial',status])
            else: out.append(['retry',status])
        elif e[0]=='finish' and active:
            terminal=True; active=False; out.append('success')
        elif e[0]=='cancel':
            terminal=True; active=False; out.append('cancelled')
    return [out,delivered]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([]), [[],0])
check('1', solve([('fail',)]), [['inactive'],0])
check('2', solve([('begin',),('headers',503),('deliver',0),('fail',),('fail',),('begin',),('fail',)]), [[['retry',503],'inactive',['retry',None]],0])
check('3', solve([('begin',),('headers',200),('deliver',1),('deliver',0),('fail',),('begin',)]), [[['partial',200],'terminal'],1])
check('4', solve([('begin',),('headers',502),('deliver',N+2),('deliver',2),('fail',)]), [[['partial',502]],N+4])
check('5', solve([('begin',),('finish',),('begin',),('fail',)]), [['success','terminal','terminal'],0])
check('6', solve([('begin',),('cancel',),('begin',)]), [['cancelled','terminal'],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 fixtureActualExpectedOutcome
0[[], 0][[], 0]Passed
1[['inactive'], 0][['inactive'], 0]Passed
2[[['retry', 503], 'inactive', ['retry', None]], 0][[['retry', 503], 'inactive', ['retry', None]], 0]Passed
3[[['partial', 200], 'terminal'], 1][[['partial', 200], 'terminal'], 1]Passed
4[[['partial', 502]], 5][[['partial', 502]], 5]Passed
5[['success', 'terminal', 'terminal'], 0][['success', 'terminal', 'terminal'], 0]Passed
6[['cancelled', 'terminal'], 0][['cancelled', 'terminal'], 0]Passed

SHA-256 / 364ede61dc03da887ab908f371923b3dd15510b1408c40eef135c5261cb33632

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:45.899208+00:00.

Case digest / bfeab42fe22dd206e075f2bf8e713050041efc040060e7b075595626e7214023