FAILURE MAP
← Case archive

FA-46656 / Bounded deques / Open access

Deque iterator ignores the requested batch ceiling · case 01

Deque iterator ignores the requested batch ceiling.

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

ROOT CAUSE

Deque iterator ignores the requested batch ceiling.

VERIFIED REPAIR

Restore the documented batch ceiling invariant in iterator-batch.

Unsuccessful approach: The partial repair still applies the incorrect transition to an admitted boundary or multi-element case.

Case contract

A fail-fast deque iterator tracks consumed logical count, captured structural epoch and traversal direction. Read at most limit elements; stale iterators emit no items and preserve position.

Why this case matters

Controlled bounded deque implementation model with explicit storage and lifecycle observations.

1 / The failure

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

N = 1
observations = []
def solve(x):
    a,pos,limit,saved,current,reverse=x
    if saved!=current:return ['stale',pos,[],saved]
    remaining=max(0,len(a)-pos)
    count=remaining
    sequence=a[::-1] if reverse else a
    values=sequence[pos:pos+count]
    next_pos=pos+count
    return ['ok',next_pos,values,saved]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([[N,N+1,N+2,N+3],1,2,3,3,False]), {1: ['ok', 3, [2, 3], 3], 2: ['ok', 3, [3, 4], 3], 3: ['ok', 3, [4, 5], 3], 4: ['ok', 3, [5, 6], 3], 5: ['ok', 3, [6, 7], 3]}[N])
