FA-73516 / Rate limiter algorithms / Open access
Leaky bucket queue shaper: next slot computed from arrival · case 01
Queued requests are spaced from their arrival rather than from the previous departure, compressing the output rate.
ROOT CAUSE
The next free slot is arrival + interval instead of departure + interval.
VERIFIED REPAIR
Set next_free = departure + interval.
Unsuccessful approach: Advancing from the old next_free ignores idle gaps and pushes departures into the future.
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 = max(t, next_free)
next_free = t + 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, 100, 'dropped', 151, 400] | [0, 100, 200, 'dropped', 300, 400] | Failed |
| idle line departs immediately | [1001, 2000, 2050, 5000] | [1001, 2000, 2050, 5000] | Passed |
| departure instant is not waiting | [0, 100, 100, 200, 201] | [0, 100, 200, 'dropped', 300] | Failed |
| dropped requests do not reserve slots | [0, 200, 'dropped', 'dropped', 251, 451] | [0, 200, 'dropped', 'dropped', 400, 'dropped'] | Failed |
| first request late | [301, 401, 410, 'dropped'] | [301, 401, 501, 'dropped'] | Failed |
| random arrivals | [47, 127, 231, 429, 509, 518, 'dropped', 650, 730, 733, 'dropped', 793] | [47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909] | Failed |
SHA-256 / bcfa829a1c2409da7fe7bcbd9784aafe1926c66a09c44f64c00343aa167036e7
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 = max(t, next_free)
next_free = next_free + 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, 2010, 5000] | [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, 310, 320, 330] | [301, 401, 501, 'dropped'] | Failed |
| random arrivals | [47, 86, 231, 429, 438, 486, 490, 650, 653, 720, 800, 880] | [47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909] | Failed |
SHA-256 / 74e574e874f509252365a543f74a7e009bff58b778658b900c7aa5fe2fdf54ab
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.176853+00:00.
Case digest / 2c6fc1636e4ac0d681a5488b4bc50c8ac4049a417dd128d33059cd5579d46dfa