FAILURE MAP
← Case archive

FA-26631 / HTTP ranges / Open access

Multipart source handles remain open until every part finishes · case 01

Multipart source handles remain open until every part finishes.

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

ROOT CAUSE

The stream-release-after-last-part decision uses return "release" if completed>0 or cancelled else "retain".

VERIFIED REPAIR

Apply the bounded decision exactly: return "release" if cancelled or completed==total else "retain"

Unsuccessful approach: The partial repair uses return "release" if completed==total else "retain", which still violates the stated contract.

Case contract

Return release on cancellation or when completed equals total; otherwise retain. Valid completed in[0,total].

Why this case matters

Range responses combine representation identity, conditional requests, framing, and partial-object state.

1 / The failure

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

N = 1
observations = []
def solve(completed, total, cancelled):
    return "release" if completed>0 or cancelled else "retain"
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('stream-release-after-last-part fixture 0', solve(1,N+1,False), "retain")
check('stream-release-after-last-part fixture 1', solve(0,N,True), "release")
check('stream-release-after-last-part fixture 2', solve(N,N,False), "release")
check('stream-release-after-last-part fixture 3', solve(0,0,False), "release")
check('stream-release-after-last-part fixture 4', solve(0,N,False), "retain")
check('stream-release-after-last-part fixture 5', solve(N,N,True), "release")
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
stream-release-after-last-part fixture 0releaseretainFailed
stream-release-after-last-part fixture 1releasereleasePassed
stream-release-after-last-part fixture 2releasereleasePassed
stream-release-after-last-part fixture 3retainreleaseFailed
stream-release-after-last-part fixture 4retainretainPassed
stream-release-after-last-part fixture 5releasereleasePassed

SHA-256 / 749da6365c608f11b029e82c527d59b74aea9faac39342e17808b3a4bddda50f

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(completed, total, cancelled):
    return "release" if completed==total else "retain"
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('stream-release-after-last-part fixture 0', solve(1,N+1,False), "retain")
check('stream-release-after-last-part fixture 1', solve(0,N,True), "release")
check('stream-release-after-last-part fixture 2', solve(N,N,False), "release")
check('stream-release-after-last-part fixture 3', solve(0,0,False), "release")
check('stream-release-after-last-part fixture 4', solve(0,N,False), "retain")
check('stream-release-after-last-part fixture 5', solve(N,N,True), "release")
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
stream-release-after-last-part fixture 0retainretainPassed
stream-release-after-last-part fixture 1retainreleaseFailed
stream-release-after-last-part fixture 2releasereleasePassed
stream-release-after-last-part fixture 3releasereleasePassed
stream-release-after-last-part fixture 4retainretainPassed
stream-release-after-last-part fixture 5releasereleasePassed

SHA-256 / 38e181a4668948a8b5e6af32b5a2f0de85fac5d24e56d07ca3c23d131fbc3cc1

3 / The verified repair

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

N = 1
observations = []
def solve(completed, total, cancelled):
    return "release" if cancelled or completed==total else "retain"
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('stream-release-after-last-part fixture 0', solve(1,N+1,False), "retain")
check('stream-release-after-last-part fixture 1', solve(0,N,True), "release")
check('stream-release-after-last-part fixture 2', solve(N,N,False), "release")
check('stream-release-after-last-part fixture 3', solve(0,0,False), "release")
check('stream-release-after-last-part fixture 4', solve(0,N,False), "retain")
check('stream-release-after-last-part fixture 5', solve(N,N,True), "release")
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
stream-release-after-last-part fixture 0retainretainPassed
stream-release-after-last-part fixture 1releasereleasePassed
stream-release-after-last-part fixture 2releasereleasePassed
stream-release-after-last-part fixture 3releasereleasePassed
stream-release-after-last-part fixture 4retainretainPassed
stream-release-after-last-part fixture 5releasereleasePassed

SHA-256 / f9863e5b848710818c207c8934571986e9e1c8d1d3fbb3b19c85d374746332ff

Verification & scope

Deterministic simplified range service, with stipulated local policies and already parsed trusted inputs; not a complete HTTP implementation. 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:17.711206+00:00.

Case digest / 3978cc54508c937316f5eb061607d176aa44e2c97d37961e24cbf21c74807a89