check('1', solve([[N,N+1,N+2],0,2,2,2,True]), {1: ['ok', 2, [3, 2], 2], 2: ['ok', 2, [4, 3], 2], 3: ['ok', 2, [5, 4], 2], 4: ['ok', 2, [6, 5], 2], 5: ['ok', 2, [7, 6], 2]}[N])
check('2', solve([[N,N+1],1,5,4,4,False]), {1: ['ok', 2, [2], 4], 2: ['ok', 2, [3], 4], 3: ['ok', 2, [4], 4], 4: ['ok', 2, [5], 4], 5: ['ok', 2, [6], 4]}[N])
check('3', solve([[N],0,3,1,2,False]), {1: ['stale', 0, [], 1], 2: ['stale', 0, [], 1], 3: ['stale', 0, [], 1], 4: ['stale', 0, [], 1], 5: ['stale', 0, [], 1]}[N])
check('4', solve([[],0,2,0,0,True]), {1: ['ok', 0, [], 0], 2: ['ok', 0, [], 0], 3: ['ok', 0, [], 0], 4: ['ok', 0, [], 0], 5: ['ok', 0, [], 0]}[N])
check('5', solve([[N,N+1],1,0,5,5,True]), {1: ['ok', 1, [], 5], 2: ['ok', 1, [], 5], 3: ['ok', 1, [], 5], 4: ['ok', 1, [], 5], 5: ['ok', 1, [], 5]}[N])
check('6', solve([[N,N+1],0,1,3,2,False]), {1: ['stale', 0, [], 3], 2: ['stale', 0, [], 3], 3: ['stale', 0, [], 3], 4: ['stale', 0, [], 3], 5: ['stale', 0, [], 3]}[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
0['ok', 4, [2, 3, 4], 3]['ok', 3, [2, 3], 3]Failed
1['ok', 3, [3, 2, 1], 2]['ok', 2, [3, 2], 2]Failed
2['ok', 2, [2], 4]['ok', 2, [2], 4]Passed
3['stale', 0, [], 1]['stale', 0, [], 1]Passed
4['ok', 0, [], 0]['ok', 0, [], 0]Passed
5['ok', 2, [1], 5]['ok', 1, [], 5]Failed
6['stale', 0, [], 3]['stale', 0, [], 3]Passed

SHA-256 / a10460f02aadd042f465f99a7ab960d062c6390a5cc8339a6c213a43cfb60d47

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    a,pos,limit,saved,current,reverse=x
    if saved!=current:return ['stale',pos,[],saved]
    remaining=max(0,len(a)-pos)
    count=0 if limit==0 else remaining
    sequence=a[::-1] if reverse else a
    values=sequence[pos:pos+count]
    next_pos=pos+count
    return ['ok',next_pos,values,saved]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([[N,N+1,N+2,N+3],1,2,3,3,False]), {1: ['ok', 3, [2, 3], 3], 2: ['ok', 3, [3, 4], 3], 3: ['ok', 3, [4, 5], 3], 4: ['ok', 3, [5, 6], 3], 5: ['ok', 3, [6, 7], 3]}[N])
check('1', solve([[N,N+1,N+2],0,2,2,2,True]), {1: ['ok', 2, [3, 2], 2], 2: ['ok', 2, [4, 3], 2], 3: ['ok', 2, [5, 4], 2], 4: ['ok', 2, [6, 5], 2], 5: ['ok', 2, [7, 6], 2]}[N])
check('2', solve([[N,N+1],1,5,4,4,False]), {1: ['ok', 2, [2], 4], 2: ['ok', 2, [3], 4], 3: ['ok', 2, [4], 4], 4: ['ok', 2, [5], 4], 5: ['ok', 2, [6], 4]}[N])
check('3', solve([[N],0,3,1,2,False]), {1: ['stale', 0, [], 1], 2: ['stale', 0, [], 1], 3: ['stale', 0, [], 1], 4: ['stale', 0, [], 1], 5: ['stale', 0, [], 1]}[N])
check('4', solve([[],0,2,0,0,True]), {1: ['ok', 0, [], 0], 2: ['ok', 0, [], 0], 3: ['ok', 0, [], 0], 4: ['ok', 0, [], 0], 5: ['ok', 0, [], 0]}[N])
check('5', solve([[N,N+1],1,0,5,5,True]), {1: ['ok', 1, [], 5], 2: ['ok', 1, [], 5], 3: ['ok', 1, [], 5], 4: ['ok', 1, [], 5], 5: ['ok', 1, [], 5]}[N])
check('6', solve([[N,N+1],0,1,3,2,False]), {1: ['stale', 0, [], 3], 2: ['stale', 0, [], 3], 3: ['stale', 0, [], 3], 4: ['stale', 0, [], 3], 5: ['stale', 0, [], 3]}[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
0['ok', 4, [2, 3, 4], 3]['ok', 3, [2, 3], 3]Failed
1['ok', 3, [3, 2, 1], 2]['ok', 2, [3, 2], 2]Failed
2['ok', 2, [2], 4]['ok', 2, [2], 4]Passed
3['stale', 0, [], 1]['stale', 0, [], 1]Passed
4['ok', 0, [], 0]['ok', 0, [], 0]Passed
5['ok', 1, [], 5]['ok', 1, [], 5]Passed
6['stale', 0, [], 3]['stale', 0, [], 3]Passed

SHA-256 / d4b98a94e6923e0a584c8c269615c47693f8034e36de21febcfd0f9296c7a99a

3 / The verified repair

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

N = 1
observations = []
def solve(x):
    a,pos,limit,saved,current,reverse=x
    if saved!=current:return ['stale',pos,[],saved]
    remaining=max(0,len(a)-pos)
    count=min(limit,remaining)
    sequence=a[::-1] if reverse else a
    values=sequence[pos:pos+count]
    next_pos=pos+count
    return ['ok',next_pos,values,saved]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('0', solve([[N,N+1,N+2,N+3],1,2,3,3,False]), {1: ['ok', 3, [2, 3], 3], 2: ['ok', 3, [3, 4], 3], 3: ['ok', 3, [4, 5], 3], 4: ['ok', 3, [5, 6], 3], 5: ['ok', 3, [6, 7], 3]}[N])
check('1', solve([[N,N+1,N+2],0,2,2,2,True]), {1: ['ok', 2, [3, 2], 2], 2: ['ok', 2, [4, 3], 2], 3: ['ok', 2, [5, 4], 2], 4: ['ok', 2, [6, 5], 2], 5: ['ok', 2, [7, 6], 2]}[N])
check('2', solve([[N,N+1],1,5,4,4,False]), {1: ['ok', 2, [2], 4], 2: ['ok', 2, [3], 4], 3: ['ok', 2, [4], 4], 4: ['ok', 2, [5], 4], 5: ['ok', 2, [6], 4]}[N])
check('3', solve([[N],0,3,1,2,False]), {1: ['stale', 0, [], 1], 2: ['stale', 0, [], 1], 3: ['stale', 0, [], 1], 4: ['stale', 0, [], 1], 5: ['stale', 0, [], 1]}[N])
check('4', solve([[],0,2,0,0,True]), {1: ['ok', 0, [], 0], 2: ['ok', 0, [], 0], 3: ['ok', 0, [], 0], 4: ['ok', 0, [], 0], 5: ['ok', 0, [], 0]}[N])
check('5', solve([[N,N+1],1,0,5,5,True]), {1: ['ok', 1, [], 5], 2: ['ok', 1, [], 5], 3: ['ok', 1, [], 5], 4: ['ok', 1, [], 5], 5: ['ok', 1, [], 5]}[N])
check('6', solve([[N,N+1],0,1,3,2,False]), {1: ['stale', 0, [], 3], 2: ['stale', 0, [], 3], 3: ['stale', 0, [], 3], 4: ['stale', 0, [], 3], 5: ['stale', 0, [], 3]}[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
0['ok', 3, [2, 3], 3]['ok', 3, [2, 3], 3]Passed
1['ok', 2, [3, 2], 2]['ok', 2, [3, 2], 2]Passed
2['ok', 2, [2], 4]['ok', 2, [2], 4]Passed
3['stale', 0, [], 1]['stale', 0, [], 1]Passed
4['ok', 0, [], 0]['ok', 0, [], 0]Passed
5['ok', 1, [], 5]['ok', 1, [], 5]Passed
6['stale', 0, [], 3]['stale', 0, [], 3]Passed

SHA-256 / 8df25ac41577cafa3cbc155288b37068a18d0629d53c7c9caf1961c097a09b0c

Verification & scope

Offline finite deterministic model; no claim of production implementation or concurrent memory-model conformance. 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:44:34.167738+00:00.

Case digest / 830f77f507c71807a2939dd095c6dfb5c6fdac5ea66f8df672a46d8474e1bcdf