FAILURE MAP
← Case archive

FA-73476 / Rate limiter algorithms / Open access

Sliding-window counter approximation: elapsed measured from the previous window · case 01

The first request of a new window computes a negative overlap and under-counts.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Elapsed time is computed before the window index is advanced.

THE FAILURE

Elapsed time is computed before the window index is advanced.

Unsuccessful approach: Adding one millisecond shifts every weight.

Case contract

Input {limit, window_ms, requests [t]} with nondecreasing t. Keep counts for the current and previous epoch windows; moving to the next window rotates cur into prev, skipping more than one window clears both. The estimate is prev * (W - elapsed)/W + cur with elapsed = t - window start, exactly. Allow when est + 1 <= limit (reporting est + 1), else deny (reporting est). Return [[decision, estimate as fraction string]], [window, prev, cur]].

Why this case matters

Edge proxies approximate a rolling window with two counters; the weighting and rotation rules determine whether boundary bursts are smoothed or doubled.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(x):
    L = x['limit']
    W = x['window_ms']
    idx, prev, cur = 0, 0, 0
    out = []
    for t in x['requests']:
        ci = t // W
        if ci == idx + 1:
            prev, cur = cur, 0
        elif ci > idx + 1:
            prev, cur = 0, 0
        elapsed = t - idx * W
        idx = ci
        est = prev * Fraction(W - elapsed, W) + cur
        if est + 1 <= L:
            cur += 1
            out.append(['allow', str(est + 1)])
        else:
            out.append(['deny', str(est)])
    return [out, [idx, prev, cur]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1251, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '999/250'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2601, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3501, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1601, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '2197/1000'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 401, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '399/80'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [762, 1183, 1614, 1772, 2334, 2411, 2425, 2509, 2551, 2560, 2651, 2748, 2860, 2881],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '1817/1000'],
     ['allow', '1193/500'],
     ['allow', '807/250'],
     ['allow', '1499/500'],
     ['allow', '3767/1000'],
     ['deny', '149/40'],
     ['deny', '3473/1000'],
     ['deny', '3347/1000'],
     ['deny', '83/25'],
     ['deny', '3047/1000'],
     ['allow', '939/250'],
     ['deny', '171/50'],
     ['deny', '3357/1000']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 31], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],
 [['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1252, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '499/125'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2602, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3502, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1602, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '1097/500'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 402, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '199/40'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [2, 284, 685, 716, 946, 1419, 1442, 1550, 1788, 1900, 2219, 2384, 2628, 2704],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['deny', '4'],
     ['allow', '831/250'],
     ['deny', '404/125'],
     ['allow', '19/5'],
     ['allow', '481/125'],
     ['deny', '17/5'],
     ['allow', '3343/1000'],
     ['allow', '481/125'],
     ['deny', '779/250'],
     ['allow', '486/125']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 32], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],
 [['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1253, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '997/250'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2603, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3503, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1603, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '2191/1000'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 403, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '397/80'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [88, 165, 511, 523, 538, 1193, 1202, 1389, 1722, 1826, 2373, 2548, 2774, 2968],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['deny', '4'],
     ['deny', '807/250'],
     ['deny', '399/125'],
     ['allow', '861/250'],
     ['allow', '389/125'],
     ['allow', '462/125'],
     ['allow', '2881/1000'],
     ['allow', '839/250'],
     ['allow', '1839/500'],
     ['deny', '387/125']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 33], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],
 [['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1254, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '498/125'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2604, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3504, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1604, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '547/250'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 404, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '99/20'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [113, 180, 253, 634, 1224, 1448, 1496, 1722, 1887, 2254, 2425, 2792, 2877, 2945],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['deny', '388/125'],
     ['allow', '401/125'],
     ['deny', '377/125'],
     ['allow', '389/125'],
     ['allow', '863/250'],
     ['allow', '1619/500'],
     ['allow', '149/40'],
     ['allow', '453/125'],
     ['deny', '3369/1000'],
     ['deny', '633/200']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 34], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],
 [['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1255, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '199/50'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2605, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3505, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1605, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '437/200'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 405, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '79/16'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [237, 850, 1324, 1370, 1559, 1744, 1852, 2112, 2117, 2141, 2288, 2346, 2510, 2979],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '294/125'],
     ['allow', '163/50'],
     ['allow', '1941/500'],
     ['deny', '439/125'],
     ['deny', '412/125'],
     ['allow', '458/125'],
     ['deny', '3649/1000'],
     ['deny', '3577/1000'],
     ['deny', '392/125'],
     ['allow', '1981/500'],
     ['deny', '347/100'],
     ['allow', '3063/1000']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 35], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]]]
