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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| range-member-empty-reject fixture 0 | ['0-1'] | None | Failed |
| range-member-empty-reject fixture 1 | ['0-1'] | None | Failed |
| range-member-empty-reject fixture 2 | [] | None | Failed |
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| range-member-empty-reject fixture 0 | ['0-1', ''] | None | Failed |
| range-member-empty-reject fixture 1 | ['', '0-1'] | None | Failed |
| range-member-empty-reject fixture 2 | None | None | Passed |
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| range-member-empty-reject fixture 0 | None | None | Passed |
| range-member-empty-reject fixture 1 | None | None | Passed |
| range-member-empty-reject fixture 2 | None | None | Passed |
| 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