{"abstract":"After a late arrival the next interval is measured from the past and appears artificially long or short.","category":"Rate limiter algorithms","checks":6,"contract":"Input {tau_ms, limit_rps, requests [t_ms]}. The rate estimate r starts at 0. For each arrival strictly after the latest seen time, dt = t - last, a = exp(-dt/tau) and r = a*r + (1-a)*(1000/dt) requests per second. Simultaneous or late arrivals leave r unchanged and never move the clock backwards. Every arrival reports deny if r > limit else allow, with r rounded to 3 decimals.","evaluation_group":"w2-rate_limiter_algorithms-ewma-rate-throttle","failed_approach":"Nudging the clock forward by one millisecond on late arrivals invents time.","family":"w2-rate_limiter_algorithms-ewma-rate-throttle-monotonic-clock","id":"FA-73781","implementations":{"attempt":{"sha256":"f9687aadf16036e6fd9ee7607682c8d90b3ac1ccd6872d7f343449a4a1e88a4d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    tau = x['tau_ms']\n    lim = x['limit_rps']\n    r = 0.0\n    last = None\n    out = []\n    for t in x['requests']:\n        if last is not None and t > last:\n            dt = t - last\n            a = math.exp(-dt / tau)\n            r = a * r + (1 - a) * (1000.0 / dt)\n        last = t if last is None or t > last else last + 1\n        out.append(['deny' if r > lim else 'allow', round(r, 3)])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['steady ten per second',\n   {'limit_rps': 12, 'requests': [1, 101, 201, 301, 401, 501, 601, 701, 801, 901], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 51, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.499],\n    ['allow', 2.319]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 401, 401], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.966],\n    ['allow', 1.966]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 301, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [714, 757, 953, 1023, 1049, 1069, 1190, 1379, 2031, 2512, 2526, 2977],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.386],\n    ['allow', 2.293],\n    ['allow', 3.434],\n    ['allow', 4.712],\n    ['allow', 5.987],\n    ['deny', 6.349],\n    ['deny', 6.098],\n    ['allow', 3.332],\n    ['allow', 2.709],\n    ['allow', 4.07],\n    ['allow', 3.19]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6001, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.317], ['allow', 0.689]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [2, 102, 202, 302, 402, 502, 602, 702, 802, 902], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 52, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.482],\n    ['allow', 2.32]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 402, 402], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.964],\n    ['allow', 1.964]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 302, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [216, 250, 522, 784, 966, 1254, 1553, 2058, 2080, 2239, 2561, 2685],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.394],\n    ['allow', 2.129],\n    ['allow', 2.656],\n    ['allow', 3.306],\n    ['allow', 3.362],\n    ['allow', 3.356],\n    ['allow', 2.649],\n    ['allow', 3.973],\n    ['allow', 4.444],\n    ['allow', 3.95],\n    ['allow', 4.618]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6002, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.317], ['allow', 0.689]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [3, 103, 203, 303, 403, 503, 603, 703, 803, 903], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 53, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.465],\n    ['allow', 2.321]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 403, 403], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.962],\n    ['allow', 1.962]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 303, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [86, 138, 254, 788, 1018, 1187, 1336, 1765, 2119, 2249, 2554, 2910],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.377],\n    ['allow', 2.483],\n    ['allow', 2.157],\n    ['allow', 2.771],\n    ['allow', 3.446],\n    ['allow', 4.072],\n    ['allow', 3.274],\n    ['allow', 3.096],\n    ['allow', 3.875],\n    ['allow', 3.664],\n    ['allow', 3.323]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6003, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.317], ['allow', 0.69]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [4, 104, 204, 304, 404, 504, 604, 704, 804, 904], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 54, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.448],\n    ['allow', 2.322]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 404, 404], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.96],\n    ['allow', 1.96]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 304, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [385, 507, 716, 724, 1100, 1757, 1778, 1945, 2017, 2160, 2509, 2770],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.311],\n    ['allow', 2.208],\n    ['allow', 3.603],\n    ['allow', 3.211],\n    ['allow', 2.183],\n    ['allow', 3.526],\n    ['allow', 4.048],\n    ['allow', 5.01],\n    ['allow', 5.376],\n    ['allow', 4.391],\n    ['allow', 4.217]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6004, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.316], ['allow', 0.69]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [5, 105, 205, 305, 405, 505, 605, 705, 805, 905], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 55, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.431],\n    ['allow', 2.323]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 405, 405], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.959],\n    ['allow', 1.959]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 305, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [165, 419, 489, 1134, 1196, 1250, 1558, 1747, 2333, 2495, 2720, 2742],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.198],\n    ['allow', 2.444],\n    ['allow', 1.906],\n    ['allow', 3.111],\n    ['allow', 4.255],\n    ['allow', 3.896],\n    ['allow', 4.226],\n    ['allow', 2.797],\n    ['allow', 3.495],\n    ['allow', 3.756],\n    ['allow', 5.046]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6005, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.316], ['allow', 0.69]]]]]\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":"42ac7fa29de6b19cc33a35ed1f2489f72f69509cec2b7863af1bdad79548a56f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    tau = x['tau_ms']\n    lim = x['limit_rps']\n    r = 0.0\n    last = None\n    out = []\n    for t in x['requests']:\n        if last is not None and t > last:\n            dt = t - last\n            a = math.exp(-dt / tau)\n            r = a * r + (1 - a) * (1000.0 / dt)\n        last = t\n        out.append(['deny' if r > lim else 'allow', round(r, 3)])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['steady ten per second',\n   {'limit_rps': 12, 'requests': [1, 101, 201, 301, 401, 501, 601, 701, 801, 901], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 51, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.499],\n    ['allow', 2.319]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 401, 401], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.966],\n    ['allow', 1.966]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 301, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [714, 757, 953, 1023, 1049, 1069, 1190, 1379, 2031, 2512, 2526, 2977],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.386],\n    ['allow', 2.293],\n    ['allow', 3.434],\n    ['allow', 4.712],\n    ['allow', 5.987],\n    ['deny', 6.349],\n    ['deny', 6.098],\n    ['allow', 3.332],\n    ['allow', 2.709],\n    ['allow', 4.07],\n    ['allow', 3.19]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6001, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.317], ['allow', 0.689]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [2, 102, 202, 302, 402, 502, 602, 702, 802, 902], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 52, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.482],\n    ['allow', 2.32]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 402, 402], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.964],\n    ['allow', 1.964]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 302, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [216, 250, 522, 784, 966, 1254, 1553, 2058, 2080, 2239, 2561, 2685],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.394],\n    ['allow', 2.129],\n    ['allow', 2.656],\n    ['allow', 3.306],\n    ['allow', 3.362],\n    ['allow', 3.356],\n    ['allow', 2.649],\n    ['allow', 3.973],\n    ['allow', 4.444],\n    ['allow', 3.95],\n    ['allow', 4.618]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6002, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.317], ['allow', 0.689]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [3, 103, 203, 303, 403, 503, 603, 703, 803, 903], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 53, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.465],\n    ['allow', 2.321]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 403, 403], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.962],\n    ['allow', 1.962]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 303, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [86, 138, 254, 788, 1018, 1187, 1336, 1765, 2119, 2249, 2554, 2910],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.377],\n    ['allow', 2.483],\n    ['allow', 2.157],\n    ['allow', 2.771],\n    ['allow', 3.446],\n    ['allow', 4.072],\n    ['allow', 3.274],\n    ['allow', 3.096],\n    ['allow', 3.875],\n    ['allow', 3.664],\n    ['allow', 3.323]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6003, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.317], ['allow', 0.69]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [4, 104, 204, 304, 404, 504, 604, 704, 804, 904], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 54, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.448],\n    ['allow', 2.322]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 404, 404], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.96],\n    ['allow', 1.96]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 304, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [385, 507, 716, 724, 1100, 1757, 1778, 1945, 2017, 2160, 2509, 2770],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.311],\n    ['allow', 2.208],\n    ['allow', 3.603],\n    ['allow', 3.211],\n    ['allow', 2.183],\n    ['allow', 3.526],\n    ['allow', 4.048],\n    ['allow', 5.01],\n    ['allow', 5.376],\n    ['allow', 4.391],\n    ['allow', 4.217]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6004, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.316], ['allow', 0.69]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [5, 105, 205, 305, 405, 505, 605, 705, 805, 905], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 55, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.431],\n    ['allow', 2.323]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 405, 405], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.959],\n    ['allow', 1.959]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 305, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [165, 419, 489, 1134, 1196, 1250, 1558, 1747, 2333, 2495, 2720, 2742],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.198],\n    ['allow', 2.444],\n    ['allow', 1.906],\n    ['allow', 3.111],\n    ['allow', 4.255],\n    ['allow', 3.896],\n    ['allow', 4.226],\n    ['allow', 2.797],\n    ['allow', 3.495],\n    ['allow', 3.756],\n    ['allow', 5.046]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6005, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.316], ['allow', 0.69]]]]]\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":"ae9e342895343a060b50275053ac8ec827ac062821b494aaada7838947fc65eb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    tau = x['tau_ms']\n    lim = x['limit_rps']\n    r = 0.0\n    last = None\n    out = []\n    for t in x['requests']:\n        if last is not None and t > last:\n            dt = t - last\n            a = math.exp(-dt / tau)\n            r = a * r + (1 - a) * (1000.0 / dt)\n        last = t if last is None else max(last, t)\n        out.append(['deny' if r > lim else 'allow', round(r, 3)])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['steady ten per second',\n   {'limit_rps': 12, 'requests': [1, 101, 201, 301, 401, 501, 601, 701, 801, 901], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 51, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.499],\n    ['allow', 2.319]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 401, 401], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.966],\n    ['allow', 1.966]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 301, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [714, 757, 953, 1023, 1049, 1069, 1190, 1379, 2031, 2512, 2526, 2977],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.386],\n    ['allow', 2.293],\n    ['allow', 3.434],\n    ['allow', 4.712],\n    ['allow', 5.987],\n    ['deny', 6.349],\n    ['deny', 6.098],\n    ['allow', 3.332],\n    ['allow', 2.709],\n    ['allow', 4.07],\n    ['allow', 3.19]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6001, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.317], ['allow', 0.689]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [2, 102, 202, 302, 402, 502, 602, 702, 802, 902], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 52, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.482],\n    ['allow', 2.32]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 402, 402], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.964],\n    ['allow', 1.964]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 302, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [216, 250, 522, 784, 966, 1254, 1553, 2058, 2080, 2239, 2561, 2685],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.394],\n    ['allow', 2.129],\n    ['allow', 2.656],\n    ['allow', 3.306],\n    ['allow', 3.362],\n    ['allow', 3.356],\n    ['allow', 2.649],\n    ['allow', 3.973],\n    ['allow', 4.444],\n    ['allow', 3.95],\n    ['allow', 4.618]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6002, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.317], ['allow', 0.689]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [3, 103, 203, 303, 403, 503, 603, 703, 803, 903], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 53, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.465],\n    ['allow', 2.321]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 403, 403], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.962],\n    ['allow', 1.962]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 303, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [86, 138, 254, 788, 1018, 1187, 1336, 1765, 2119, 2249, 2554, 2910],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.377],\n    ['allow', 2.483],\n    ['allow', 2.157],\n    ['allow', 2.771],\n    ['allow', 3.446],\n    ['allow', 4.072],\n    ['allow', 3.274],\n    ['allow', 3.096],\n    ['allow', 3.875],\n    ['allow', 3.664],\n    ['allow', 3.323]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6003, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.317], ['allow', 0.69]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [4, 104, 204, 304, 404, 504, 604, 704, 804, 904], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 54, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.448],\n    ['allow', 2.322]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 404, 404], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.96],\n    ['allow', 1.96]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 304, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [385, 507, 716, 724, 1100, 1757, 1778, 1945, 2017, 2160, 2509, 2770],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.311],\n    ['allow', 2.208],\n    ['allow', 3.603],\n    ['allow', 3.211],\n    ['allow', 2.183],\n    ['allow', 3.526],\n    ['allow', 4.048],\n    ['allow', 5.01],\n    ['allow', 5.376],\n    ['allow', 4.391],\n    ['allow', 4.217]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6004, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.316], ['allow', 0.69]]]],\n [['steady ten per second',\n   {'limit_rps': 12, 'requests': [5, 105, 205, 305, 405, 505, 605, 705, 805, 905], 'tau_ms': 1000},\n   [['allow', 0.0],\n    ['allow', 0.952],\n    ['allow', 1.813],\n    ['allow', 2.592],\n    ['allow', 3.297],\n    ['allow', 3.935],\n    ['allow', 4.512],\n    ['allow', 5.034],\n    ['allow', 5.507],\n    ['allow', 5.934]]],\n  ['burst crosses limit',\n   {'limit_rps': 20, 'requests': [0, 10, 20, 30, 40, 55, 1000], 'tau_ms': 500},\n   [['allow', 0.0],\n    ['allow', 1.98],\n    ['allow', 3.921],\n    ['allow', 5.824],\n    ['allow', 7.688],\n    ['allow', 9.431],\n    ['allow', 2.323]]],\n  ['simultaneous arrivals',\n   {'limit_rps': 5, 'requests': [0, 200, 200, 200, 405, 405], 'tau_ms': 800},\n   [['allow', 0.0],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.106],\n    ['allow', 1.959],\n    ['allow', 1.959]]],\n  ['late arrival ignored for clock',\n   {'limit_rps': 8, 'requests': [0, 500, 305, 700, 900], 'tau_ms': 1000},\n   [['allow', 0.0], ['allow', 0.787], ['allow', 0.787], ['allow', 1.551], ['allow', 2.176]]],\n  ['random arrivals',\n   {'limit_rps': 6,\n    'requests': [165, 419, 489, 1134, 1196, 1250, 1558, 1747, 2333, 2495, 2720, 2742],\n    'tau_ms': 700},\n   [['allow', 0.0],\n    ['allow', 1.198],\n    ['allow', 2.444],\n    ['allow', 1.906],\n    ['allow', 3.111],\n    ['allow', 4.255],\n    ['allow', 3.896],\n    ['allow', 4.226],\n    ['allow', 2.797],\n    ['allow', 3.495],\n    ['allow', 3.756],\n    ['allow', 5.046]]],\n  ['slow client',\n   {'limit_rps': 1, 'requests': [0, 3000, 6005, 6500], 'tau_ms': 2000},\n   [['allow', 0.0], ['allow', 0.259], ['allow', 0.316], ['allow', 0.69]]]]]\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-ewma-rate-throttle-monotonic-clock","generated_at":"2026-09-29T14:48:50.709146+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Irregular-interval EWMA estimators throttle clients by smoothed request rate; time-unit and duplicate-timestamp handling decide whether bursts are detected.","repair":"Keep the latest arrival time seen.","root_cause":"The last-arrival time is overwritten with each timestamp.","sha256":"0e10b6befb08b1ae523e09137ce3851cc9e57eec8ccb3b97eecb775ab6a01114","title":"EWMA arrival-rate throttle: late arrival rewinds the clock · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.883,"exit_code":1,"observations":[{"actual":[["allow",0.0],["allow",0.952],["allow",1.813],["allow",2.592],["allow",3.297],["allow",3.935],["allow",4.512],["allow",5.034],["allow",5.507],["allow",5.934]],"check":"steady ten per second","expected":[["allow",0.0],["allow",0.952],["allow",1.813],["allow",2.592],["allow",3.297],["allow",3.935],["allow",4.512],["allow",5.034],["allow",5.507],["allow",5.934]],"passed":true},{"actual":[["allow",0.0],["allow",1.98],["allow",3.921],["allow",5.824],["allow",7.688],["allow",9.499],["allow",2.319]],"check":"burst crosses limit","expected":[["allow",0.0],["allow",1.98],["allow",3.921],["allow",5.824],["allow",7.688],["allow",9.499],["allow",2.319]],"passed":true},{"actual":[["allow",0.0],["allow",1.106],["allow",1.106],["allow",1.106],["allow",1.969],["allow",1.969]],"check":"simultaneous arrivals","expected":[["allow",0.0],["allow",1.106],["allow",1.106],["allow",1.106],["allow",1.966],["allow",1.966]],"passed":false},{"actual":[["allow",0.0],["allow",0.787],["allow",0.787],["allow",1.552],["allow",2.177]],"check":"late arrival ignored for clock","expected":[["allow",0.0],["allow",0.787],["allow",0.787],["allow",1.551],["allow",2.176]],"passed":false},{"actual":[["allow",0.0],["allow",1.386],["allow",2.293],["allow",3.434],["allow",4.712],["allow",5.987],["deny",6.349],["deny",6.098],["allow",3.332],["allow",2.709],["allow",4.07],["allow",3.19]],"check":"random arrivals","expected":[["allow",0.0],["allow",1.386],["allow",2.293],["allow",3.434],["allow",4.712],["allow",5.987],["deny",6.349],["deny",6.098],["allow",3.332],["allow",2.709],["allow",4.07],["allow",3.19]],"passed":true},{"actual":[["allow",0.0],["allow",0.259],["allow",0.317],["allow",0.689]],"check":"slow client","expected":[["allow",0.0],["allow",0.259],["allow",0.317],["allow",0.689]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"steady ten per second\", \"actual\": [[\"allow\", 0.0], [\"allow\", 0.952], [\"allow\", 1.813], [\"allow\", 2.592], [\"allow\", 3.297], [\"allow\", 3.935], [\"allow\", 4.512], [\"allow\", 5.034], [\"allow\", 5.507], [\"allow\", 5.934]], \"expected\": [[\"allow\", 0.0], [\"allow\", 0.952], [\"allow\", 1.813], [\"allow\", 2.592], [\"allow\", 3.297], [\"allow\", 3.935], [\"allow\", 4.512], [\"allow\", 5.034], [\"allow\", 5.507], [\"allow\", 5.934]], \"passed\": true}, {\"check\": \"burst crosses limit\", \"actual\": [[\"allow\", 0.0], [\"allow\", 1.98], [\"allow\", 3.921], [\"allow\", 5.824], [\"allow\", 7.688], [\"allow\", 9.499], [\"allow\", 2.319]], \"expected\": [[\"allow\", 0.0], [\"allow\", 1.98], [\"allow\", 3.921], [\"allow\", 5.824], [\"allow\", 7.688], [\"allow\", 9.499], [\"allow\", 2.319]], \"passed\": true}, {\"check\": \"simultaneous arrivals\", \"actual\": [[\"allow\", 0.0], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.969], [\"allow\", 1.969]], \"expected\": [[\"allow\", 0.0], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.966], [\"allow\", 1.966]], \"passed\": false}, {\"check\": \"late arrival ignored for clock\", \"actual\": [[\"allow\", 0.0], [\"allow\", 0.787], [\"allow\", 0.787], [\"allow\", 1.552], [\"allow\", 2.177]], \"expected\": [[\"allow\", 0.0], [\"allow\", 0.787], [\"allow\", 0.787], [\"allow\", 1.551], [\"allow\", 2.176]], \"passed\": false}, {\"check\": \"random arrivals\", \"actual\": [[\"allow\", 0.0], [\"allow\", 1.386], [\"allow\", 2.293], [\"allow\", 3.434], [\"allow\", 4.712], [\"allow\", 5.987], [\"deny\", 6.349], [\"deny\", 6.098], [\"allow\", 3.332], [\"allow\", 2.709], [\"allow\", 4.07], [\"allow\", 3.19]], \"expected\": [[\"allow\", 0.0], [\"allow\", 1.386], [\"allow\", 2.293], [\"allow\", 3.434], [\"allow\", 4.712], [\"allow\", 5.987], [\"deny\", 6.349], [\"deny\", 6.098], [\"allow\", 3.332], [\"allow\", 2.709], [\"allow\", 4.07], [\"allow\", 3.19]], \"passed\": true}, {\"check\": \"slow client\", \"actual\": [[\"allow\", 0.0], [\"allow\", 0.259], [\"allow\", 0.317], [\"allow\", 0.689]], \"expected\": [[\"allow\", 0.0], [\"allow\", 0.259], [\"allow\", 0.317], [\"allow\", 0.689]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.145,"exit_code":1,"observations":[{"actual":[["allow",0.0],["allow",0.952],["allow",1.813],["allow",2.592],["allow",3.297],["allow",3.935],["allow",4.512],["allow",5.034],["allow",5.507],["allow",5.934]],"check":"steady ten per second","expected":[["allow",0.0],["allow",0.952],["allow",1.813],["allow",2.592],["allow",3.297],["allow",3.935],["allow",4.512],["allow",5.034],["allow",5.507],["allow",5.934]],"passed":true},{"actual":[["allow",0.0],["allow",1.98],["allow",3.921],["allow",5.824],["allow",7.688],["allow",9.499],["allow",2.319]],"check":"burst crosses limit","expected":[["allow",0.0],["allow",1.98],["allow",3.921],["allow",5.824],["allow",7.688],["allow",9.499],["allow",2.319]],"passed":true},{"actual":[["allow",0.0],["allow",1.106],["allow",1.106],["allow",1.106],["allow",1.966],["allow",1.966]],"check":"simultaneous arrivals","expected":[["allow",0.0],["allow",1.106],["allow",1.106],["allow",1.106],["allow",1.966],["allow",1.966]],"passed":true},{"actual":[["allow",0.0],["allow",0.787],["allow",0.787],["allow",1.353],["allow",2.014]],"check":"late arrival ignored for clock","expected":[["allow",0.0],["allow",0.787],["allow",0.787],["allow",1.551],["allow",2.176]],"passed":false},{"actual":[["allow",0.0],["allow",1.386],["allow",2.293],["allow",3.434],["allow",4.712],["allow",5.987],["deny",6.349],["deny",6.098],["allow",3.332],["allow",2.709],["allow",4.07],["allow",3.19]],"check":"random arrivals","expected":[["allow",0.0],["allow",1.386],["allow",2.293],["allow",3.434],["allow",4.712],["allow",5.987],["deny",6.349],["deny",6.098],["allow",3.332],["allow",2.709],["allow",4.07],["allow",3.19]],"passed":true},{"actual":[["allow",0.0],["allow",0.259],["allow",0.317],["allow",0.689]],"check":"slow client","expected":[["allow",0.0],["allow",0.259],["allow",0.317],["allow",0.689]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"steady ten per second\", \"actual\": [[\"allow\", 0.0], [\"allow\", 0.952], [\"allow\", 1.813], [\"allow\", 2.592], [\"allow\", 3.297], [\"allow\", 3.935], [\"allow\", 4.512], [\"allow\", 5.034], [\"allow\", 5.507], [\"allow\", 5.934]], \"expected\": [[\"allow\", 0.0], [\"allow\", 0.952], [\"allow\", 1.813], [\"allow\", 2.592], [\"allow\", 3.297], [\"allow\", 3.935], [\"allow\", 4.512], [\"allow\", 5.034], [\"allow\", 5.507], [\"allow\", 5.934]], \"passed\": true}, {\"check\": \"burst crosses limit\", \"actual\": [[\"allow\", 0.0], [\"allow\", 1.98], [\"allow\", 3.921], [\"allow\", 5.824], [\"allow\", 7.688], [\"allow\", 9.499], [\"allow\", 2.319]], \"expected\": [[\"allow\", 0.0], [\"allow\", 1.98], [\"allow\", 3.921], [\"allow\", 5.824], [\"allow\", 7.688], [\"allow\", 9.499], [\"allow\", 2.319]], \"passed\": true}, {\"check\": \"simultaneous arrivals\", \"actual\": [[\"allow\", 0.0], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.966], [\"allow\", 1.966]], \"expected\": [[\"allow\", 0.0], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.966], [\"allow\", 1.966]], \"passed\": true}, {\"check\": \"late arrival ignored for clock\", \"actual\": [[\"allow\", 0.0], [\"allow\", 0.787], [\"allow\", 0.787], [\"allow\", 1.353], [\"allow\", 2.014]], \"expected\": [[\"allow\", 0.0], [\"allow\", 0.787], [\"allow\", 0.787], [\"allow\", 1.551], [\"allow\", 2.176]], \"passed\": false}, {\"check\": \"random arrivals\", \"actual\": [[\"allow\", 0.0], [\"allow\", 1.386], [\"allow\", 2.293], [\"allow\", 3.434], [\"allow\", 4.712], [\"allow\", 5.987], [\"deny\", 6.349], [\"deny\", 6.098], [\"allow\", 3.332], [\"allow\", 2.709], [\"allow\", 4.07], [\"allow\", 3.19]], \"expected\": [[\"allow\", 0.0], [\"allow\", 1.386], [\"allow\", 2.293], [\"allow\", 3.434], [\"allow\", 4.712], [\"allow\", 5.987], [\"deny\", 6.349], [\"deny\", 6.098], [\"allow\", 3.332], [\"allow\", 2.709], [\"allow\", 4.07], [\"allow\", 3.19]], \"passed\": true}, {\"check\": \"slow client\", \"actual\": [[\"allow\", 0.0], [\"allow\", 0.259], [\"allow\", 0.317], [\"allow\", 0.689]], \"expected\": [[\"allow\", 0.0], [\"allow\", 0.259], [\"allow\", 0.317], [\"allow\", 0.689]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.84,"exit_code":0,"observations":[{"actual":[["allow",0.0],["allow",0.952],["allow",1.813],["allow",2.592],["allow",3.297],["allow",3.935],["allow",4.512],["allow",5.034],["allow",5.507],["allow",5.934]],"check":"steady ten per second","expected":[["allow",0.0],["allow",0.952],["allow",1.813],["allow",2.592],["allow",3.297],["allow",3.935],["allow",4.512],["allow",5.034],["allow",5.507],["allow",5.934]],"passed":true},{"actual":[["allow",0.0],["allow",1.98],["allow",3.921],["allow",5.824],["allow",7.688],["allow",9.499],["allow",2.319]],"check":"burst crosses limit","expected":[["allow",0.0],["allow",1.98],["allow",3.921],["allow",5.824],["allow",7.688],["allow",9.499],["allow",2.319]],"passed":true},{"actual":[["allow",0.0],["allow",1.106],["allow",1.106],["allow",1.106],["allow",1.966],["allow",1.966]],"check":"simultaneous arrivals","expected":[["allow",0.0],["allow",1.106],["allow",1.106],["allow",1.106],["allow",1.966],["allow",1.966]],"passed":true},{"actual":[["allow",0.0],["allow",0.787],["allow",0.787],["allow",1.551],["allow",2.176]],"check":"late arrival ignored for clock","expected":[["allow",0.0],["allow",0.787],["allow",0.787],["allow",1.551],["allow",2.176]],"passed":true},{"actual":[["allow",0.0],["allow",1.386],["allow",2.293],["allow",3.434],["allow",4.712],["allow",5.987],["deny",6.349],["deny",6.098],["allow",3.332],["allow",2.709],["allow",4.07],["allow",3.19]],"check":"random arrivals","expected":[["allow",0.0],["allow",1.386],["allow",2.293],["allow",3.434],["allow",4.712],["allow",5.987],["deny",6.349],["deny",6.098],["allow",3.332],["allow",2.709],["allow",4.07],["allow",3.19]],"passed":true},{"actual":[["allow",0.0],["allow",0.259],["allow",0.317],["allow",0.689]],"check":"slow client","expected":[["allow",0.0],["allow",0.259],["allow",0.317],["allow",0.689]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"steady ten per second\", \"actual\": [[\"allow\", 0.0], [\"allow\", 0.952], [\"allow\", 1.813], [\"allow\", 2.592], [\"allow\", 3.297], [\"allow\", 3.935], [\"allow\", 4.512], [\"allow\", 5.034], [\"allow\", 5.507], [\"allow\", 5.934]], \"expected\": [[\"allow\", 0.0], [\"allow\", 0.952], [\"allow\", 1.813], [\"allow\", 2.592], [\"allow\", 3.297], [\"allow\", 3.935], [\"allow\", 4.512], [\"allow\", 5.034], [\"allow\", 5.507], [\"allow\", 5.934]], \"passed\": true}, {\"check\": \"burst crosses limit\", \"actual\": [[\"allow\", 0.0], [\"allow\", 1.98], [\"allow\", 3.921], [\"allow\", 5.824], [\"allow\", 7.688], [\"allow\", 9.499], [\"allow\", 2.319]], \"expected\": [[\"allow\", 0.0], [\"allow\", 1.98], [\"allow\", 3.921], [\"allow\", 5.824], [\"allow\", 7.688], [\"allow\", 9.499], [\"allow\", 2.319]], \"passed\": true}, {\"check\": \"simultaneous arrivals\", \"actual\": [[\"allow\", 0.0], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.966], [\"allow\", 1.966]], \"expected\": [[\"allow\", 0.0], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.106], [\"allow\", 1.966], [\"allow\", 1.966]], \"passed\": true}, {\"check\": \"late arrival ignored for clock\", \"actual\": [[\"allow\", 0.0], [\"allow\", 0.787], [\"allow\", 0.787], [\"allow\", 1.551], [\"allow\", 2.176]], \"expected\": [[\"allow\", 0.0], [\"allow\", 0.787], [\"allow\", 0.787], [\"allow\", 1.551], [\"allow\", 2.176]], \"passed\": true}, {\"check\": \"random arrivals\", \"actual\": [[\"allow\", 0.0], [\"allow\", 1.386], [\"allow\", 2.293], [\"allow\", 3.434], [\"allow\", 4.712], [\"allow\", 5.987], [\"deny\", 6.349], [\"deny\", 6.098], [\"allow\", 3.332], [\"allow\", 2.709], [\"allow\", 4.07], [\"allow\", 3.19]], \"expected\": [[\"allow\", 0.0], [\"allow\", 1.386], [\"allow\", 2.293], [\"allow\", 3.434], [\"allow\", 4.712], [\"allow\", 5.987], [\"deny\", 6.349], [\"deny\", 6.098], [\"allow\", 3.332], [\"allow\", 2.709], [\"allow\", 4.07], [\"allow\", 3.19]], \"passed\": true}, {\"check\": \"slow client\", \"actual\": [[\"allow\", 0.0], [\"allow\", 0.259], [\"allow\", 0.317], [\"allow\", 0.689]], \"expected\": [[\"allow\", 0.0], [\"allow\", 0.259], [\"allow\", 0.317], [\"allow\", 0.689]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}