for label, args, expected in cases[N - 1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
previous window weighting[[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '4'], ['allow', '-1/250'], ['allow', '4'], ['allow', '4'], ['deny', '19/5']], [1, 4, 3]][[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '4'], ['allow', '999/250'], ['allow', '4'], ['allow', '4'], ['deny', '19/5']], [1, 4, 3]]Failed
gap clears history[[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '1'], ['allow', '2'], ['allow', '3'], ['deny', '3']], [2, 0, 3]][[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '1'], ['allow', '2'], ['allow', '3'], ['deny', '3']], [2, 0, 3]]Passed
stale previous after gap[[['allow', '1'], ['allow', '2'], ['allow', '4/5'], ['deny', '13/5'], ['allow', '1'], ['allow', '2'], ['allow', '3']], [3, 0, 3]][[['allow', '1'], ['allow', '2'], ['allow', '14/5'], ['deny', '13/5'], ['allow', '1'], ['allow', '2'], ['allow', '3']], [3, 0, 3]]Failed
fractional estimate boundary[[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '-1/2'], ['deny', '2197/1000'], ['allow', '29/10']], [1, 3, 2]][[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '5/2'], ['deny', '2197/1000'], ['allow', '29/10']], [1, 3, 2]]Failed
early in window[[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '4'], ['allow', '5'], ['allow', '79/80'], ['deny', '47/8'], ['deny', '23/4'], ['allow', '1'], ['allow', '1199/400']], [2, 1, 2]][[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '4'], ['allow', '5'], ['deny', '399/80'], ['deny', '39/8'], ['deny', '19/4'], ['allow', '1'], ['allow', '2']], [2, 0, 2]]Failed
random traffic[[['allow', '1'], ['allow', '817/1000'], ['allow', '1193/500'], ['allow', '807/250'], ['allow', '-1/500'], ['allow', '3767/1000'], ['deny', '149/40'], ['deny', '3473/1000'], ['deny', '3347/1000'], ['deny', '83/25'], ['deny', '3047/1000'], ['allow', '939/250'], ['deny', '171/50'], ['deny', '3357/1000']], [2, 3, 3]][[['allow', '1'], ['allow', '1817/1000'], ['allow', '1193/500'], ['allow', '807/250'], ['allow', '1499/500'], ['allow', '3767/1000'], ['deny', '149/40'], ['deny', '3473/1000'], ['deny', '3347/1000'], ['deny', '83/25'], ['deny', '3047/1000'], ['allow', '939/250'], ['deny', '171/50'], ['deny', '3357/1000']], [2, 3, 3]]Failed
single window[[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]][[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]Passed

SHA-256 / dba33e48280a981ba4961fb82fc13b5eab8c7ed0160656d7def59485694d91d4

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(x):
    L = x['limit']
    W = x['window_ms']
    idx, prev, cur = 0, 0, 0
    out = []
    for t in x['requests']:
        ci = t // W
        if ci == idx + 1:
            prev, cur = cur, 0
        elif ci > idx + 1:
            prev, cur = 0, 0
        idx = ci
        elapsed = t % W + 1
        est = prev * Fraction(W - elapsed, W) + cur
        if est + 1 <= L:
            cur += 1
            out.append(['allow', str(est + 1)])
        else:
            out.append(['deny', str(est)])
    return [out, [idx, prev, cur]]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1251, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '999/250'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2601, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3501, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1601, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '2197/1000'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 401, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '399/80'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [762, 1183, 1614, 1772, 2334, 2411, 2425, 2509, 2551, 2560, 2651, 2748, 2860, 2881],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '1817/1000'],
     ['allow', '1193/500'],
     ['allow', '807/250'],
     ['allow', '1499/500'],
     ['allow', '3767/1000'],
     ['deny', '149/40'],
     ['deny', '3473/1000'],
     ['deny', '3347/1000'],
     ['deny', '83/25'],
     ['deny', '3047/1000'],
     ['allow', '939/250'],
     ['deny', '171/50'],
     ['deny', '3357/1000']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 31], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],
 [['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1252, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '499/125'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2602, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3502, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1602, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '1097/500'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 402, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '199/40'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [2, 284, 685, 716, 946, 1419, 1442, 1550, 1788, 1900, 2219, 2384, 2628, 2704],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['deny', '4'],
     ['allow', '831/250'],
     ['deny', '404/125'],
     ['allow', '19/5'],
     ['allow', '481/125'],
     ['deny', '17/5'],
     ['allow', '3343/1000'],
     ['allow', '481/125'],
     ['deny', '779/250'],
     ['allow', '486/125']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 32], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],
 [['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1253, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '997/250'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2603, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3503, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1603, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '2191/1000'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 403, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '397/80'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [88, 165, 511, 523, 538, 1193, 1202, 1389, 1722, 1826, 2373, 2548, 2774, 2968],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['deny', '4'],
     ['deny', '807/250'],
     ['deny', '399/125'],
     ['allow', '861/250'],
     ['allow', '389/125'],
     ['allow', '462/125'],
     ['allow', '2881/1000'],
     ['allow', '839/250'],
     ['allow', '1839/500'],
     ['deny', '387/125']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 33], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],
 [['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1254, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '498/125'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2604, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3504, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1604, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '547/250'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 404, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '99/20'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [113, 180, 253, 634, 1224, 1448, 1496, 1722, 1887, 2254, 2425, 2792, 2877, 2945],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['deny', '388/125'],
     ['allow', '401/125'],
     ['deny', '377/125'],
     ['allow', '389/125'],
     ['allow', '863/250'],
     ['allow', '1619/500'],
     ['allow', '149/40'],
     ['allow', '453/125'],
     ['deny', '3369/1000'],
     ['deny', '633/200']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 34], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]],
 [['previous window weighting',
   {'limit': 4, 'requests': [100, 200, 300, 400, 1255, 1500, 1750, 1800], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '199/50'],
     ['allow', '4'],
     ['allow', '4'],
     ['deny', '19/5']],
    [1, 4, 3]]],
  ['gap clears history',
   {'limit': 3, 'requests': [0, 1, 2, 2605, 2700, 2800, 2900], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['deny', '3']],
    [2, 0, 3]]],
  ['stale previous after gap',
   {'limit': 3, 'requests': [100, 200, 1100, 1200, 3505, 3600, 3700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '14/5'],
     ['deny', '13/5'],
     ['allow', '1'],
     ['allow', '2'],
     ['allow', '3']],
    [3, 0, 3]]],
  ['fractional estimate boundary',
   {'limit': 3, 'requests': [0, 10, 20, 1500, 1605, 1700], 'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '5/2'],
     ['deny', '437/200'],
     ['allow', '29/10']],
    [1, 3, 2]]],
  ['early in window',
   {'limit': 5, 'requests': [0, 50, 100, 150, 200, 405, 410, 420, 800, 801], 'window_ms': 400},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '3'],
     ['allow', '4'],
     ['allow', '5'],
     ['deny', '79/16'],
     ['deny', '39/8'],
     ['deny', '19/4'],
     ['allow', '1'],
     ['allow', '2']],
    [2, 0, 2]]],
  ['random traffic',
   {'limit': 4,
    'requests': [237, 850, 1324, 1370, 1559, 1744, 1852, 2112, 2117, 2141, 2288, 2346, 2510, 2979],
    'window_ms': 1000},
   [[['allow', '1'],
     ['allow', '2'],
     ['allow', '294/125'],
     ['allow', '163/50'],
     ['allow', '1941/500'],
     ['deny', '439/125'],
     ['deny', '412/125'],
     ['allow', '458/125'],
     ['deny', '3649/1000'],
     ['deny', '3577/1000'],
     ['deny', '392/125'],
     ['allow', '1981/500'],
     ['deny', '347/100'],
     ['allow', '3063/1000']],
    [2, 3, 3]]],
  ['single window',
   {'limit': 2, 'requests': [10, 20, 35], 'window_ms': 1000},
   [[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]]]]
