FAILURE MAP
← Case archive

FA-26646 / HTTP ranges / Open access

An empty list member invalidates this strict Range parser · case 01

An empty list member invalidates this strict Range parser.

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

ROOT CAUSE

The range-member-empty-reject decision uses return [m.strip() for m in members if m.strip()].

VERIFIED REPAIR

Apply the bounded decision exactly: return [m.strip() for m in members] if members and all(m.strip() for m in members) else None

Unsuccessful approach: The partial repair uses return [m.strip() for m in members] if members else None, which still violates the stated contract.

Case contract

Already comma-split strings are trimmed; any empty member rejects the whole field with None. Otherwise return trimmed members, preserving order. Empty list rejects.

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(members):
    return [m.strip() for m in members if m.strip()]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('range-member-empty-reject fixture 0', solve( ["0-"+str(N),""]), None)
check('range-member-empty-reject fixture 1', solve([" ","0-1"]), None)
check('range-member-empty-reject fixture 2', solve([]), None)
check('range-member-empty-reject fixture 3', solve([" 0-1 "]), ["0-1"])
check('range-member-empty-reject fixture 4', solve(["0-1","2-3"]), ["0-1","2-3"])
check('range-member-empty-reject fixture 5', solve(["-"+str(N)]), ["-"+str(N)])
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
range-member-empty-reject fixture 0['0-1']NoneFailed
range-member-empty-reject fixture 1['0-1']NoneFailed
range-member-empty-reject fixture 2[]NoneFailed
range-member-empty-reject fixture 3['0-1']['0-1']Passed
range-member-empty-reject fixture 4['0-1', '2-3']['0-1', '2-3']Passed
range-member-empty-reject fixture 5['-1']['-1']Passed

SHA-256 / a84dad63d00bea6fd5bcf4649638b6afa43d459c0f7c68299146814aa1a1ea66

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(members):
    return [m.strip() for m in members] if members else None
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('range-member-empty-reject fixture 0', solve( ["0-"+str(N),""]), None)
check('range-member-empty-reject fixture 1', solve([" ","0-1"]), None)
check('range-member-empty-reject fixture 2', solve([]), None)
check('range-member-empty-reject fixture 3', solve([" 0-1 "]), ["0-1"])
check('range-member-empty-reject fixture 4', solve(["0-1","2-3"]), ["0-1","2-3"])
check('range-member-empty-reject fixture 5', solve(["-"+str(N)]), ["-"+str(N)])
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
range-member-empty-reject fixture 0['0-1', '']NoneFailed
range-member-empty-reject fixture 1['', '0-1']NoneFailed
range-member-empty-reject fixture 2NoneNonePassed
range-member-empty-reject fixture 3['0-1']['0-1']Passed
range-member-empty-reject fixture 4['0-1', '2-3']['0-1', '2-3']Passed
range-member-empty-reject fixture 5['-1']['-1']Passed

SHA-256 / 6d2631bd2c7c2a659fa6770916e6984b8c6f7866a9a7b55af09ad55d370201a2

3 / The verified repair

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

N = 1
observations = []
def solve(members):
    return [m.strip() for m in members] if members and all(m.strip() for m in members) else None
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('range-member-empty-reject fixture 0', solve( ["0-"+str(N),""]), None)
check('range-member-empty-reject fixture 1', solve([" ","0-1"]), None)
check('range-member-empty-reject fixture 2', solve([]), None)
check('range-member-empty-reject fixture 3', solve([" 0-1 "]), ["0-1"])
check('range-member-empty-reject fixture 4', solve(["0-1","2-3"]), ["0-1","2-3"])
check('range-member-empty-reject fixture 5', solve(["-"+str(N)]), ["-"+str(N)])
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
range-member-empty-reject fixture 0NoneNonePassed
range-member-empty-reject fixture 1NoneNonePassed
range-member-empty-reject fixture 2NoneNonePassed
range-member-empty-reject fixture 3['0-1']['0-1']Passed
range-member-empty-reject fixture 4['0-1', '2-3']['0-1', '2-3']Passed
range-member-empty-reject fixture 5['-1']['-1']Passed

SHA-256 / a173d3c0058a05ba18f2f9f26a488a6fae8374d16d28844b562bcbe04ef83707

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

Case digest / 6cda23a84eae89a345ff25db094d2d991fbda351cf2a35cb5575ecaf83f722c1