FAILURE MAP
← Case archive

FA-26481 / HTTP ranges / Open access

A short part read prevents emission of a successful closing delimiter · case 01

A short part read prevents emission of a successful closing delimiter.

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

ROOT CAUSE

The multipart-short-read-abort decision uses return "complete".

VERIFIED REPAIR

Apply the bounded decision exactly: return "complete" if len(expected_lengths)==len(bodies) and all(len(b)==n for n,b in zip(expected_lengths,bodies)) else "abort"

Unsuccessful approach: The partial repair uses return "complete" if all(len(b)>=n for n,b in zip(expected_lengths,bodies)) else "abort", which still violates the stated contract.

Case contract

Return complete only when each part has exactly its promised ASCII byte length and the part counts match; otherwise abort. Empty part list is complete.

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(expected_lengths, bodies):
    return "complete"
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('multipart-short-read-abort fixture 0', solve([N],["x"*(N-1)]), "abort")
check('multipart-short-read-abort fixture 1', solve([N],["x"*(N+1)]), "abort")
check('multipart-short-read-abort fixture 2', solve([N],["x"*N]), "complete")
check('multipart-short-read-abort fixture 3', solve([1,1],["x"]), "abort")
check('multipart-short-read-abort fixture 4', solve([],[]), "complete")
check('multipart-short-read-abort fixture 5', solve([0],[""]), "complete")
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
multipart-short-read-abort fixture 0completeabortFailed
multipart-short-read-abort fixture 1completeabortFailed
multipart-short-read-abort fixture 2completecompletePassed
multipart-short-read-abort fixture 3completeabortFailed
multipart-short-read-abort fixture 4completecompletePassed
multipart-short-read-abort fixture 5completecompletePassed

SHA-256 / 1744a09a343cc7783439bf7054d1b2eb643d9bc7dfcac2a792586d572d7d2332

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(expected_lengths, bodies):
    return "complete" if all(len(b)>=n for n,b in zip(expected_lengths,bodies)) else "abort"
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('multipart-short-read-abort fixture 0', solve([N],["x"*(N-1)]), "abort")
check('multipart-short-read-abort fixture 1', solve([N],["x"*(N+1)]), "abort")
check('multipart-short-read-abort fixture 2', solve([N],["x"*N]), "complete")
check('multipart-short-read-abort fixture 3', solve([1,1],["x"]), "abort")
check('multipart-short-read-abort fixture 4', solve([],[]), "complete")
check('multipart-short-read-abort fixture 5', solve([0],[""]), "complete")
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
multipart-short-read-abort fixture 0abortabortPassed
multipart-short-read-abort fixture 1completeabortFailed
multipart-short-read-abort fixture 2completecompletePassed
multipart-short-read-abort fixture 3completeabortFailed
multipart-short-read-abort fixture 4completecompletePassed
multipart-short-read-abort fixture 5completecompletePassed

SHA-256 / d9176f539f6d3d2e133fa15f9d26d4321cfb48643f157989cd39b94c33ed4fae

3 / The verified repair

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

N = 1
observations = []
def solve(expected_lengths, bodies):
    return "complete" if len(expected_lengths)==len(bodies) and all(len(b)==n for n,b in zip(expected_lengths,bodies)) else "abort"
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('multipart-short-read-abort fixture 0', solve([N],["x"*(N-1)]), "abort")
check('multipart-short-read-abort fixture 1', solve([N],["x"*(N+1)]), "abort")
check('multipart-short-read-abort fixture 2', solve([N],["x"*N]), "complete")
check('multipart-short-read-abort fixture 3', solve([1,1],["x"]), "abort")
check('multipart-short-read-abort fixture 4', solve([],[]), "complete")
check('multipart-short-read-abort fixture 5', solve([0],[""]), "complete")
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
multipart-short-read-abort fixture 0abortabortPassed
multipart-short-read-abort fixture 1abortabortPassed
multipart-short-read-abort fixture 2completecompletePassed
multipart-short-read-abort fixture 3abortabortPassed
multipart-short-read-abort fixture 4completecompletePassed
multipart-short-read-abort fixture 5completecompletePassed

SHA-256 / cd861497575467c1f43fd89b8c15b0a97e5d41eb772d6231bf57fc4c473675bd

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

Case digest / 918c0bdc0f40185b1824bd19dfd1bc1a71a6abca3a8316956450a31ef67f9faf