for label, args, expected in cases[N - 1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
previous window weighting[[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '4'], ['allow', '499/125'], ['allow', '999/250'], ['allow', '999/250'], ['deny', '949/250']], [1, 4, 3]][[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '4'], ['allow', '999/250'], ['allow', '4'], ['allow', '4'], ['deny', '19/5']], [1, 4, 3]]Failed
gap clears history[[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '1'], ['allow', '2'], ['allow', '3'], ['deny', '3']], [2, 0, 3]][[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '1'], ['allow', '2'], ['allow', '3'], ['deny', '3']], [2, 0, 3]]Passed
stale previous after gap[[['allow', '1'], ['allow', '2'], ['allow', '1399/500'], ['deny', '1299/500'], ['allow', '1'], ['allow', '2'], ['allow', '3']], [3, 0, 3]][[['allow', '1'], ['allow', '2'], ['allow', '14/5'], ['deny', '13/5'], ['allow', '1'], ['allow', '2'], ['allow', '3']], [3, 0, 3]]Failed
fractional estimate boundary[[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '2497/1000'], ['deny', '1097/500'], ['allow', '2897/1000']], [1, 3, 2]][[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '5/2'], ['deny', '2197/1000'], ['allow', '29/10']], [1, 3, 2]]Failed
early in window[[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '4'], ['allow', '5'], ['deny', '199/40'], ['deny', '389/80'], ['deny', '379/80'], ['allow', '1'], ['allow', '2']], [2, 0, 2]][[['allow', '1'], ['allow', '2'], ['allow', '3'], ['allow', '4'], ['allow', '5'], ['deny', '399/80'], ['deny', '39/8'], ['deny', '19/4'], ['allow', '1'], ['allow', '2']], [2, 0, 2]]Failed
random traffic[[['allow', '1'], ['allow', '227/125'], ['allow', '477/200'], ['allow', '3227/1000'], ['allow', '599/200'], ['allow', '941/250'], ['deny', '1861/500'], ['deny', '347/100'], ['deny', '418/125'], ['deny', '3317/1000'], ['deny', '761/250'], ['allow', '3753/1000'], ['deny', '3417/1000'], ['deny', '1677/500']], [2, 3, 3]][[['allow', '1'], ['allow', '1817/1000'], ['allow', '1193/500'], ['allow', '807/250'], ['allow', '1499/500'], ['allow', '3767/1000'], ['deny', '149/40'], ['deny', '3473/1000'], ['deny', '3347/1000'], ['deny', '83/25'], ['deny', '3047/1000'], ['allow', '939/250'], ['deny', '171/50'], ['deny', '3357/1000']], [2, 3, 3]]Failed
single window[[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]][[['allow', '1'], ['allow', '2'], ['deny', '2']], [0, 0, 2]]Passed

SHA-256 / f0ac69289ed0f5ec01b0b7c8b432c729df657f12cb74f31c97fde3b14d70512a

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 7 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.

Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.

Member access is invitation-based. Sign in with your invited account to inspect the repair.

Sign in to the archive ↗

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:48:47.923029+00:00.

Case digest / 8b82364eeb795f0d07fc28632e6dd7a1b35ac3bf38144557dc317292b4f84dfd