FA-73506 / Rate limiter algorithms / Open access
Leaky bucket queue shaper: departure scheduled before arrival · case 01
After an idle period requests are reported as departing before they arrived.
ROOT CAUSE
Departure time ignores the arrival time and uses the next free slot only.
VERIFIED REPAIR
Depart at the later of arrival and the next free slot.
Unsuccessful approach: Only the very first request honours its arrival; later idle gaps still schedule departures in the past.
Case contract
Input {queue_cap, interval_ms, requests [t]} with nondecreasing t. Accepted requests depart one per interval: departure = max(arrival, next_free) and next_free = departure + interval. A request is accepted only while fewer than queue_cap accepted requests have a departure strictly after its arrival; otherwise it is "dropped" and changes nothing. Return each departure time or "dropped".
Why this case matters
Traffic shapers smooth bursts into a steady departure rate; the queue bound and slot arithmetic decide latency and drop behaviour.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
qcap = x['queue_cap']
I = x['interval_ms']
next_free = 0
deps = []
out = []
for t in x['requests']:
waiting = sum(1 for d in deps if d > t)
if waiting < qcap:
dep = next_free
next_free = dep + I
deps.append(dep)
out.append(dep)
else:
out.append('dropped')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 151, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1001, 2000, 2010, 5000]},
[1001, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 201]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 251, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [301, 310, 320, 330]},
[301, 401, 501, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [47, 86, 231, 429, 438, 486, 490, 650, 653, 673, 689, 793]},
[47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 152, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1002, 2000, 2010, 5000]},
[1002, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 202]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 252, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [302, 310, 320, 330]},
[302, 402, 502, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [130, 453, 459, 485, 554, 565, 613, 658, 676, 724, 814, 858]},
[130, 453, 533, 613, 693, 'dropped', 773, 'dropped', 'dropped', 853, 933, 1013]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 153, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1003, 2000, 2010, 5000]},
[1003, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 203]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 253, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [303, 310, 320, 330]},
[303, 403, 503, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [1, 48, 98, 246, 258, 261, 333, 405, 500, 646, 651, 768]},
[1, 81, 161, 246, 326, 406, 486, 'dropped', 566, 646, 726, 806]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 154, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1004, 2000, 2010, 5000]},
[1004, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 204]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 254, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [304, 310, 320, 330]},
[304, 404, 504, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [6, 206, 394, 410, 422, 469, 663, 677, 720, 726, 732, 943]},
[6, 206, 394, 474, 554, 'dropped', 663, 743, 823, 'dropped', 'dropped', 943]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 155, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1005, 2000, 2010, 5000]},
[1005, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 205]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 255, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [305, 310, 320, 330]},
[305, 405, 505, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [220, 273, 276, 356, 387, 434, 571, 612, 618, 647, 669, 777]},
[220, 300, 380, 460, 540, 'dropped', 620, 700, 'dropped', 780, 'dropped', 860]]]]
for label, args, expected in cases[N - 1]:
check(label, solve(args), expected)
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 |
|---|---|---|---|
| burst queues then drops | [0, 100, 200, 'dropped', 300, 400] | [0, 100, 200, 'dropped', 300, 400] | Passed |
| idle line departs immediately | [0, 50, 100, 150] | [1001, 2000, 2050, 5000] | Failed |
| departure instant is not waiting | [0, 100, 200, 'dropped', 300] | [0, 100, 200, 'dropped', 300] | Passed |
| dropped requests do not reserve slots | [0, 200, 'dropped', 'dropped', 400, 'dropped'] | [0, 200, 'dropped', 'dropped', 400, 'dropped'] | Passed |
| first request late | [0, 100, 200, 300] | [301, 401, 501, 'dropped'] | Failed |
| random arrivals | [0, 80, 160, 240, 320, 400, 480, 560, 640, 720, 800, 880] | [47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909] | Failed |
SHA-256 / 83f6e98ef7630234a0bc7f2818060e2d2c79d8ad58e707491bd8960a3748a4c6
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
qcap = x['queue_cap']
I = x['interval_ms']
next_free = 0
deps = []
out = []
for t in x['requests']:
waiting = sum(1 for d in deps if d > t)
if waiting < qcap:
dep = next_free if next_free > 0 else t
next_free = dep + I
deps.append(dep)
out.append(dep)
else:
out.append('dropped')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 151, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1001, 2000, 2010, 5000]},
[1001, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 201]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 251, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [301, 310, 320, 330]},
[301, 401, 501, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [47, 86, 231, 429, 438, 486, 490, 650, 653, 673, 689, 793]},
[47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 152, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1002, 2000, 2010, 5000]},
[1002, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 202]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 252, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [302, 310, 320, 330]},
[302, 402, 502, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [130, 453, 459, 485, 554, 565, 613, 658, 676, 724, 814, 858]},
[130, 453, 533, 613, 693, 'dropped', 773, 'dropped', 'dropped', 853, 933, 1013]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 153, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1003, 2000, 2010, 5000]},
[1003, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 203]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 253, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [303, 310, 320, 330]},
[303, 403, 503, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [1, 48, 98, 246, 258, 261, 333, 405, 500, 646, 651, 768]},
[1, 81, 161, 246, 326, 406, 486, 'dropped', 566, 646, 726, 806]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 154, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1004, 2000, 2010, 5000]},
[1004, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 204]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 254, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [304, 310, 320, 330]},
[304, 404, 504, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [6, 206, 394, 410, 422, 469, 663, 677, 720, 726, 732, 943]},
[6, 206, 394, 474, 554, 'dropped', 663, 743, 823, 'dropped', 'dropped', 943]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 155, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1005, 2000, 2010, 5000]},
[1005, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 205]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 255, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [305, 310, 320, 330]},
[305, 405, 505, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [220, 273, 276, 356, 387, 434, 571, 612, 618, 647, 669, 777]},
[220, 300, 380, 460, 540, 'dropped', 620, 700, 'dropped', 780, 'dropped', 860]]]]
for label, args, expected in cases[N - 1]:
check(label, solve(args), expected)
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 |
|---|---|---|---|
| burst queues then drops | [0, 100, 200, 'dropped', 300, 400] | [0, 100, 200, 'dropped', 300, 400] | Passed |
| idle line departs immediately | [1001, 1051, 1101, 1151] | [1001, 2000, 2050, 5000] | Failed |
| departure instant is not waiting | [0, 100, 200, 'dropped', 300] | [0, 100, 200, 'dropped', 300] | Passed |
| dropped requests do not reserve slots | [0, 200, 'dropped', 'dropped', 400, 'dropped'] | [0, 200, 'dropped', 'dropped', 400, 'dropped'] | Passed |
| first request late | [301, 401, 501, 'dropped'] | [301, 401, 501, 'dropped'] | Passed |
| random arrivals | [47, 127, 207, 287, 367, 447, 527, 607, 687, 767, 847, 927] | [47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909] | Failed |
SHA-256 / c5fb6f4ed4965ea51dd6f5acb624739de1547a5a70de4b7360ef82e11ae78d7d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
qcap = x['queue_cap']
I = x['interval_ms']
next_free = 0
deps = []
out = []
for t in x['requests']:
waiting = sum(1 for d in deps if d > t)
if waiting < qcap:
dep = max(t, next_free)
next_free = dep + I
deps.append(dep)
out.append(dep)
else:
out.append('dropped')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 151, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1001, 2000, 2010, 5000]},
[1001, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 201]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 251, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [301, 310, 320, 330]},
[301, 401, 501, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [47, 86, 231, 429, 438, 486, 490, 650, 653, 673, 689, 793]},
[47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 152, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1002, 2000, 2010, 5000]},
[1002, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 202]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 252, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [302, 310, 320, 330]},
[302, 402, 502, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [130, 453, 459, 485, 554, 565, 613, 658, 676, 724, 814, 858]},
[130, 453, 533, 613, 693, 'dropped', 773, 'dropped', 'dropped', 853, 933, 1013]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 153, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1003, 2000, 2010, 5000]},
[1003, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 203]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 253, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [303, 310, 320, 330]},
[303, 403, 503, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [1, 48, 98, 246, 258, 261, 333, 405, 500, 646, 651, 768]},
[1, 81, 161, 246, 326, 406, 486, 'dropped', 566, 646, 726, 806]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 154, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1004, 2000, 2010, 5000]},
[1004, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 204]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 254, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [304, 310, 320, 330]},
[304, 404, 504, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [6, 206, 394, 410, 422, 469, 663, 677, 720, 726, 732, 943]},
[6, 206, 394, 474, 554, 'dropped', 663, 743, 823, 'dropped', 'dropped', 943]]],
[['burst queues then drops',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 155, 400]},
[0, 100, 200, 'dropped', 300, 400]],
['idle line departs immediately',
{'interval_ms': 50, 'queue_cap': 3, 'requests': [1005, 2000, 2010, 5000]},
[1005, 2000, 2050, 5000]],
['departure instant is not waiting',
{'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 205]},
[0, 100, 200, 'dropped', 300]],
['dropped requests do not reserve slots',
{'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 255, 260]},
[0, 200, 'dropped', 'dropped', 400, 'dropped']],
['first request late',
{'interval_ms': 100, 'queue_cap': 2, 'requests': [305, 310, 320, 330]},
[305, 405, 505, 'dropped']],
['random arrivals',
{'interval_ms': 80,
'queue_cap': 2,
'requests': [220, 273, 276, 356, 387, 434, 571, 612, 618, 647, 669, 777]},
[220, 300, 380, 460, 540, 'dropped', 620, 700, 'dropped', 780, 'dropped', 860]]]]
for label, args, expected in cases[N - 1]:
check(label, solve(args), expected)
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 |
|---|---|---|---|
| burst queues then drops | [0, 100, 200, 'dropped', 300, 400] | [0, 100, 200, 'dropped', 300, 400] | Passed |
| idle line departs immediately | [1001, 2000, 2050, 5000] | [1001, 2000, 2050, 5000] | Passed |
| departure instant is not waiting | [0, 100, 200, 'dropped', 300] | [0, 100, 200, 'dropped', 300] | Passed |
| dropped requests do not reserve slots | [0, 200, 'dropped', 'dropped', 400, 'dropped'] | [0, 200, 'dropped', 'dropped', 400, 'dropped'] | Passed |
| first request late | [301, 401, 501, 'dropped'] | [301, 401, 501, 'dropped'] | Passed |
| random arrivals | [47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909] | [47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909] | Passed |
SHA-256 / 4d41e5838596ab313a672766ea364e21364c1b87a87dfeb3790d03939fd0fa3f
Verification & scope
A deterministic, bounded teaching model with stipulated constants and pre-hashed or explicitly hashed inputs; it is not a production implementation and makes no claim of conformance to any library or paper beyond the stated contract. 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:48:48.136939+00:00.
Case digest / 0d21ab1288d621d9fd0e8b46047be1a098079756287805d32cde23315c8bfa60