{"abstract":"Each window admits limit + 1 requests.","category":"Rate limiter algorithms","checks":6,"contract":"Input {limit, window_ms, requests [[t, key]]}. Windows are epoch-aligned: index t div W. Each (case-sensitive) key keeps [window, count]; a request in a later window resets the count, while a late request from an earlier window is charged to the current window. Allow while count < limit and report remaining = limit - count after charging; denials are not counted. reset = ms until the end of the key's current window. Return [[decision, remaining, reset]].","evaluation_group":"w2-rate_limiter_algorithms-fixed-window","failed_approach":"Comparing count + 1 < limit admits only limit - 1 requests.","family":"w2-rate_limiter_algorithms-fixed-window-admit-bound","id":"FA-73431","implementations":{"attempt":{"sha256":"04276feafa64591897f5a39abeb7a4da79917bf2fe8ef82bc7242aa62d4d661f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    L = x['limit']\n    W = x['window_ms']\n    state = {}\n    out = []\n    for t, key in x['requests']:\n        idx = t // W\n        st = state.setdefault(key, [idx, 0])\n        if idx > st[0]:\n            st[0] = idx\n            st[1] = 0\n        reset = (st[0] + 1) * W - t\n        if st[1] + 1 < L:\n            st[1] += 1\n            out.append(['allow', L - st[1], reset])\n        else:\n            out.append(['deny', 0, reset])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1501, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 499]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3101, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 899], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [901, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1099], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [41, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 459]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[701, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 299], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[148, 'p'],\n                 [1350, 'p'],\n                 [1394, 'p'],\n                 [1399, 'q'],\n                 [1528, 'p'],\n                 [2467, 'q'],\n                 [2606, 'p'],\n                 [2791, 'q'],\n                 [3270, 'q'],\n                 [3436, 'p'],\n                 [3594, 'p'],\n                 [3878, 'p']],\n    'window_ms': 1000},\n   [['allow', 2, 852],\n    ['allow', 2, 650],\n    ['allow', 1, 606],\n    ['allow', 2, 601],\n    ['allow', 0, 472],\n    ['allow', 2, 533],\n    ['allow', 2, 394],\n    ['allow', 1, 209],\n    ['allow', 2, 730],\n    ['allow', 2, 564],\n    ['allow', 1, 406],\n    ['allow', 0, 122]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1502, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 498]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3102, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 898], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [902, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1098], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [42, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 458]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[702, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 298], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[18, 'q'],\n                 [35, 'q'],\n                 [153, 'p'],\n                 [1576, 'p'],\n                 [1806, 'p'],\n                 [1845, 'q'],\n                 [1907, 'q'],\n                 [2159, 'q'],\n                 [2302, 'p'],\n                 [2922, 'q'],\n                 [3458, 'q'],\n                 [3820, 'q']],\n    'window_ms': 1000},\n   [['allow', 2, 982],\n    ['allow', 1, 965],\n    ['allow', 2, 847],\n    ['allow', 2, 424],\n    ['allow', 1, 194],\n    ['allow', 2, 155],\n    ['allow', 1, 93],\n    ['allow', 2, 841],\n    ['allow', 2, 698],\n    ['allow', 1, 78],\n    ['allow', 2, 542],\n    ['allow', 1, 180]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1503, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 497]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3103, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 897], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [903, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1097], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [43, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 457]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[703, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 297], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[39, 'q'],\n                 [40, 'q'],\n                 [204, 'p'],\n                 [348, 'p'],\n                 [694, 'p'],\n                 [1639, 'q'],\n                 [1928, 'p'],\n                 [2192, 'q'],\n                 [2354, 'q'],\n                 [2607, 'p'],\n                 [2877, 'p'],\n                 [3047, 'q']],\n    'window_ms': 1000},\n   [['allow', 2, 961],\n    ['allow', 1, 960],\n    ['allow', 2, 796],\n    ['allow', 1, 652],\n    ['allow', 0, 306],\n    ['allow', 2, 361],\n    ['allow', 2, 72],\n    ['allow', 2, 808],\n    ['allow', 1, 646],\n    ['allow', 2, 393],\n    ['allow', 1, 123],\n    ['allow', 2, 953]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1504, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 496]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3104, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 896], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [904, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1096], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [44, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 456]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[704, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 296], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[413, 'p'],\n                 [553, 'q'],\n                 [896, 'p'],\n                 [1203, 'p'],\n                 [1938, 'p'],\n                 [2137, 'q'],\n                 [2305, 'p'],\n                 [2811, 'q'],\n                 [2904, 'p'],\n                 [3215, 'q'],\n                 [3333, 'p'],\n                 [3669, 'q']],\n    'window_ms': 1000},\n   [['allow', 2, 587],\n    ['allow', 2, 447],\n    ['allow', 1, 104],\n    ['allow', 2, 797],\n    ['allow', 1, 62],\n    ['allow', 2, 863],\n    ['allow', 2, 695],\n    ['allow', 1, 189],\n    ['allow', 1, 96],\n    ['allow', 2, 785],\n    ['allow', 2, 667],\n    ['allow', 1, 331]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1505, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 495]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3105, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 895], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [905, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1095], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [45, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 455]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[705, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 295], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[265, 'q'],\n                 [437, 'q'],\n                 [695, 'q'],\n                 [1325, 'p'],\n                 [2036, 'p'],\n                 [2449, 'q'],\n                 [2816, 'q'],\n                 [2985, 'q'],\n                 [3033, 'q'],\n                 [3343, 'p'],\n                 [3427, 'q'],\n                 [3729, 'p']],\n    'window_ms': 1000},\n   [['allow', 2, 735],\n    ['allow', 1, 563],\n    ['allow', 0, 305],\n    ['allow', 2, 675],\n    ['allow', 2, 964],\n    ['allow', 2, 551],\n    ['allow', 1, 184],\n    ['allow', 0, 15],\n    ['allow', 2, 967],\n    ['allow', 2, 657],\n    ['allow', 1, 573],\n    ['allow', 1, 271]]]]]\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":"4735b3669bd2f7d53bd1a02c9507aa54c93169ba391737a6c8177c86c995451b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    L = x['limit']\n    W = x['window_ms']\n    state = {}\n    out = []\n    for t, key in x['requests']:\n        idx = t // W\n        st = state.setdefault(key, [idx, 0])\n        if idx > st[0]:\n            st[0] = idx\n            st[1] = 0\n        reset = (st[0] + 1) * W - t\n        if st[1] <= L:\n            st[1] += 1\n            out.append(['allow', L - st[1], reset])\n        else:\n            out.append(['deny', 0, reset])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1501, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 499]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3101, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 899], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [901, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1099], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [41, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 459]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[701, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 299], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[148, 'p'],\n                 [1350, 'p'],\n                 [1394, 'p'],\n                 [1399, 'q'],\n                 [1528, 'p'],\n                 [2467, 'q'],\n                 [2606, 'p'],\n                 [2791, 'q'],\n                 [3270, 'q'],\n                 [3436, 'p'],\n                 [3594, 'p'],\n                 [3878, 'p']],\n    'window_ms': 1000},\n   [['allow', 2, 852],\n    ['allow', 2, 650],\n    ['allow', 1, 606],\n    ['allow', 2, 601],\n    ['allow', 0, 472],\n    ['allow', 2, 533],\n    ['allow', 2, 394],\n    ['allow', 1, 209],\n    ['allow', 2, 730],\n    ['allow', 2, 564],\n    ['allow', 1, 406],\n    ['allow', 0, 122]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1502, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 498]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3102, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 898], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [902, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1098], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [42, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 458]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[702, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 298], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[18, 'q'],\n                 [35, 'q'],\n                 [153, 'p'],\n                 [1576, 'p'],\n                 [1806, 'p'],\n                 [1845, 'q'],\n                 [1907, 'q'],\n                 [2159, 'q'],\n                 [2302, 'p'],\n                 [2922, 'q'],\n                 [3458, 'q'],\n                 [3820, 'q']],\n    'window_ms': 1000},\n   [['allow', 2, 982],\n    ['allow', 1, 965],\n    ['allow', 2, 847],\n    ['allow', 2, 424],\n    ['allow', 1, 194],\n    ['allow', 2, 155],\n    ['allow', 1, 93],\n    ['allow', 2, 841],\n    ['allow', 2, 698],\n    ['allow', 1, 78],\n    ['allow', 2, 542],\n    ['allow', 1, 180]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1503, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 497]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3103, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 897], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [903, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1097], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [43, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 457]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[703, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 297], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[39, 'q'],\n                 [40, 'q'],\n                 [204, 'p'],\n                 [348, 'p'],\n                 [694, 'p'],\n                 [1639, 'q'],\n                 [1928, 'p'],\n                 [2192, 'q'],\n                 [2354, 'q'],\n                 [2607, 'p'],\n                 [2877, 'p'],\n                 [3047, 'q']],\n    'window_ms': 1000},\n   [['allow', 2, 961],\n    ['allow', 1, 960],\n    ['allow', 2, 796],\n    ['allow', 1, 652],\n    ['allow', 0, 306],\n    ['allow', 2, 361],\n    ['allow', 2, 72],\n    ['allow', 2, 808],\n    ['allow', 1, 646],\n    ['allow', 2, 393],\n    ['allow', 1, 123],\n    ['allow', 2, 953]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1504, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 496]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3104, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 896], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [904, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1096], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [44, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 456]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[704, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 296], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[413, 'p'],\n                 [553, 'q'],\n                 [896, 'p'],\n                 [1203, 'p'],\n                 [1938, 'p'],\n                 [2137, 'q'],\n                 [2305, 'p'],\n                 [2811, 'q'],\n                 [2904, 'p'],\n                 [3215, 'q'],\n                 [3333, 'p'],\n                 [3669, 'q']],\n    'window_ms': 1000},\n   [['allow', 2, 587],\n    ['allow', 2, 447],\n    ['allow', 1, 104],\n    ['allow', 2, 797],\n    ['allow', 1, 62],\n    ['allow', 2, 863],\n    ['allow', 2, 695],\n    ['allow', 1, 189],\n    ['allow', 1, 96],\n    ['allow', 2, 785],\n    ['allow', 2, 667],\n    ['allow', 1, 331]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1505, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 495]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3105, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 895], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [905, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1095], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [45, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 455]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[705, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 295], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[265, 'q'],\n                 [437, 'q'],\n                 [695, 'q'],\n                 [1325, 'p'],\n                 [2036, 'p'],\n                 [2449, 'q'],\n                 [2816, 'q'],\n                 [2985, 'q'],\n                 [3033, 'q'],\n                 [3343, 'p'],\n                 [3427, 'q'],\n                 [3729, 'p']],\n    'window_ms': 1000},\n   [['allow', 2, 735],\n    ['allow', 1, 563],\n    ['allow', 0, 305],\n    ['allow', 2, 675],\n    ['allow', 2, 964],\n    ['allow', 2, 551],\n    ['allow', 1, 184],\n    ['allow', 0, 15],\n    ['allow', 2, 967],\n    ['allow', 2, 657],\n    ['allow', 1, 573],\n    ['allow', 1, 271]]]]]\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":"858fe147fad65170706de48a9d3a66221d5b67ff069427663b0eaaa7ce59aaa3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    L = x['limit']\n    W = x['window_ms']\n    state = {}\n    out = []\n    for t, key in x['requests']:\n        idx = t // W\n        st = state.setdefault(key, [idx, 0])\n        if idx > st[0]:\n            st[0] = idx\n            st[1] = 0\n        reset = (st[0] + 1) * W - t\n        if st[1] < L:\n            st[1] += 1\n            out.append(['allow', L - st[1], reset])\n        else:\n            out.append(['deny', 0, reset])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1501, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 499]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3101, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 899], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [901, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1099], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [41, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 459]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[701, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 299], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[148, 'p'],\n                 [1350, 'p'],\n                 [1394, 'p'],\n                 [1399, 'q'],\n                 [1528, 'p'],\n                 [2467, 'q'],\n                 [2606, 'p'],\n                 [2791, 'q'],\n                 [3270, 'q'],\n                 [3436, 'p'],\n                 [3594, 'p'],\n                 [3878, 'p']],\n    'window_ms': 1000},\n   [['allow', 2, 852],\n    ['allow', 2, 650],\n    ['allow', 1, 606],\n    ['allow', 2, 601],\n    ['allow', 0, 472],\n    ['allow', 2, 533],\n    ['allow', 2, 394],\n    ['allow', 1, 209],\n    ['allow', 2, 730],\n    ['allow', 2, 564],\n    ['allow', 1, 406],\n    ['allow', 0, 122]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1502, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 498]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3102, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 898], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [902, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1098], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [42, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 458]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[702, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 298], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[18, 'q'],\n                 [35, 'q'],\n                 [153, 'p'],\n                 [1576, 'p'],\n                 [1806, 'p'],\n                 [1845, 'q'],\n                 [1907, 'q'],\n                 [2159, 'q'],\n                 [2302, 'p'],\n                 [2922, 'q'],\n                 [3458, 'q'],\n                 [3820, 'q']],\n    'window_ms': 1000},\n   [['allow', 2, 982],\n    ['allow', 1, 965],\n    ['allow', 2, 847],\n    ['allow', 2, 424],\n    ['allow', 1, 194],\n    ['allow', 2, 155],\n    ['allow', 1, 93],\n    ['allow', 2, 841],\n    ['allow', 2, 698],\n    ['allow', 1, 78],\n    ['allow', 2, 542],\n    ['allow', 1, 180]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1503, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 497]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3103, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 897], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [903, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1097], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [43, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 457]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[703, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 297], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[39, 'q'],\n                 [40, 'q'],\n                 [204, 'p'],\n                 [348, 'p'],\n                 [694, 'p'],\n                 [1639, 'q'],\n                 [1928, 'p'],\n                 [2192, 'q'],\n                 [2354, 'q'],\n                 [2607, 'p'],\n                 [2877, 'p'],\n                 [3047, 'q']],\n    'window_ms': 1000},\n   [['allow', 2, 961],\n    ['allow', 1, 960],\n    ['allow', 2, 796],\n    ['allow', 1, 652],\n    ['allow', 0, 306],\n    ['allow', 2, 361],\n    ['allow', 2, 72],\n    ['allow', 2, 808],\n    ['allow', 1, 646],\n    ['allow', 2, 393],\n    ['allow', 1, 123],\n    ['allow', 2, 953]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1504, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 496]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3104, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 896], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [904, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1096], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [44, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 456]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[704, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 296], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[413, 'p'],\n                 [553, 'q'],\n                 [896, 'p'],\n                 [1203, 'p'],\n                 [1938, 'p'],\n                 [2137, 'q'],\n                 [2305, 'p'],\n                 [2811, 'q'],\n                 [2904, 'p'],\n                 [3215, 'q'],\n                 [3333, 'p'],\n                 [3669, 'q']],\n    'window_ms': 1000},\n   [['allow', 2, 587],\n    ['allow', 2, 447],\n    ['allow', 1, 104],\n    ['allow', 2, 797],\n    ['allow', 1, 62],\n    ['allow', 2, 863],\n    ['allow', 2, 695],\n    ['allow', 1, 189],\n    ['allow', 1, 96],\n    ['allow', 2, 785],\n    ['allow', 2, 667],\n    ['allow', 1, 331]]]],\n [['window boundary resets',\n   {'limit': 2,\n    'requests': [[990, 'k'], [995, 'k'], [999, 'k'], [1000, 'k'], [1505, 'k']],\n    'window_ms': 1000},\n   [['allow', 1, 10], ['allow', 0, 5], ['deny', 0, 1], ['allow', 1, 1000], ['allow', 0, 495]]],\n  ['skipped windows reset',\n   {'limit': 2, 'requests': [[100, 'a'], [200, 'a'], [3105, 'a'], [3200, 'a']], 'window_ms': 1000},\n   [['allow', 1, 900], ['allow', 0, 800], ['allow', 1, 895], ['allow', 0, 800]]],\n  ['late request stays in window',\n   {'limit': 3,\n    'requests': [[1100, 'a'], [1200, 'a'], [905, 'a'], [1300, 'a'], [1400, 'a']],\n    'window_ms': 1000},\n   [['allow', 2, 900], ['allow', 1, 800], ['allow', 0, 1095], ['deny', 0, 700], ['deny', 0, 600]]],\n  ['keys are isolated and case-sensitive',\n   {'limit': 1, 'requests': [[10, 'Key'], [20, 'key'], [30, 'KEY'], [45, 'Key']], 'window_ms': 500},\n   [['allow', 0, 490], ['allow', 0, 480], ['allow', 0, 470], ['deny', 0, 455]]],\n  ['first request mid window',\n   {'limit': 2,\n    'requests': [[705, 'z'], [800, 'z'], [1100, 'z'], [1200, 'z'], [1300, 'z']],\n    'window_ms': 1000},\n   [['allow', 1, 295], ['allow', 0, 200], ['allow', 1, 900], ['allow', 0, 800], ['deny', 0, 700]]],\n  ['random keys',\n   {'limit': 3,\n    'requests': [[265, 'q'],\n                 [437, 'q'],\n                 [695, 'q'],\n                 [1325, 'p'],\n                 [2036, 'p'],\n                 [2449, 'q'],\n                 [2816, 'q'],\n                 [2985, 'q'],\n                 [3033, 'q'],\n                 [3343, 'p'],\n                 [3427, 'q'],\n                 [3729, 'p']],\n    'window_ms': 1000},\n   [['allow', 2, 735],\n    ['allow', 1, 563],\n    ['allow', 0, 305],\n    ['allow', 2, 675],\n    ['allow', 2, 964],\n    ['allow', 2, 551],\n    ['allow', 1, 184],\n    ['allow', 0, 15],\n    ['allow', 2, 967],\n    ['allow', 2, 657],\n    ['allow', 1, 573],\n    ['allow', 1, 271]]]]]\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-fixed-window-admit-bound","generated_at":"2026-09-29T14:48:47.518049+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Fixed windows are the simplest API quota; alignment, reset and key-identity mistakes show up as double bursts, stuck quotas or cross-tenant throttling.","repair":"Admit while the count is below the limit.","root_cause":"Admission compares count <= limit.","sha256":"a76ba98e52b82100ba18048a6ab14926a75b29af051b48e3dde7f2e54790f8a8","title":"Fixed-window request counter: one request beyond the limit admitted · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.227,"exit_code":1,"observations":[{"actual":[["allow",1,10],["deny",0,5],["deny",0,1],["allow",1,1000],["deny",0,499]],"check":"window boundary resets","expected":[["allow",1,10],["allow",0,5],["deny",0,1],["allow",1,1000],["allow",0,499]],"passed":false},{"actual":[["allow",1,900],["deny",0,800],["allow",1,899],["deny",0,800]],"check":"skipped windows reset","expected":[["allow",1,900],["allow",0,800],["allow",1,899],["allow",0,800]],"passed":false},{"actual":[["allow",2,900],["allow",1,800],["deny",0,1099],["deny",0,700],["deny",0,600]],"check":"late request stays in window","expected":[["allow",2,900],["allow",1,800],["allow",0,1099],["deny",0,700],["deny",0,600]],"passed":false},{"actual":[["deny",0,490],["deny",0,480],["deny",0,470],["deny",0,459]],"check":"keys are isolated and case-sensitive","expected":[["allow",0,490],["allow",0,480],["allow",0,470],["deny",0,459]],"passed":false},{"actual":[["allow",1,299],["deny",0,200],["allow",1,900],["deny",0,800],["deny",0,700]],"check":"first request mid window","expected":[["allow",1,299],["allow",0,200],["allow",1,900],["allow",0,800],["deny",0,700]],"passed":false},{"actual":[["allow",2,852],["allow",2,650],["allow",1,606],["allow",2,601],["deny",0,472],["allow",2,533],["allow",2,394],["allow",1,209],["allow",2,730],["allow",2,564],["allow",1,406],["deny",0,122]],"check":"random keys","expected":[["allow",2,852],["allow",2,650],["allow",1,606],["allow",2,601],["allow",0,472],["allow",2,533],["allow",2,394],["allow",1,209],["allow",2,730],["allow",2,564],["allow",1,406],["allow",0,122]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"window boundary resets\", \"actual\": [[\"allow\", 1, 10], [\"deny\", 0, 5], [\"deny\", 0, 1], [\"allow\", 1, 1000], [\"deny\", 0, 499]], \"expected\": [[\"allow\", 1, 10], [\"allow\", 0, 5], [\"deny\", 0, 1], [\"allow\", 1, 1000], [\"allow\", 0, 499]], \"passed\": false}, {\"check\": \"skipped windows reset\", \"actual\": [[\"allow\", 1, 900], [\"deny\", 0, 800], [\"allow\", 1, 899], [\"deny\", 0, 800]], \"expected\": [[\"allow\", 1, 900], [\"allow\", 0, 800], [\"allow\", 1, 899], [\"allow\", 0, 800]], \"passed\": false}, {\"check\": \"late request stays in window\", \"actual\": [[\"allow\", 2, 900], [\"allow\", 1, 800], [\"deny\", 0, 1099], [\"deny\", 0, 700], [\"deny\", 0, 600]], \"expected\": [[\"allow\", 2, 900], [\"allow\", 1, 800], [\"allow\", 0, 1099], [\"deny\", 0, 700], [\"deny\", 0, 600]], \"passed\": false}, {\"check\": \"keys are isolated and case-sensitive\", \"actual\": [[\"deny\", 0, 490], [\"deny\", 0, 480], [\"deny\", 0, 470], [\"deny\", 0, 459]], \"expected\": [[\"allow\", 0, 490], [\"allow\", 0, 480], [\"allow\", 0, 470], [\"deny\", 0, 459]], \"passed\": false}, {\"check\": \"first request mid window\", \"actual\": [[\"allow\", 1, 299], [\"deny\", 0, 200], [\"allow\", 1, 900], [\"deny\", 0, 800], [\"deny\", 0, 700]], \"expected\": [[\"allow\", 1, 299], [\"allow\", 0, 200], [\"allow\", 1, 900], [\"allow\", 0, 800], [\"deny\", 0, 700]], \"passed\": false}, {\"check\": \"random keys\", \"actual\": [[\"allow\", 2, 852], [\"allow\", 2, 650], [\"allow\", 1, 606], [\"allow\", 2, 601], [\"deny\", 0, 472], [\"allow\", 2, 533], [\"allow\", 2, 394], [\"allow\", 1, 209], [\"allow\", 2, 730], [\"allow\", 2, 564], [\"allow\", 1, 406], [\"deny\", 0, 122]], \"expected\": [[\"allow\", 2, 852], [\"allow\", 2, 650], [\"allow\", 1, 606], [\"allow\", 2, 601], [\"allow\", 0, 472], [\"allow\", 2, 533], [\"allow\", 2, 394], [\"allow\", 1, 209], [\"allow\", 2, 730], [\"allow\", 2, 564], [\"allow\", 1, 406], [\"allow\", 0, 122]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.156,"exit_code":1,"observations":[{"actual":[["allow",1,10],["allow",0,5],["allow",-1,1],["allow",1,1000],["allow",0,499]],"check":"window boundary resets","expected":[["allow",1,10],["allow",0,5],["deny",0,1],["allow",1,1000],["allow",0,499]],"passed":false},{"actual":[["allow",1,900],["allow",0,800],["allow",1,899],["allow",0,800]],"check":"skipped windows reset","expected":[["allow",1,900],["allow",0,800],["allow",1,899],["allow",0,800]],"passed":true},{"actual":[["allow",2,900],["allow",1,800],["allow",0,1099],["allow",-1,700],["deny",0,600]],"check":"late request stays in window","expected":[["allow",2,900],["allow",1,800],["allow",0,1099],["deny",0,700],["deny",0,600]],"passed":false},{"actual":[["allow",0,490],["allow",0,480],["allow",0,470],["allow",-1,459]],"check":"keys are isolated and case-sensitive","expected":[["allow",0,490],["allow",0,480],["allow",0,470],["deny",0,459]],"passed":false},{"actual":[["allow",1,299],["allow",0,200],["allow",1,900],["allow",0,800],["allow",-1,700]],"check":"first request mid window","expected":[["allow",1,299],["allow",0,200],["allow",1,900],["allow",0,800],["deny",0,700]],"passed":false},{"actual":[["allow",2,852],["allow",2,650],["allow",1,606],["allow",2,601],["allow",0,472],["allow",2,533],["allow",2,394],["allow",1,209],["allow",2,730],["allow",2,564],["allow",1,406],["allow",0,122]],"check":"random keys","expected":[["allow",2,852],["allow",2,650],["allow",1,606],["allow",2,601],["allow",0,472],["allow",2,533],["allow",2,394],["allow",1,209],["allow",2,730],["allow",2,564],["allow",1,406],["allow",0,122]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"window boundary resets\", \"actual\": [[\"allow\", 1, 10], [\"allow\", 0, 5], [\"allow\", -1, 1], [\"allow\", 1, 1000], [\"allow\", 0, 499]], \"expected\": [[\"allow\", 1, 10], [\"allow\", 0, 5], [\"deny\", 0, 1], [\"allow\", 1, 1000], [\"allow\", 0, 499]], \"passed\": false}, {\"check\": \"skipped windows reset\", \"actual\": [[\"allow\", 1, 900], [\"allow\", 0, 800], [\"allow\", 1, 899], [\"allow\", 0, 800]], \"expected\": [[\"allow\", 1, 900], [\"allow\", 0, 800], [\"allow\", 1, 899], [\"allow\", 0, 800]], \"passed\": true}, {\"check\": \"late request stays in window\", \"actual\": [[\"allow\", 2, 900], [\"allow\", 1, 800], [\"allow\", 0, 1099], [\"allow\", -1, 700], [\"deny\", 0, 600]], \"expected\": [[\"allow\", 2, 900], [\"allow\", 1, 800], [\"allow\", 0, 1099], [\"deny\", 0, 700], [\"deny\", 0, 600]], \"passed\": false}, {\"check\": \"keys are isolated and case-sensitive\", \"actual\": [[\"allow\", 0, 490], [\"allow\", 0, 480], [\"allow\", 0, 470], [\"allow\", -1, 459]], \"expected\": [[\"allow\", 0, 490], [\"allow\", 0, 480], [\"allow\", 0, 470], [\"deny\", 0, 459]], \"passed\": false}, {\"check\": \"first request mid window\", \"actual\": [[\"allow\", 1, 299], [\"allow\", 0, 200], [\"allow\", 1, 900], [\"allow\", 0, 800], [\"allow\", -1, 700]], \"expected\": [[\"allow\", 1, 299], [\"allow\", 0, 200], [\"allow\", 1, 900], [\"allow\", 0, 800], [\"deny\", 0, 700]], \"passed\": false}, {\"check\": \"random keys\", \"actual\": [[\"allow\", 2, 852], [\"allow\", 2, 650], [\"allow\", 1, 606], [\"allow\", 2, 601], [\"allow\", 0, 472], [\"allow\", 2, 533], [\"allow\", 2, 394], [\"allow\", 1, 209], [\"allow\", 2, 730], [\"allow\", 2, 564], [\"allow\", 1, 406], [\"allow\", 0, 122]], \"expected\": [[\"allow\", 2, 852], [\"allow\", 2, 650], [\"allow\", 1, 606], [\"allow\", 2, 601], [\"allow\", 0, 472], [\"allow\", 2, 533], [\"allow\", 2, 394], [\"allow\", 1, 209], [\"allow\", 2, 730], [\"allow\", 2, 564], [\"allow\", 1, 406], [\"allow\", 0, 122]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.37,"exit_code":0,"observations":[{"actual":[["allow",1,10],["allow",0,5],["deny",0,1],["allow",1,1000],["allow",0,499]],"check":"window boundary resets","expected":[["allow",1,10],["allow",0,5],["deny",0,1],["allow",1,1000],["allow",0,499]],"passed":true},{"actual":[["allow",1,900],["allow",0,800],["allow",1,899],["allow",0,800]],"check":"skipped windows reset","expected":[["allow",1,900],["allow",0,800],["allow",1,899],["allow",0,800]],"passed":true},{"actual":[["allow",2,900],["allow",1,800],["allow",0,1099],["deny",0,700],["deny",0,600]],"check":"late request stays in window","expected":[["allow",2,900],["allow",1,800],["allow",0,1099],["deny",0,700],["deny",0,600]],"passed":true},{"actual":[["allow",0,490],["allow",0,480],["allow",0,470],["deny",0,459]],"check":"keys are isolated and case-sensitive","expected":[["allow",0,490],["allow",0,480],["allow",0,470],["deny",0,459]],"passed":true},{"actual":[["allow",1,299],["allow",0,200],["allow",1,900],["allow",0,800],["deny",0,700]],"check":"first request mid window","expected":[["allow",1,299],["allow",0,200],["allow",1,900],["allow",0,800],["deny",0,700]],"passed":true},{"actual":[["allow",2,852],["allow",2,650],["allow",1,606],["allow",2,601],["allow",0,472],["allow",2,533],["allow",2,394],["allow",1,209],["allow",2,730],["allow",2,564],["allow",1,406],["allow",0,122]],"check":"random keys","expected":[["allow",2,852],["allow",2,650],["allow",1,606],["allow",2,601],["allow",0,472],["allow",2,533],["allow",2,394],["allow",1,209],["allow",2,730],["allow",2,564],["allow",1,406],["allow",0,122]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"window boundary resets\", \"actual\": [[\"allow\", 1, 10], [\"allow\", 0, 5], [\"deny\", 0, 1], [\"allow\", 1, 1000], [\"allow\", 0, 499]], \"expected\": [[\"allow\", 1, 10], [\"allow\", 0, 5], [\"deny\", 0, 1], [\"allow\", 1, 1000], [\"allow\", 0, 499]], \"passed\": true}, {\"check\": \"skipped windows reset\", \"actual\": [[\"allow\", 1, 900], [\"allow\", 0, 800], [\"allow\", 1, 899], [\"allow\", 0, 800]], \"expected\": [[\"allow\", 1, 900], [\"allow\", 0, 800], [\"allow\", 1, 899], [\"allow\", 0, 800]], \"passed\": true}, {\"check\": \"late request stays in window\", \"actual\": [[\"allow\", 2, 900], [\"allow\", 1, 800], [\"allow\", 0, 1099], [\"deny\", 0, 700], [\"deny\", 0, 600]], \"expected\": [[\"allow\", 2, 900], [\"allow\", 1, 800], [\"allow\", 0, 1099], [\"deny\", 0, 700], [\"deny\", 0, 600]], \"passed\": true}, {\"check\": \"keys are isolated and case-sensitive\", \"actual\": [[\"allow\", 0, 490], [\"allow\", 0, 480], [\"allow\", 0, 470], [\"deny\", 0, 459]], \"expected\": [[\"allow\", 0, 490], [\"allow\", 0, 480], [\"allow\", 0, 470], [\"deny\", 0, 459]], \"passed\": true}, {\"check\": \"first request mid window\", \"actual\": [[\"allow\", 1, 299], [\"allow\", 0, 200], [\"allow\", 1, 900], [\"allow\", 0, 800], [\"deny\", 0, 700]], \"expected\": [[\"allow\", 1, 299], [\"allow\", 0, 200], [\"allow\", 1, 900], [\"allow\", 0, 800], [\"deny\", 0, 700]], \"passed\": true}, {\"check\": \"random keys\", \"actual\": [[\"allow\", 2, 852], [\"allow\", 2, 650], [\"allow\", 1, 606], [\"allow\", 2, 601], [\"allow\", 0, 472], [\"allow\", 2, 533], [\"allow\", 2, 394], [\"allow\", 1, 209], [\"allow\", 2, 730], [\"allow\", 2, 564], [\"allow\", 1, 406], [\"allow\", 0, 122]], \"expected\": [[\"allow\", 2, 852], [\"allow\", 2, 650], [\"allow\", 1, 606], [\"allow\", 2, 601], [\"allow\", 0, 472], [\"allow\", 2, 533], [\"allow\", 2, 394], [\"allow\", 1, 209], [\"allow\", 2, 730], [\"allow\", 2, 564], [\"allow\", 1, 406], [\"allow\", 0, 122]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}