{"abstract":"Requests larger than the burst receive retry hints that can never succeed.","category":"Rate limiter algorithms","checks":6,"contract":"Input {period_ms T, burst B, requests [[t, quantity]]}. State TAT starts at 0. A quantity above B is [\"never\", 0, 0]. Otherwise tat = max(TAT, t) and new_tat = tat + q*T; the request is allowed iff new_tat - t <= B*T, in which case TAT = new_tat and remaining = floor((B*T - (TAT - t))/T). A denied request leaves TAT unchanged and reports retry_after = new_tat - B*T - t and remaining floor((B*T - (tat - t))/T). Return [[decision, retry_after, remaining]].","evaluation_group":"w2-rate_limiter_algorithms-gcra","failed_approach":"Rejecting q equal to B refuses a request an idle limiter can admit.","family":"w2-rate_limiter_algorithms-gcra-oversize-quantity","id":"FA-73396","implementations":{"attempt":{"sha256":"81a18af4b7fd2f7aa8d2645a523b491dc92b9aa83d3102f17e5e1ac98c975e2b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    T = x['period_ms']\n    B = x['burst']\n    TAT = 0\n    out = []\n    for t, q in x['requests']:\n        if q >= B:\n            out.append(['never', 0, 0])\n            continue\n        tat = max(TAT, t)\n        new_tat = tat + q * T\n        if new_tat - t <= B * T:\n            TAT = new_tat\n            out.append(['allow', 0, (B * T - (TAT - t)) // T])\n        else:\n            out.append(['deny', new_tat - B * T - t, (B * T - (tat - t)) // T])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [101, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10010, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 40, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [101, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [41, 2], [5, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [201, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[8, 2],\n                 [57, 1],\n                 [84, 2],\n                 [163, 2],\n                 [383, 1],\n                 [525, 2],\n                 [624, 2],\n                 [997, 1],\n                 [1402, 2],\n                 [1869, 2]]},\n   [['allow', 0, 2],\n    ['allow', 0, 1],\n    ['deny', 24, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 1],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 2]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [102, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10020, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 30, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [102, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [42, 2], [10, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [202, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[67, 2],\n                 [137, 1],\n                 [249, 1],\n                 [594, 1],\n                 [681, 2],\n                 [826, 1],\n                 [1250, 1],\n                 [1428, 1],\n                 [1433, 2],\n                 [1483, 2]]},\n   [['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 1],\n    ['allow', 0, 3],\n    ['allow', 0, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 3],\n    ['allow', 0, 3],\n    ['allow', 0, 1],\n    ['deny', 45, 1]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [103, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10030, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 20, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [103, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [43, 2], [15, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [203, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[56, 1],\n                 [339, 2],\n                 [932, 1],\n                 [1203, 2],\n                 [1327, 2],\n                 [1505, 1],\n                 [1614, 2],\n                 [1774, 2],\n                 [1930, 1],\n                 [1938, 2]]},\n   [['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 1],\n    ['deny', 65, 1]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [104, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10040, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 10, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [104, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [44, 2], [20, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [204, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[415, 1],\n                 [479, 1],\n                 [592, 1],\n                 [602, 2],\n                 [683, 2],\n                 [973, 2],\n                 [1658, 1],\n                 [1708, 2],\n                 [1784, 1],\n                 [1789, 2]]},\n   [['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 0],\n    ['deny', 32, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 3],\n    ['allow', 0, 1],\n    ['allow', 0, 1],\n    ['deny', 69, 1]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [105, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10050, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['allow', 0, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [105, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [45, 2], [25, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [205, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[293, 2],\n                 [620, 2],\n                 [635, 1],\n                 [1275, 2],\n                 [1525, 2],\n                 [1565, 1],\n                 [1595, 2],\n                 [1614, 1],\n                 [1806, 2],\n                 [1874, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['deny', 30, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]]]]\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":"c7812635dc972855542693d31ffcb85bae9ca33aeae0838295d2ebdfe7f1e585","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    T = x['period_ms']\n    B = x['burst']\n    TAT = 0\n    out = []\n    for t, q in x['requests']:\n        if q > B * T:\n            out.append(['never', 0, 0])\n            continue\n        tat = max(TAT, t)\n        new_tat = tat + q * T\n        if new_tat - t <= B * T:\n            TAT = new_tat\n            out.append(['allow', 0, (B * T - (TAT - t)) // T])\n        else:\n            out.append(['deny', new_tat - B * T - t, (B * T - (tat - t)) // T])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [101, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10010, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 40, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [101, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [41, 2], [5, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [201, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[8, 2],\n                 [57, 1],\n                 [84, 2],\n                 [163, 2],\n                 [383, 1],\n                 [525, 2],\n                 [624, 2],\n                 [997, 1],\n                 [1402, 2],\n                 [1869, 2]]},\n   [['allow', 0, 2],\n    ['allow', 0, 1],\n    ['deny', 24, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 1],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 2]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [102, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10020, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 30, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [102, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [42, 2], [10, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [202, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[67, 2],\n                 [137, 1],\n                 [249, 1],\n                 [594, 1],\n                 [681, 2],\n                 [826, 1],\n                 [1250, 1],\n                 [1428, 1],\n                 [1433, 2],\n                 [1483, 2]]},\n   [['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 1],\n    ['allow', 0, 3],\n    ['allow', 0, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 3],\n    ['allow', 0, 3],\n    ['allow', 0, 1],\n    ['deny', 45, 1]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [103, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10030, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 20, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [103, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [43, 2], [15, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [203, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[56, 1],\n                 [339, 2],\n                 [932, 1],\n                 [1203, 2],\n                 [1327, 2],\n                 [1505, 1],\n                 [1614, 2],\n                 [1774, 2],\n                 [1930, 1],\n                 [1938, 2]]},\n   [['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 1],\n    ['deny', 65, 1]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [104, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10040, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 10, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [104, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [44, 2], [20, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [204, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[415, 1],\n                 [479, 1],\n                 [592, 1],\n                 [602, 2],\n                 [683, 2],\n                 [973, 2],\n                 [1658, 1],\n                 [1708, 2],\n                 [1784, 1],\n                 [1789, 2]]},\n   [['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 0],\n    ['deny', 32, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 3],\n    ['allow', 0, 1],\n    ['allow', 0, 1],\n    ['deny', 69, 1]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [105, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10050, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['allow', 0, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [105, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [45, 2], [25, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [205, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[293, 2],\n                 [620, 2],\n                 [635, 1],\n                 [1275, 2],\n                 [1525, 2],\n                 [1565, 1],\n                 [1595, 2],\n                 [1614, 1],\n                 [1806, 2],\n                 [1874, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['deny', 30, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]]]]\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":"4813819e5702a7ff6ba793d3d1f2ce7cee700f3f6586f8372b17a723b314ce6d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    T = x['period_ms']\n    B = x['burst']\n    TAT = 0\n    out = []\n    for t, q in x['requests']:\n        if q > B:\n            out.append(['never', 0, 0])\n            continue\n        tat = max(TAT, t)\n        new_tat = tat + q * T\n        if new_tat - t <= B * T:\n            TAT = new_tat\n            out.append(['allow', 0, (B * T - (TAT - t)) // T])\n        else:\n            out.append(['deny', new_tat - B * T - t, (B * T - (tat - t)) // T])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [101, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10010, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 40, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [101, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [41, 2], [5, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [201, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[8, 2],\n                 [57, 1],\n                 [84, 2],\n                 [163, 2],\n                 [383, 1],\n                 [525, 2],\n                 [624, 2],\n                 [997, 1],\n                 [1402, 2],\n                 [1869, 2]]},\n   [['allow', 0, 2],\n    ['allow', 0, 1],\n    ['deny', 24, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 1],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 2]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [102, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10020, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 30, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [102, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [42, 2], [10, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [202, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[67, 2],\n                 [137, 1],\n                 [249, 1],\n                 [594, 1],\n                 [681, 2],\n                 [826, 1],\n                 [1250, 1],\n                 [1428, 1],\n                 [1433, 2],\n                 [1483, 2]]},\n   [['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 1],\n    ['allow', 0, 3],\n    ['allow', 0, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 3],\n    ['allow', 0, 3],\n    ['allow', 0, 1],\n    ['deny', 45, 1]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [103, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10030, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 20, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [103, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [43, 2], [15, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [203, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[56, 1],\n                 [339, 2],\n                 [932, 1],\n                 [1203, 2],\n                 [1327, 2],\n                 [1505, 1],\n                 [1614, 2],\n                 [1774, 2],\n                 [1930, 1],\n                 [1938, 2]]},\n   [['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 1],\n    ['deny', 65, 1]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [104, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10040, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['deny', 10, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [104, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [44, 2], [20, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [204, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[415, 1],\n                 [479, 1],\n                 [592, 1],\n                 [602, 2],\n                 [683, 2],\n                 [973, 2],\n                 [1658, 1],\n                 [1708, 2],\n                 [1784, 1],\n                 [1789, 2]]},\n   [['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 0],\n    ['deny', 32, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 3],\n    ['allow', 0, 1],\n    ['allow', 0, 1],\n    ['deny', 69, 1]]]],\n [['burst of five',\n   {'burst': 5,\n    'period_ms': 100,\n    'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [105, 1], [250, 1]]},\n   [['allow', 0, 4],\n    ['allow', 0, 3],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['idle credit bounded',\n   {'burst': 3,\n    'period_ms': 50,\n    'requests': [[0, 1], [10000, 1], [10000, 1], [10000, 1], [10000, 1], [10050, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 50, 0],\n    ['allow', 0, 0]]],\n  ['denied requests do not push tat',\n   {'burst': 2, 'period_ms': 100, 'requests': [[0, 1], [0, 1], [0, 1], [0, 1], [105, 1], [200, 1]]},\n   [['allow', 0, 1],\n    ['allow', 0, 0],\n    ['deny', 100, 0],\n    ['deny', 100, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]],\n  ['multi-unit request',\n   {'burst': 4, 'period_ms': 20, 'requests': [[0, 3], [0, 2], [45, 2], [25, 5]]},\n   [['allow', 0, 1], ['deny', 20, 1], ['allow', 0, 1], ['never', 0, 0]]],\n  ['exact tolerance edge',\n   {'burst': 3, 'period_ms': 100, 'requests': [[0, 3], [100, 1], [150, 1], [205, 1]]},\n   [['allow', 0, 0], ['allow', 0, 0], ['deny', 50, 0], ['allow', 0, 0]]],\n  ['random traffic',\n   {'burst': 4,\n    'period_ms': 100,\n    'requests': [[293, 2],\n                 [620, 2],\n                 [635, 1],\n                 [1275, 2],\n                 [1525, 2],\n                 [1565, 1],\n                 [1595, 2],\n                 [1614, 1],\n                 [1806, 2],\n                 [1874, 1]]},\n   [['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['allow', 0, 2],\n    ['allow', 0, 2],\n    ['allow', 0, 1],\n    ['deny', 30, 1],\n    ['allow', 0, 0],\n    ['allow', 0, 0],\n    ['allow', 0, 0]]]]]\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-gcra-oversize-quantity","generated_at":"2026-09-29T14:48:47.254784+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"GCRA limiters store a single theoretical-arrival timestamp per key; every decision and header value is derived from it, so small formula errors leak bursts or starve clients.","repair":"Reject quantities greater than B as never satisfiable.","root_cause":"The impossible-quantity check compares the quantity against B*T milliseconds.","sha256":"c2597db9200da6762c76745090bf01c404bf8473dc02ad2097da1d93b839eae9","title":"Generic cell rate algorithm limiter: oversize check compares units with time · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.537,"exit_code":1,"observations":[{"actual":[["allow",0,4],["allow",0,3],["allow",0,2],["allow",0,1],["allow",0,0],["deny",100,0],["allow",0,0],["allow",0,0]],"check":"burst of five","expected":[["allow",0,4],["allow",0,3],["allow",0,2],["allow",0,1],["allow",0,0],["deny",100,0],["allow",0,0],["allow",0,0]],"passed":true},{"actual":[["allow",0,2],["allow",0,2],["allow",0,1],["allow",0,0],["deny",50,0],["deny",40,0]],"check":"idle credit bounded","expected":[["allow",0,2],["allow",0,2],["allow",0,1],["allow",0,0],["deny",50,0],["deny",40,0]],"passed":true},{"actual":[["allow",0,1],["allow",0,0],["deny",100,0],["deny",100,0],["allow",0,0],["allow",0,0]],"check":"denied requests do not push tat","expected":[["allow",0,1],["allow",0,0],["deny",100,0],["deny",100,0],["allow",0,0],["allow",0,0]],"passed":true},{"actual":[["allow",0,1],["deny",20,1],["allow",0,1],["never",0,0]],"check":"multi-unit request","expected":[["allow",0,1],["deny",20,1],["allow",0,1],["never",0,0]],"passed":true},{"actual":[["never",0,0],["allow",0,2],["allow",0,1],["allow",0,1]],"check":"exact tolerance edge","expected":[["allow",0,0],["allow",0,0],["deny",50,0],["allow",0,0]],"passed":false},{"actual":[["allow",0,2],["allow",0,1],["deny",24,1],["allow",0,0],["allow",0,1],["allow",0,1],["allow",0,0],["allow",0,2],["allow",0,2],["allow",0,2]],"check":"random traffic","expected":[["allow",0,2],["allow",0,1],["deny",24,1],["allow",0,0],["allow",0,1],["allow",0,1],["allow",0,0],["allow",0,2],["allow",0,2],["allow",0,2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"burst of five\", \"actual\": [[\"allow\", 0, 4], [\"allow\", 0, 3], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"expected\": [[\"allow\", 0, 4], [\"allow\", 0, 3], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"passed\": true}, {\"check\": \"idle credit bounded\", \"actual\": [[\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"deny\", 40, 0]], \"expected\": [[\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"deny\", 40, 0]], \"passed\": true}, {\"check\": \"denied requests do not push tat\", \"actual\": [[\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"expected\": [[\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"passed\": true}, {\"check\": \"multi-unit request\", \"actual\": [[\"allow\", 0, 1], [\"deny\", 20, 1], [\"allow\", 0, 1], [\"never\", 0, 0]], \"expected\": [[\"allow\", 0, 1], [\"deny\", 20, 1], [\"allow\", 0, 1], [\"never\", 0, 0]], \"passed\": true}, {\"check\": \"exact tolerance edge\", \"actual\": [[\"never\", 0, 0], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 1]], \"expected\": [[\"allow\", 0, 0], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"allow\", 0, 0]], \"passed\": false}, {\"check\": \"random traffic\", \"actual\": [[\"allow\", 0, 2], [\"allow\", 0, 1], [\"deny\", 24, 1], [\"allow\", 0, 0], [\"allow\", 0, 1], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 2]], \"expected\": [[\"allow\", 0, 2], [\"allow\", 0, 1], [\"deny\", 24, 1], [\"allow\", 0, 0], [\"allow\", 0, 1], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 2]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.773,"exit_code":1,"observations":[{"actual":[["allow",0,4],["allow",0,3],["allow",0,2],["allow",0,1],["allow",0,0],["deny",100,0],["allow",0,0],["allow",0,0]],"check":"burst of five","expected":[["allow",0,4],["allow",0,3],["allow",0,2],["allow",0,1],["allow",0,0],["deny",100,0],["allow",0,0],["allow",0,0]],"passed":true},{"actual":[["allow",0,2],["allow",0,2],["allow",0,1],["allow",0,0],["deny",50,0],["deny",40,0]],"check":"idle credit bounded","expected":[["allow",0,2],["allow",0,2],["allow",0,1],["allow",0,0],["deny",50,0],["deny",40,0]],"passed":true},{"actual":[["allow",0,1],["allow",0,0],["deny",100,0],["deny",100,0],["allow",0,0],["allow",0,0]],"check":"denied requests do not push tat","expected":[["allow",0,1],["allow",0,0],["deny",100,0],["deny",100,0],["allow",0,0],["allow",0,0]],"passed":true},{"actual":[["allow",0,1],["deny",20,1],["allow",0,1],["deny",115,-1]],"check":"multi-unit request","expected":[["allow",0,1],["deny",20,1],["allow",0,1],["never",0,0]],"passed":false},{"actual":[["allow",0,0],["allow",0,0],["deny",50,0],["allow",0,0]],"check":"exact tolerance edge","expected":[["allow",0,0],["allow",0,0],["deny",50,0],["allow",0,0]],"passed":true},{"actual":[["allow",0,2],["allow",0,1],["deny",24,1],["allow",0,0],["allow",0,1],["allow",0,1],["allow",0,0],["allow",0,2],["allow",0,2],["allow",0,2]],"check":"random traffic","expected":[["allow",0,2],["allow",0,1],["deny",24,1],["allow",0,0],["allow",0,1],["allow",0,1],["allow",0,0],["allow",0,2],["allow",0,2],["allow",0,2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"burst of five\", \"actual\": [[\"allow\", 0, 4], [\"allow\", 0, 3], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"expected\": [[\"allow\", 0, 4], [\"allow\", 0, 3], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"passed\": true}, {\"check\": \"idle credit bounded\", \"actual\": [[\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"deny\", 40, 0]], \"expected\": [[\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"deny\", 40, 0]], \"passed\": true}, {\"check\": \"denied requests do not push tat\", \"actual\": [[\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"expected\": [[\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"passed\": true}, {\"check\": \"multi-unit request\", \"actual\": [[\"allow\", 0, 1], [\"deny\", 20, 1], [\"allow\", 0, 1], [\"deny\", 115, -1]], \"expected\": [[\"allow\", 0, 1], [\"deny\", 20, 1], [\"allow\", 0, 1], [\"never\", 0, 0]], \"passed\": false}, {\"check\": \"exact tolerance edge\", \"actual\": [[\"allow\", 0, 0], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"allow\", 0, 0]], \"expected\": [[\"allow\", 0, 0], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"allow\", 0, 0]], \"passed\": true}, {\"check\": \"random traffic\", \"actual\": [[\"allow\", 0, 2], [\"allow\", 0, 1], [\"deny\", 24, 1], [\"allow\", 0, 0], [\"allow\", 0, 1], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 2]], \"expected\": [[\"allow\", 0, 2], [\"allow\", 0, 1], [\"deny\", 24, 1], [\"allow\", 0, 0], [\"allow\", 0, 1], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 2]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":36.939,"exit_code":0,"observations":[{"actual":[["allow",0,4],["allow",0,3],["allow",0,2],["allow",0,1],["allow",0,0],["deny",100,0],["allow",0,0],["allow",0,0]],"check":"burst of five","expected":[["allow",0,4],["allow",0,3],["allow",0,2],["allow",0,1],["allow",0,0],["deny",100,0],["allow",0,0],["allow",0,0]],"passed":true},{"actual":[["allow",0,2],["allow",0,2],["allow",0,1],["allow",0,0],["deny",50,0],["deny",40,0]],"check":"idle credit bounded","expected":[["allow",0,2],["allow",0,2],["allow",0,1],["allow",0,0],["deny",50,0],["deny",40,0]],"passed":true},{"actual":[["allow",0,1],["allow",0,0],["deny",100,0],["deny",100,0],["allow",0,0],["allow",0,0]],"check":"denied requests do not push tat","expected":[["allow",0,1],["allow",0,0],["deny",100,0],["deny",100,0],["allow",0,0],["allow",0,0]],"passed":true},{"actual":[["allow",0,1],["deny",20,1],["allow",0,1],["never",0,0]],"check":"multi-unit request","expected":[["allow",0,1],["deny",20,1],["allow",0,1],["never",0,0]],"passed":true},{"actual":[["allow",0,0],["allow",0,0],["deny",50,0],["allow",0,0]],"check":"exact tolerance edge","expected":[["allow",0,0],["allow",0,0],["deny",50,0],["allow",0,0]],"passed":true},{"actual":[["allow",0,2],["allow",0,1],["deny",24,1],["allow",0,0],["allow",0,1],["allow",0,1],["allow",0,0],["allow",0,2],["allow",0,2],["allow",0,2]],"check":"random traffic","expected":[["allow",0,2],["allow",0,1],["deny",24,1],["allow",0,0],["allow",0,1],["allow",0,1],["allow",0,0],["allow",0,2],["allow",0,2],["allow",0,2]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"burst of five\", \"actual\": [[\"allow\", 0, 4], [\"allow\", 0, 3], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"expected\": [[\"allow\", 0, 4], [\"allow\", 0, 3], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"passed\": true}, {\"check\": \"idle credit bounded\", \"actual\": [[\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"deny\", 40, 0]], \"expected\": [[\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"deny\", 40, 0]], \"passed\": true}, {\"check\": \"denied requests do not push tat\", \"actual\": [[\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"expected\": [[\"allow\", 0, 1], [\"allow\", 0, 0], [\"deny\", 100, 0], [\"deny\", 100, 0], [\"allow\", 0, 0], [\"allow\", 0, 0]], \"passed\": true}, {\"check\": \"multi-unit request\", \"actual\": [[\"allow\", 0, 1], [\"deny\", 20, 1], [\"allow\", 0, 1], [\"never\", 0, 0]], \"expected\": [[\"allow\", 0, 1], [\"deny\", 20, 1], [\"allow\", 0, 1], [\"never\", 0, 0]], \"passed\": true}, {\"check\": \"exact tolerance edge\", \"actual\": [[\"allow\", 0, 0], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"allow\", 0, 0]], \"expected\": [[\"allow\", 0, 0], [\"allow\", 0, 0], [\"deny\", 50, 0], [\"allow\", 0, 0]], \"passed\": true}, {\"check\": \"random traffic\", \"actual\": [[\"allow\", 0, 2], [\"allow\", 0, 1], [\"deny\", 24, 1], [\"allow\", 0, 0], [\"allow\", 0, 1], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 2]], \"expected\": [[\"allow\", 0, 2], [\"allow\", 0, 1], [\"deny\", 24, 1], [\"allow\", 0, 0], [\"allow\", 0, 1], [\"allow\", 0, 1], [\"allow\", 0, 0], [\"allow\", 0, 2], [\"allow\", 0, 2], [\"allow\", 0, 2]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}