{"abstract":"Right after a boundary the previous window counts for nothing, allowing a double burst.","category":"Rate limiter algorithms","checks":7,"contract":"Input {limit, window_ms, requests [t]} with nondecreasing t. Keep counts for the current and previous epoch windows; moving to the next window rotates cur into prev, skipping more than one window clears both. The estimate is prev * (W - elapsed)/W + cur with elapsed = t - window start, exactly. Allow when est + 1 <= limit (reporting est + 1), else deny (reporting est). Return [[decision, estimate as fraction string]], [window, prev, cur]].","contract_signature":"x","evaluation_group":"w2-rate_limiter_algorithms-sliding-window-counter","failed_approach":"Weighting the current count instead leaves the previous window fully counted.","family":"w2-rate_limiter_algorithms-sliding-window-counter-weight-direction","id":"FA-73461","implementations":{"attempt":{"sha256":"78bbd2863de56a6c526a983adc4950c65f1c652b30b2507f138cb4dc2dda9610","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    L = x['limit']\n    W = x['window_ms']\n    idx, prev, cur = 0, 0, 0\n    out = []\n    for t in x['requests']:\n        ci = t // W\n        if ci == idx + 1:\n            prev, cur = cur, 0\n        elif ci > idx + 1:\n            prev, cur = 0, 0\n        idx = ci\n        elapsed = t - idx * W\n        est = prev + cur * Fraction(W - elapsed, W)\n        if est + 1 <= L:\n            cur += 1\n            out.append(['allow', str(est + 1)])\n        else:\n            out.append(['deny', str(est)])\n    return [out, [idx, prev, cur]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1251, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '999/250'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2601, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3501, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1601, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '2197/1000'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 401, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '399/80'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [762, 1183, 1614, 1772, 2334, 2411, 2425, 2509, 2551, 2560, 2651, 2748, 2860, 2881],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '1817/1000'],\n     ['allow', '1193/500'],\n     ['allow', '807/250'],\n     ['allow', '1499/500'],\n     ['allow', '3767/1000'],\n     ['deny', '149/40'],\n     ['deny', '3473/1000'],\n     ['deny', '3347/1000'],\n     ['deny', '83/25'],\n     ['deny', '3047/1000'],\n     ['allow', '939/250'],\n     ['deny', '171/50'],\n     ['deny', '3357/1000']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 31], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],\n [['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1252, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '499/125'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2602, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3502, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1602, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '1097/500'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 402, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '199/40'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [2, 284, 685, 716, 946, 1419, 1442, 1550, 1788, 1900, 2219, 2384, 2628, 2704],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['deny', '4'],\n     ['allow', '831/250'],\n     ['deny', '404/125'],\n     ['allow', '19/5'],\n     ['allow', '481/125'],\n     ['deny', '17/5'],\n     ['allow', '3343/1000'],\n     ['allow', '481/125'],\n     ['deny', '779/250'],\n     ['allow', '486/125']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 32], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],\n [['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1253, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '997/250'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2603, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3503, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1603, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '2191/1000'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 403, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '397/80'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [88, 165, 511, 523, 538, 1193, 1202, 1389, 1722, 1826, 2373, 2548, 2774, 2968],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['deny', '4'],\n     ['deny', '807/250'],\n     ['deny', '399/125'],\n     ['allow', '861/250'],\n     ['allow', '389/125'],\n     ['allow', '462/125'],\n     ['allow', '2881/1000'],\n     ['allow', '839/250'],\n     ['allow', '1839/500'],\n     ['deny', '387/125']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 33], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],\n [['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1254, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '498/125'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2604, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3504, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1604, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '547/250'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 404, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '99/20'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [113, 180, 253, 634, 1224, 1448, 1496, 1722, 1887, 2254, 2425, 2792, 2877, 2945],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['deny', '388/125'],\n     ['allow', '401/125'],\n     ['deny', '377/125'],\n     ['allow', '389/125'],\n     ['allow', '863/250'],\n     ['allow', '1619/500'],\n     ['allow', '149/40'],\n     ['allow', '453/125'],\n     ['deny', '3369/1000'],\n     ['deny', '633/200']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 34], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],\n [['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1255, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '199/50'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2605, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3505, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1605, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '437/200'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 405, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '79/16'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [237, 850, 1324, 1370, 1559, 1744, 1852, 2112, 2117, 2141, 2288, 2346, 2510, 2979],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '294/125'],\n     ['allow', '163/50'],\n     ['allow', '1941/500'],\n     ['deny', '439/125'],\n     ['deny', '412/125'],\n     ['allow', '458/125'],\n     ['deny', '3649/1000'],\n     ['deny', '3577/1000'],\n     ['deny', '392/125'],\n     ['allow', '1981/500'],\n     ['deny', '347/100'],\n     ['allow', '3063/1000']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 35], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]]]\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":"36efc693ad141b0599ce2283dc00999914d70906a6a246cd8602494201e6e58d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    L = x['limit']\n    W = x['window_ms']\n    idx, prev, cur = 0, 0, 0\n    out = []\n    for t in x['requests']:\n        ci = t // W\n        if ci == idx + 1:\n            prev, cur = cur, 0\n        elif ci > idx + 1:\n            prev, cur = 0, 0\n        idx = ci\n        elapsed = t - idx * W\n        est = prev * Fraction(elapsed, W) + cur\n        if est + 1 <= L:\n            cur += 1\n            out.append(['allow', str(est + 1)])\n        else:\n            out.append(['deny', str(est)])\n    return [out, [idx, prev, cur]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1251, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '999/250'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2601, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3501, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1601, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '2197/1000'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 401, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '399/80'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [762, 1183, 1614, 1772, 2334, 2411, 2425, 2509, 2551, 2560, 2651, 2748, 2860, 2881],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '1817/1000'],\n     ['allow', '1193/500'],\n     ['allow', '807/250'],\n     ['allow', '1499/500'],\n     ['allow', '3767/1000'],\n     ['deny', '149/40'],\n     ['deny', '3473/1000'],\n     ['deny', '3347/1000'],\n     ['deny', '83/25'],\n     ['deny', '3047/1000'],\n     ['allow', '939/250'],\n     ['deny', '171/50'],\n     ['deny', '3357/1000']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 31], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],\n [['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1252, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '499/125'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2602, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3502, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1602, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '1097/500'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 402, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '199/40'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [2, 284, 685, 716, 946, 1419, 1442, 1550, 1788, 1900, 2219, 2384, 2628, 2704],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['deny', '4'],\n     ['allow', '831/250'],\n     ['deny', '404/125'],\n     ['allow', '19/5'],\n     ['allow', '481/125'],\n     ['deny', '17/5'],\n     ['allow', '3343/1000'],\n     ['allow', '481/125'],\n     ['deny', '779/250'],\n     ['allow', '486/125']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 32], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],\n [['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1253, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '997/250'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2603, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3503, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1603, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '2191/1000'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 403, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '397/80'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [88, 165, 511, 523, 538, 1193, 1202, 1389, 1722, 1826, 2373, 2548, 2774, 2968],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['deny', '4'],\n     ['deny', '807/250'],\n     ['deny', '399/125'],\n     ['allow', '861/250'],\n     ['allow', '389/125'],\n     ['allow', '462/125'],\n     ['allow', '2881/1000'],\n     ['allow', '839/250'],\n     ['allow', '1839/500'],\n     ['deny', '387/125']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 33], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],\n [['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1254, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '498/125'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2604, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3504, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1604, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '547/250'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 404, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '99/20'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [113, 180, 253, 634, 1224, 1448, 1496, 1722, 1887, 2254, 2425, 2792, 2877, 2945],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['deny', '388/125'],\n     ['allow', '401/125'],\n     ['deny', '377/125'],\n     ['allow', '389/125'],\n     ['allow', '863/250'],\n     ['allow', '1619/500'],\n     ['allow', '149/40'],\n     ['allow', '453/125'],\n     ['deny', '3369/1000'],\n     ['deny', '633/200']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 34], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],\n [['previous window weighting',\n   {'limit': 4, 'requests': [100, 200, 300, 400, 1255, 1500, 1750, 1800], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '199/50'],\n     ['allow', '4'],\n     ['allow', '4'],\n     ['deny', '19/5']],\n    [1, 4, 3]]],\n  ['gap clears history',\n   {'limit': 3, 'requests': [0, 1, 2, 2605, 2700, 2800, 2900], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['deny', '3']],\n    [2, 0, 3]]],\n  ['stale previous after gap',\n   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3505, 3600, 3700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '14/5'],\n     ['deny', '13/5'],\n     ['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3']],\n    [3, 0, 3]]],\n  ['fractional estimate boundary',\n   {'limit': 3, 'requests': [0, 10, 20, 1500, 1605, 1700], 'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '5/2'],\n     ['deny', '437/200'],\n     ['allow', '29/10']],\n    [1, 3, 2]]],\n  ['early in window',\n   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 405, 410, 420, 800, 801], 'window_ms': 400},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '3'],\n     ['allow', '4'],\n     ['allow', '5'],\n     ['deny', '79/16'],\n     ['deny', '39/8'],\n     ['deny', '19/4'],\n     ['allow', '1'],\n     ['allow', '2']],\n    [2, 0, 2]]],\n  ['random traffic',\n   {'limit': 4,\n    'requests': [237, 850, 1324, 1370, 1559, 1744, 1852, 2112, 2117, 2141, 2288, 2346, 2510, 2979],\n    'window_ms': 1000},\n   [[['allow', '1'],\n     ['allow', '2'],\n     ['allow', '294/125'],\n     ['allow', '163/50'],\n     ['allow', '1941/500'],\n     ['deny', '439/125'],\n     ['deny', '412/125'],\n     ['allow', '458/125'],\n     ['deny', '3649/1000'],\n     ['deny', '3577/1000'],\n     ['deny', '392/125'],\n     ['allow', '1981/500'],\n     ['deny', '347/100'],\n     ['allow', '3063/1000']],\n    [2, 3, 3]]],\n  ['single window',\n   {'limit': 2, 'requests': [10, 20, 35], 'window_ms': 1000},\n   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]]]\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-sliding-window-counter-weight-direction","generated_at":"2026-09-29T14:48:47.923029+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Edge proxies approximate a rolling window with two counters; the weighting and rotation rules determine whether boundary bursts are smoothed or doubled.","root_cause":"The previous count is weighted by elapsed/W instead of the overlap (W - elapsed)/W.","sha256":"1bc43629c00133e3d899a74c0e0c1b53ab3ea53413e2ba9dc37989af7b9e9149","title":"Sliding-window counter approximation: previous window weighted by elapsed time · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":43.096,"exit_code":1,"observations":[{"actual":[[["allow","1"],["allow","9/5"],["allow","12/5"],["allow","14/5"],["deny","4"],["deny","4"],["deny","4"],["deny","4"]],[1,4,0]],"check":"previous window weighting","expected":[[["allow","1"],["allow","2"],["allow","3"],["allow","4"],["allow","999/250"],["allow","4"],["allow","4"],["deny","19/5"]],[1,4,3]],"passed":false},{"actual":[[["allow","1"],["allow","1999/1000"],["allow","749/250"],["allow","1"],["allow","13/10"],["allow","7/5"],["allow","13/10"]],[2,0,4]],"check":"gap clears history","expected":[[["allow","1"],["allow","2"],["allow","3"],["allow","1"],["allow","2"],["allow","3"],["deny","3"]],[2,0,3]],"passed":false},{"actual":[[["allow","1"],["allow","9/5"],["allow","3"],["deny","14/5"],["allow","1"],["allow","7/5"],["allow","8/5"]],[3,0,3]],"check":"stale previous after gap","expected":[[["allow","1"],["allow","2"],["allow","14/5"],["deny","13/5"],["allow","1"],["allow","2"],["allow","3"]],[3,0,3]],"passed":false},{"actual":[[["allow","1"],["allow","199/100"],["allow","74/25"],["deny","3"],["deny","3"],["deny","3"]],[1,3,0]],"check":"fractional estimate boundary","expected":[[["allow","1"],["allow","2"],["allow","3"],["allow","5/2"],["deny","2197/1000"],["allow","29/10"]],[1,3,2]],"passed":false},{"actual":[[["allow","1"],["allow","15/8"],["allow","5/2"],["allow","23/8"],["allow","3"],["deny","5"],["deny","5"],["deny","5"],["allow","1"],["allow","799/400"]],[2,0,2]],"check":"early in window","expected":[[["allow","1"],["allow","2"],["allow","3"],["allow","4"],["allow","5"],["deny","399/80"],["deny","39/8"],["deny","19/4"],["allow","1"],["allow","2"]],[2,0,2]],"passed":false},{"actual":[[["allow","1"],["allow","2"],["allow","1193/500"],["allow","307/125"],["allow","4"],["deny","3589/1000"],["deny","143/40"],["deny","3491/1000"],["deny","3449/1000"],["deny","86/25"],["deny","3349/1000"],["deny","813/250"],["deny","157/50"],["deny","3119/1000"]],[2,3,1]],"check":"random traffic","expected":[[["allow","1"],["allow","1817/1000"],["allow","1193/500"],["allow","807/250"],["allow","1499/500"],["allow","3767/1000"],["deny","149/40"],["deny","3473/1000"],["deny","3347/1000"],["deny","83/25"],["deny","3047/1000"],["allow","939/250"],["deny","171/50"],["deny","3357/1000"]],[2,3,3]],"passed":false},{"actual":[[["allow","1"],["allow","99/50"],["deny","969/500"]],[0,0,2]],"check":"single window","expected":[[["allow","1"],["allow","2"],["deny","2"]],[0,0,2]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"previous window weighting\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"9/5\"], [\"allow\", \"12/5\"], [\"allow\", \"14/5\"], [\"deny\", \"4\"], [\"deny\", \"4\"], [\"deny\", \"4\"], [\"deny\", \"4\"]], [1, 4, 0]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"4\"], [\"allow\", \"999/250\"], [\"allow\", \"4\"], [\"allow\", \"4\"], [\"deny\", \"19/5\"]], [1, 4, 3]], \"passed\": false}, {\"check\": \"gap clears history\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"1999/1000\"], [\"allow\", \"749/250\"], [\"allow\", \"1\"], [\"allow\", \"13/10\"], [\"allow\", \"7/5\"], [\"allow\", \"13/10\"]], [2, 0, 4]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"deny\", \"3\"]], [2, 0, 3]], \"passed\": false}, {\"check\": \"stale previous after gap\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"9/5\"], [\"allow\", \"3\"], [\"deny\", \"14/5\"], [\"allow\", \"1\"], [\"allow\", \"7/5\"], [\"allow\", \"8/5\"]], [3, 0, 3]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"14/5\"], [\"deny\", \"13/5\"], [\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"]], [3, 0, 3]], \"passed\": false}, {\"check\": \"fractional estimate boundary\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"199/100\"], [\"allow\", \"74/25\"], [\"deny\", \"3\"], [\"deny\", \"3\"], [\"deny\", \"3\"]], [1, 3, 0]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"5/2\"], [\"deny\", \"2197/1000\"], [\"allow\", \"29/10\"]], [1, 3, 2]], \"passed\": false}, {\"check\": \"early in window\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"15/8\"], [\"allow\", \"5/2\"], [\"allow\", \"23/8\"], [\"allow\", \"3\"], [\"deny\", \"5\"], [\"deny\", \"5\"], [\"deny\", \"5\"], [\"allow\", \"1\"], [\"allow\", \"799/400\"]], [2, 0, 2]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"4\"], [\"allow\", \"5\"], [\"deny\", \"399/80\"], [\"deny\", \"39/8\"], [\"deny\", \"19/4\"], [\"allow\", \"1\"], [\"allow\", \"2\"]], [2, 0, 2]], \"passed\": false}, {\"check\": \"random traffic\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"1193/500\"], [\"allow\", \"307/125\"], [\"allow\", \"4\"], [\"deny\", \"3589/1000\"], [\"deny\", \"143/40\"], [\"deny\", \"3491/1000\"], [\"deny\", \"3449/1000\"], [\"deny\", \"86/25\"], [\"deny\", \"3349/1000\"], [\"deny\", \"813/250\"], [\"deny\", \"157/50\"], [\"deny\", \"3119/1000\"]], [2, 3, 1]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"1817/1000\"], [\"allow\", \"1193/500\"], [\"allow\", \"807/250\"], [\"allow\", \"1499/500\"], [\"allow\", \"3767/1000\"], [\"deny\", \"149/40\"], [\"deny\", \"3473/1000\"], [\"deny\", \"3347/1000\"], [\"deny\", \"83/25\"], [\"deny\", \"3047/1000\"], [\"allow\", \"939/250\"], [\"deny\", \"171/50\"], [\"deny\", \"3357/1000\"]], [2, 3, 3]], \"passed\": false}, {\"check\": \"single window\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"99/50\"], [\"deny\", \"969/500\"]], [0, 0, 2]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"deny\", \"2\"]], [0, 0, 2]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.486,"exit_code":1,"observations":[{"actual":[[["allow","1"],["allow","2"],["allow","3"],["allow","4"],["allow","501/250"],["allow","4"],["deny","5"],["deny","26/5"]],[1,4,2]],"check":"previous window weighting","expected":[[["allow","1"],["allow","2"],["allow","3"],["allow","4"],["allow","999/250"],["allow","4"],["allow","4"],["deny","19/5"]],[1,4,3]],"passed":false},{"actual":[[["allow","1"],["allow","2"],["allow","3"],["allow","1"],["allow","2"],["allow","3"],["deny","3"]],[2,0,3]],"check":"gap clears history","expected":[[["allow","1"],["allow","2"],["allow","3"],["allow","1"],["allow","2"],["allow","3"],["deny","3"]],[2,0,3]],"passed":true},{"actual":[[["allow","1"],["allow","2"],["allow","6/5"],["allow","12/5"],["allow","1"],["allow","2"],["allow","3"]],[3,0,3]],"check":"stale previous after gap","expected":[[["allow","1"],["allow","2"],["allow","14/5"],["deny","13/5"],["allow","1"],["allow","2"],["allow","3"]],[3,0,3]],"passed":false},{"actual":[[["allow","1"],["allow","2"],["allow","3"],["allow","5/2"],["deny","2803/1000"],["deny","31/10"]],[1,3,1]],"check":"fractional estimate boundary","expected":[[["allow","1"],["allow","2"],["allow","3"],["allow","5/2"],["deny","2197/1000"],["allow","29/10"]],[1,3,2]],"passed":false},{"actual":[[["allow","1"],["allow","2"],["allow","3"],["allow","4"],["allow","5"],["allow","81/80"],["allow","17/8"],["allow","13/4"],["allow","1"],["allow","803/400"]],[2,3,2]],"check":"early in window","expected":[[["allow","1"],["allow","2"],["allow","3"],["allow","4"],["allow","5"],["deny","399/80"],["deny","39/8"],["deny","19/4"],["allow","1"],["allow","2"]],[2,0,2]],"passed":false},{"actual":[[["allow","1"],["allow","1183/1000"],["allow","1307/500"],["allow","943/250"],["allow","1001/500"],["allow","3233/1000"],["deny","131/40"],["deny","3527/1000"],["deny","3653/1000"],["deny","92/25"],["deny","3953/1000"],["deny","1061/250"],["deny","229/50"],["deny","4643/1000"]],[2,3,2]],"check":"random traffic","expected":[[["allow","1"],["allow","1817/1000"],["allow","1193/500"],["allow","807/250"],["allow","1499/500"],["allow","3767/1000"],["deny","149/40"],["deny","3473/1000"],["deny","3347/1000"],["deny","83/25"],["deny","3047/1000"],["allow","939/250"],["deny","171/50"],["deny","3357/1000"]],[2,3,3]],"passed":false},{"actual":[[["allow","1"],["allow","2"],["deny","2"]],[0,0,2]],"check":"single window","expected":[[["allow","1"],["allow","2"],["deny","2"]],[0,0,2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"previous window weighting\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"4\"], [\"allow\", \"501/250\"], [\"allow\", \"4\"], [\"deny\", \"5\"], [\"deny\", \"26/5\"]], [1, 4, 2]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"4\"], [\"allow\", \"999/250\"], [\"allow\", \"4\"], [\"allow\", \"4\"], [\"deny\", \"19/5\"]], [1, 4, 3]], \"passed\": false}, {\"check\": \"gap clears history\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"deny\", \"3\"]], [2, 0, 3]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"deny\", \"3\"]], [2, 0, 3]], \"passed\": true}, {\"check\": \"stale previous after gap\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"6/5\"], [\"allow\", \"12/5\"], [\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"]], [3, 0, 3]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"14/5\"], [\"deny\", \"13/5\"], [\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"]], [3, 0, 3]], \"passed\": false}, {\"check\": \"fractional estimate boundary\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"5/2\"], [\"deny\", \"2803/1000\"], [\"deny\", \"31/10\"]], [1, 3, 1]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"5/2\"], [\"deny\", \"2197/1000\"], [\"allow\", \"29/10\"]], [1, 3, 2]], \"passed\": false}, {\"check\": \"early in window\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"4\"], [\"allow\", \"5\"], [\"allow\", \"81/80\"], [\"allow\", \"17/8\"], [\"allow\", \"13/4\"], [\"allow\", \"1\"], [\"allow\", \"803/400\"]], [2, 3, 2]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"allow\", \"3\"], [\"allow\", \"4\"], [\"allow\", \"5\"], [\"deny\", \"399/80\"], [\"deny\", \"39/8\"], [\"deny\", \"19/4\"], [\"allow\", \"1\"], [\"allow\", \"2\"]], [2, 0, 2]], \"passed\": false}, {\"check\": \"random traffic\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"1183/1000\"], [\"allow\", \"1307/500\"], [\"allow\", \"943/250\"], [\"allow\", \"1001/500\"], [\"allow\", \"3233/1000\"], [\"deny\", \"131/40\"], [\"deny\", \"3527/1000\"], [\"deny\", \"3653/1000\"], [\"deny\", \"92/25\"], [\"deny\", \"3953/1000\"], [\"deny\", \"1061/250\"], [\"deny\", \"229/50\"], [\"deny\", \"4643/1000\"]], [2, 3, 2]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"1817/1000\"], [\"allow\", \"1193/500\"], [\"allow\", \"807/250\"], [\"allow\", \"1499/500\"], [\"allow\", \"3767/1000\"], [\"deny\", \"149/40\"], [\"deny\", \"3473/1000\"], [\"deny\", \"3347/1000\"], [\"deny\", \"83/25\"], [\"deny\", \"3047/1000\"], [\"allow\", \"939/250\"], [\"deny\", \"171/50\"], [\"deny\", \"3357/1000\"]], [2, 3, 3]], \"passed\": false}, {\"check\": \"single window\", \"actual\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"deny\", \"2\"]], [0, 0, 2]], \"expected\": [[[\"allow\", \"1\"], [\"allow\", \"2\"], [\"deny\", \"2\"]], [0, 0, 2]], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}