{"abstract":"Queued requests are spaced from their arrival rather than from the previous departure, compressing the output rate.","category":"Rate limiter algorithms","checks":6,"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\".","evaluation_group":"w2-rate_limiter_algorithms-leaky-bucket-shaper","failed_approach":"Advancing from the old next_free ignores idle gaps and pushes departures into the future.","family":"w2-rate_limiter_algorithms-leaky-bucket-shaper-slot-advance","id":"FA-73516","implementations":{"attempt":{"sha256":"74e574e874f509252365a543f74a7e009bff58b778658b900c7aa5fe2fdf54ab","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    qcap = x['queue_cap']\n    I = x['interval_ms']\n    next_free = 0\n    deps = []\n    out = []\n    for t in x['requests']:\n        waiting = sum(1 for d in deps if d > t)\n        if waiting < qcap:\n            dep = max(t, next_free)\n            next_free = next_free + I\n            deps.append(dep)\n            out.append(dep)\n        else:\n            out.append('dropped')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 151, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1001, 2000, 2010, 5000]},\n   [1001, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 201]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 251, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [301, 310, 320, 330]},\n   [301, 401, 501, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [47, 86, 231, 429, 438, 486, 490, 650, 653, 673, 689, 793]},\n   [47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 152, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1002, 2000, 2010, 5000]},\n   [1002, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 202]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 252, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [302, 310, 320, 330]},\n   [302, 402, 502, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [130, 453, 459, 485, 554, 565, 613, 658, 676, 724, 814, 858]},\n   [130, 453, 533, 613, 693, 'dropped', 773, 'dropped', 'dropped', 853, 933, 1013]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 153, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1003, 2000, 2010, 5000]},\n   [1003, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 203]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 253, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [303, 310, 320, 330]},\n   [303, 403, 503, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [1, 48, 98, 246, 258, 261, 333, 405, 500, 646, 651, 768]},\n   [1, 81, 161, 246, 326, 406, 486, 'dropped', 566, 646, 726, 806]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 154, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1004, 2000, 2010, 5000]},\n   [1004, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 204]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 254, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [304, 310, 320, 330]},\n   [304, 404, 504, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [6, 206, 394, 410, 422, 469, 663, 677, 720, 726, 732, 943]},\n   [6, 206, 394, 474, 554, 'dropped', 663, 743, 823, 'dropped', 'dropped', 943]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 155, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1005, 2000, 2010, 5000]},\n   [1005, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 205]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 255, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [305, 310, 320, 330]},\n   [305, 405, 505, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [220, 273, 276, 356, 387, 434, 571, 612, 618, 647, 669, 777]},\n   [220, 300, 380, 460, 540, 'dropped', 620, 700, 'dropped', 780, 'dropped', 860]]]]\nfor label, args, expected in cases[N - 1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"bcfa829a1c2409da7fe7bcbd9784aafe1926c66a09c44f64c00343aa167036e7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    qcap = x['queue_cap']\n    I = x['interval_ms']\n    next_free = 0\n    deps = []\n    out = []\n    for t in x['requests']:\n        waiting = sum(1 for d in deps if d > t)\n        if waiting < qcap:\n            dep = max(t, next_free)\n            next_free = t + I\n            deps.append(dep)\n            out.append(dep)\n        else:\n            out.append('dropped')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 151, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1001, 2000, 2010, 5000]},\n   [1001, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 201]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 251, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [301, 310, 320, 330]},\n   [301, 401, 501, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [47, 86, 231, 429, 438, 486, 490, 650, 653, 673, 689, 793]},\n   [47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 152, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1002, 2000, 2010, 5000]},\n   [1002, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 202]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 252, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [302, 310, 320, 330]},\n   [302, 402, 502, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [130, 453, 459, 485, 554, 565, 613, 658, 676, 724, 814, 858]},\n   [130, 453, 533, 613, 693, 'dropped', 773, 'dropped', 'dropped', 853, 933, 1013]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 153, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1003, 2000, 2010, 5000]},\n   [1003, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 203]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 253, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [303, 310, 320, 330]},\n   [303, 403, 503, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [1, 48, 98, 246, 258, 261, 333, 405, 500, 646, 651, 768]},\n   [1, 81, 161, 246, 326, 406, 486, 'dropped', 566, 646, 726, 806]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 154, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1004, 2000, 2010, 5000]},\n   [1004, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 204]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 254, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [304, 310, 320, 330]},\n   [304, 404, 504, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [6, 206, 394, 410, 422, 469, 663, 677, 720, 726, 732, 943]},\n   [6, 206, 394, 474, 554, 'dropped', 663, 743, 823, 'dropped', 'dropped', 943]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 155, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1005, 2000, 2010, 5000]},\n   [1005, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 205]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 255, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [305, 310, 320, 330]},\n   [305, 405, 505, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [220, 273, 276, 356, 387, 434, 571, 612, 618, 647, 669, 777]},\n   [220, 300, 380, 460, 540, 'dropped', 620, 700, 'dropped', 780, 'dropped', 860]]]]\nfor label, args, expected in cases[N - 1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"4d41e5838596ab313a672766ea364e21364c1b87a87dfeb3790d03939fd0fa3f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    qcap = x['queue_cap']\n    I = x['interval_ms']\n    next_free = 0\n    deps = []\n    out = []\n    for t in x['requests']:\n        waiting = sum(1 for d in deps if d > t)\n        if waiting < qcap:\n            dep = max(t, next_free)\n            next_free = dep + I\n            deps.append(dep)\n            out.append(dep)\n        else:\n            out.append('dropped')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 151, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1001, 2000, 2010, 5000]},\n   [1001, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 201]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 251, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [301, 310, 320, 330]},\n   [301, 401, 501, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [47, 86, 231, 429, 438, 486, 490, 650, 653, 673, 689, 793]},\n   [47, 127, 231, 429, 509, 589, 'dropped', 669, 749, 829, 'dropped', 909]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 152, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1002, 2000, 2010, 5000]},\n   [1002, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 202]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 252, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [302, 310, 320, 330]},\n   [302, 402, 502, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [130, 453, 459, 485, 554, 565, 613, 658, 676, 724, 814, 858]},\n   [130, 453, 533, 613, 693, 'dropped', 773, 'dropped', 'dropped', 853, 933, 1013]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 153, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1003, 2000, 2010, 5000]},\n   [1003, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 203]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 253, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [303, 310, 320, 330]},\n   [303, 403, 503, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [1, 48, 98, 246, 258, 261, 333, 405, 500, 646, 651, 768]},\n   [1, 81, 161, 246, 326, 406, 486, 'dropped', 566, 646, 726, 806]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 154, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1004, 2000, 2010, 5000]},\n   [1004, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 204]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 254, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [304, 310, 320, 330]},\n   [304, 404, 504, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [6, 206, 394, 410, 422, 469, 663, 677, 720, 726, 732, 943]},\n   [6, 206, 394, 474, 554, 'dropped', 663, 743, 823, 'dropped', 'dropped', 943]]],\n [['burst queues then drops',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [0, 0, 0, 0, 155, 400]},\n   [0, 100, 200, 'dropped', 300, 400]],\n  ['idle line departs immediately',\n   {'interval_ms': 50, 'queue_cap': 3, 'requests': [1005, 2000, 2010, 5000]},\n   [1005, 2000, 2050, 5000]],\n  ['departure instant is not waiting',\n   {'interval_ms': 100, 'queue_cap': 1, 'requests': [0, 0, 100, 100, 205]},\n   [0, 100, 200, 'dropped', 300]],\n  ['dropped requests do not reserve slots',\n   {'interval_ms': 200, 'queue_cap': 1, 'requests': [0, 10, 20, 30, 255, 260]},\n   [0, 200, 'dropped', 'dropped', 400, 'dropped']],\n  ['first request late',\n   {'interval_ms': 100, 'queue_cap': 2, 'requests': [305, 310, 320, 330]},\n   [305, 405, 505, 'dropped']],\n  ['random arrivals',\n   {'interval_ms': 80,\n    'queue_cap': 2,\n    'requests': [220, 273, 276, 356, 387, 434, 571, 612, 618, 647, 669, 777]},\n   [220, 300, 380, 460, 540, 'dropped', 620, 700, 'dropped', 780, 'dropped', 860]]]]\nfor label, args, expected in cases[N - 1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-rate_limiter_algorithms-leaky-bucket-shaper-slot-advance","generated_at":"2026-09-29T14:48:48.176853+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Traffic shapers smooth bursts into a steady departure rate; the queue bound and slot arithmetic decide latency and drop behaviour.","repair":"Set next_free = departure + interval.","root_cause":"The next free slot is arrival + interval instead of departure + interval.","sha256":"2c6fc1636e4ac0d681a5488b4bc50c8ac4049a417dd128d33059cd5579d46dfa","title":"Leaky bucket queue shaper: next slot computed from arrival · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.762,"exit_code":1,"observations":[{"actual":[0,100,200,"dropped",300,400],"check":"burst queues then drops","expected":[0,100,200,"dropped",300,400],"passed":true},{"actual":[1001,2000,2010,5000],"check":"idle line departs immediately","expected":[1001,2000,2050,5000],"passed":false},{"actual":[0,100,200,"dropped",300],"check":"departure instant is not waiting","expected":[0,100,200,"dropped",300],"passed":true},{"actual":[0,200,"dropped","dropped",400,"dropped"],"check":"dropped requests do not reserve slots","expected":[0,200,"dropped","dropped",400,"dropped"],"passed":true},{"actual":[301,310,320,330],"check":"first request late","expected":[301,401,501,"dropped"],"passed":false},{"actual":[47,86,231,429,438,486,490,650,653,720,800,880],"check":"random arrivals","expected":[47,127,231,429,509,589,"dropped",669,749,829,"dropped",909],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"burst queues then drops\", \"actual\": [0, 100, 200, \"dropped\", 300, 400], \"expected\": [0, 100, 200, \"dropped\", 300, 400], \"passed\": true}, {\"check\": \"idle line departs immediately\", \"actual\": [1001, 2000, 2010, 5000], \"expected\": [1001, 2000, 2050, 5000], \"passed\": false}, {\"check\": \"departure instant is not waiting\", \"actual\": [0, 100, 200, \"dropped\", 300], \"expected\": [0, 100, 200, \"dropped\", 300], \"passed\": true}, {\"check\": \"dropped requests do not reserve slots\", \"actual\": [0, 200, \"dropped\", \"dropped\", 400, \"dropped\"], \"expected\": [0, 200, \"dropped\", \"dropped\", 400, \"dropped\"], \"passed\": true}, {\"check\": \"first request late\", \"actual\": [301, 310, 320, 330], \"expected\": [301, 401, 501, \"dropped\"], \"passed\": false}, {\"check\": \"random arrivals\", \"actual\": [47, 86, 231, 429, 438, 486, 490, 650, 653, 720, 800, 880], \"expected\": [47, 127, 231, 429, 509, 589, \"dropped\", 669, 749, 829, \"dropped\", 909], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.635,"exit_code":1,"observations":[{"actual":[0,100,100,"dropped",151,400],"check":"burst queues then drops","expected":[0,100,200,"dropped",300,400],"passed":false},{"actual":[1001,2000,2050,5000],"check":"idle line departs immediately","expected":[1001,2000,2050,5000],"passed":true},{"actual":[0,100,100,200,201],"check":"departure instant is not waiting","expected":[0,100,200,"dropped",300],"passed":false},{"actual":[0,200,"dropped","dropped",251,451],"check":"dropped requests do not reserve slots","expected":[0,200,"dropped","dropped",400,"dropped"],"passed":false},{"actual":[301,401,410,"dropped"],"check":"first request late","expected":[301,401,501,"dropped"],"passed":false},{"actual":[47,127,231,429,509,518,"dropped",650,730,733,"dropped",793],"check":"random arrivals","expected":[47,127,231,429,509,589,"dropped",669,749,829,"dropped",909],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"burst queues then drops\", \"actual\": [0, 100, 100, \"dropped\", 151, 400], \"expected\": [0, 100, 200, \"dropped\", 300, 400], \"passed\": false}, {\"check\": \"idle line departs immediately\", \"actual\": [1001, 2000, 2050, 5000], \"expected\": [1001, 2000, 2050, 5000], \"passed\": true}, {\"check\": \"departure instant is not waiting\", \"actual\": [0, 100, 100, 200, 201], \"expected\": [0, 100, 200, \"dropped\", 300], \"passed\": false}, {\"check\": \"dropped requests do not reserve slots\", \"actual\": [0, 200, \"dropped\", \"dropped\", 251, 451], \"expected\": [0, 200, \"dropped\", \"dropped\", 400, \"dropped\"], \"passed\": false}, {\"check\": \"first request late\", \"actual\": [301, 401, 410, \"dropped\"], \"expected\": [301, 401, 501, \"dropped\"], \"passed\": false}, {\"check\": \"random arrivals\", \"actual\": [47, 127, 231, 429, 509, 518, \"dropped\", 650, 730, 733, \"dropped\", 793], \"expected\": [47, 127, 231, 429, 509, 589, \"dropped\", 669, 749, 829, \"dropped\", 909], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.903,"exit_code":0,"observations":[{"actual":[0,100,200,"dropped",300,400],"check":"burst queues then drops","expected":[0,100,200,"dropped",300,400],"passed":true},{"actual":[1001,2000,2050,5000],"check":"idle line departs immediately","expected":[1001,2000,2050,5000],"passed":true},{"actual":[0,100,200,"dropped",300],"check":"departure instant is not waiting","expected":[0,100,200,"dropped",300],"passed":true},{"actual":[0,200,"dropped","dropped",400,"dropped"],"check":"dropped requests do not reserve slots","expected":[0,200,"dropped","dropped",400,"dropped"],"passed":true},{"actual":[301,401,501,"dropped"],"check":"first request late","expected":[301,401,501,"dropped"],"passed":true},{"actual":[47,127,231,429,509,589,"dropped",669,749,829,"dropped",909],"check":"random arrivals","expected":[47,127,231,429,509,589,"dropped",669,749,829,"dropped",909],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"burst queues then drops\", \"actual\": [0, 100, 200, \"dropped\", 300, 400], \"expected\": [0, 100, 200, \"dropped\", 300, 400], \"passed\": true}, {\"check\": \"idle line departs immediately\", \"actual\": [1001, 2000, 2050, 5000], \"expected\": [1001, 2000, 2050, 5000], \"passed\": true}, {\"check\": \"departure instant is not waiting\", \"actual\": [0, 100, 200, \"dropped\", 300], \"expected\": [0, 100, 200, \"dropped\", 300], \"passed\": true}, {\"check\": \"dropped requests do not reserve slots\", \"actual\": [0, 200, \"dropped\", \"dropped\", 400, \"dropped\"], \"expected\": [0, 200, \"dropped\", \"dropped\", 400, \"dropped\"], \"passed\": true}, {\"check\": \"first request late\", \"actual\": [301, 401, 501, \"dropped\"], \"expected\": [301, 401, 501, \"dropped\"], \"passed\": true}, {\"check\": \"random arrivals\", \"actual\": [47, 127, 231, 429, 509, 589, \"dropped\", 669, 749, 829, \"dropped\", 909], \"expected\": [47, 127, 231, 429, 509, 589, \"dropped\", 669, 749, 829, \"dropped\", 909], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}