FA-73641 / Rate limiter algorithms / Open access
Daily quota reset at local midnight: usage resets at UTC midnight · case 01
Usage resets at UTC midnight while the advertised reset time is local midnight.
ROOT CAUSE
Day rollover is computed from the UTC day even though reset times use the local day.
VERIFIED REPAIR
Roll usage over when the local day changes.
Unsuccessful approach: Only rolling over during the first local hour misses days whose first request comes later.
Case contract
Input {quota, utc_offset_min, requests [[epoch_s, cost]]} with nondecreasing times. The quota day is floor((t + offset)/86400) with offset = utc_offset_min*60, so days roll over at local midnight. A new day resets usage. A request is allowed only if the whole cost fits (used + cost <= quota); a denied request consumes nothing. Report [decision, remaining, reset_at] where reset_at is the UTC epoch of the next local midnight, (day + 1)*86400 - offset.
Why this case matters
Daily API quotas are sold per customer timezone; offset, rollover and partial-consumption mistakes reset quotas at the wrong hour or silently burn them.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
Q = x['quota']
off = x['utc_offset_min'] * 60
day = None
used = 0
out = []
for t, cost in x['requests']:
d = (t + off) // 86400
if t // 86400 != day:
day = t // 86400
used = 0
reset_at = (d + 1) * 86400 - off
if used + cost <= Q:
used += cost
out.append(['allow', Q - used, reset_at])
else:
out.append(['deny', Q - used, reset_at])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912901, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938001, 1], [1699938002, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920031, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920101, 1], [1699986601, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920001, 1],
[1699963201, 1],
[1700006401, 1],
[1700049601, 1],
[1700092801, 1],
[1700136001, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925002, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912902, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938002, 1], [1699938003, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920032, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920102, 1], [1699986602, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920002, 1],
[1699963202, 1],
[1700006402, 1],
[1700049602, 1],
[1700092802, 1],
[1700136002, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925003, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912903, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938003, 1], [1699938004, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920033, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920103, 1], [1699986603, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920003, 1],
[1699963203, 1],
[1700006403, 1],
[1700049603, 1],
[1700092803, 1],
[1700136003, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925004, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912904, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938004, 1], [1699938005, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920034, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920104, 1], [1699986604, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920004, 1],
[1699963204, 1],
[1700006404, 1],
[1700049604, 1],
[1700092804, 1],
[1700136004, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925005, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912905, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938005, 1], [1699938006, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920035, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920105, 1], [1699986605, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920005, 1],
[1699963205, 1],
[1700006405, 1],
[1700049605, 1],
[1700092805, 1],
[1700136005, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925006, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| east of UTC rollover | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['deny', 0, 1699999200], ['deny', 0, 1699999200]] | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['allow', 2, 1699999200], ['deny', 2, 1699999200]] | Failed |
| west of UTC rollover | [['allow', 0, 1699938000], ['deny', 0, 1699938000], ['deny', 0, 1700024400], ['deny', 0, 1700024400]] | [['allow', 0, 1699938000], ['deny', 0, 1699938000], ['allow', 1, 1700024400], ['allow', 0, 1700024400]] | Failed |
| large cost denied whole | [['allow', 2, 1700006400], ['deny', 2, 1700006400], ['allow', 0, 1700006400], ['deny', 0, 1700006400]] | [['allow', 2, 1700006400], ['deny', 2, 1700006400], ['allow', 0, 1700006400], ['deny', 0, 1700006400]] | Passed |
| utc midnight is not local midnight | [['allow', 0, 1699986600], ['allow', 0, 1699986600], ['deny', 0, 1700073000]] | [['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]] | Failed |
| several days | [['allow', 1, 1699923600], ['allow', 0, 1700010000], ['allow', 1, 1700010000], ['allow', 0, 1700096400], ['allow', 1, 1700096400], ['allow', 0, 1700182800]] | [['allow', 1, 1699923600], ['allow', 1, 1700010000], ['allow', 0, 1700010000], ['allow', 1, 1700096400], ['allow', 0, 1700096400], ['allow', 1, 1700182800]] | Failed |
| exact quota | [['allow', 0, 1700002800], ['deny', 0, 1700002800]] | [['allow', 0, 1700002800], ['deny', 0, 1700002800]] | Passed |
SHA-256 / 9d3ab0e1ec758d9d6e88d5348ed4a2dd67210e4caa31bc2c8947ea4befcad295
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
Q = x['quota']
off = x['utc_offset_min'] * 60
day = None
used = 0
out = []
for t, cost in x['requests']:
d = (t + off) // 86400
if d != day and (t + off) % 86400 < 3600:
day = d
used = 0
reset_at = (d + 1) * 86400 - off
if used + cost <= Q:
used += cost
out.append(['allow', Q - used, reset_at])
else:
out.append(['deny', Q - used, reset_at])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912901, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938001, 1], [1699938002, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920031, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920101, 1], [1699986601, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920001, 1],
[1699963201, 1],
[1700006401, 1],
[1700049601, 1],
[1700092801, 1],
[1700136001, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925002, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912902, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938002, 1], [1699938003, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920032, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920102, 1], [1699986602, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920002, 1],
[1699963202, 1],
[1700006402, 1],
[1700049602, 1],
[1700092802, 1],
[1700136002, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925003, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912903, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938003, 1], [1699938004, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920033, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920103, 1], [1699986603, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920003, 1],
[1699963203, 1],
[1700006403, 1],
[1700049603, 1],
[1700092803, 1],
[1700136003, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925004, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912904, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938004, 1], [1699938005, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920034, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920104, 1], [1699986604, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920004, 1],
[1699963204, 1],
[1700006404, 1],
[1700049604, 1],
[1700092804, 1],
[1700136004, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925005, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912905, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938005, 1], [1699938006, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920035, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920105, 1], [1699986605, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920005, 1],
[1699963205, 1],
[1700006405, 1],
[1700049605, 1],
[1700092805, 1],
[1700136005, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925006, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| east of UTC rollover | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['allow', 2, 1699999200], ['deny', 2, 1699999200]] | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['allow', 2, 1699999200], ['deny', 2, 1699999200]] | Passed |
| west of UTC rollover | [['allow', 0, 1699938000], ['deny', 0, 1699938000], ['allow', 1, 1700024400], ['allow', 0, 1700024400]] | [['allow', 0, 1699938000], ['deny', 0, 1699938000], ['allow', 1, 1700024400], ['allow', 0, 1700024400]] | Passed |
| large cost denied whole | [['allow', 2, 1700006400], ['deny', 2, 1700006400], ['allow', 0, 1700006400], ['deny', 0, 1700006400]] | [['allow', 2, 1700006400], ['deny', 2, 1700006400], ['allow', 0, 1700006400], ['deny', 0, 1700006400]] | Passed |
| utc midnight is not local midnight | [['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]] | [['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]] | Passed |
| several days | [['allow', 1, 1699923600], ['allow', 0, 1700010000], ['deny', 0, 1700010000], ['deny', 0, 1700096400], ['deny', 0, 1700096400], ['deny', 0, 1700182800]] | [['allow', 1, 1699923600], ['allow', 1, 1700010000], ['allow', 0, 1700010000], ['allow', 1, 1700096400], ['allow', 0, 1700096400], ['allow', 1, 1700182800]] | Failed |
| exact quota | [['allow', 0, 1700002800], ['deny', 0, 1700002800]] | [['allow', 0, 1700002800], ['deny', 0, 1700002800]] | Passed |
SHA-256 / 07d9865841fafbe4d9a3cbf72037a30be2c420840eec6e0c48117e39118eac7e
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
Q = x['quota']
off = x['utc_offset_min'] * 60
day = None
used = 0
out = []
for t, cost in x['requests']:
d = (t + off) // 86400
if d != day:
day = d
used = 0
reset_at = (d + 1) * 86400 - off
if used + cost <= Q:
used += cost
out.append(['allow', Q - used, reset_at])
else:
out.append(['deny', Q - used, reset_at])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912901, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938001, 1], [1699938002, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920031, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920101, 1], [1699986601, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920001, 1],
[1699963201, 1],
[1700006401, 1],
[1700049601, 1],
[1700092801, 1],
[1700136001, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925002, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912902, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938002, 1], [1699938003, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920032, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920102, 1], [1699986602, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920002, 1],
[1699963202, 1],
[1700006402, 1],
[1700049602, 1],
[1700092802, 1],
[1700136002, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925003, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912903, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938003, 1], [1699938004, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920033, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920103, 1], [1699986603, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920003, 1],
[1699963203, 1],
[1700006403, 1],
[1700049603, 1],
[1700092803, 1],
[1700136003, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925004, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912904, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938004, 1], [1699938005, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920034, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920104, 1], [1699986604, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920004, 1],
[1699963204, 1],
[1700006404, 1],
[1700049604, 1],
[1700092804, 1],
[1700136004, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925005, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]],
[['east of UTC rollover',
{'quota': 3,
'requests': [[1699912700, 2], [1699912700, 1], [1699912905, 1], [1699913000, 3]],
'utc_offset_min': 120},
[['allow', 1, 1699912800],
['allow', 0, 1699912800],
['allow', 2, 1699999200],
['deny', 2, 1699999200]]],
['west of UTC rollover',
{'quota': 2,
'requests': [[1699937000, 2], [1699937999, 1], [1699938005, 1], [1699938006, 1]],
'utc_offset_min': -300},
[['allow', 0, 1699938000],
['deny', 0, 1699938000],
['allow', 1, 1700024400],
['allow', 0, 1700024400]]],
['large cost denied whole',
{'quota': 5,
'requests': [[1699920010, 3], [1699920020, 3], [1699920035, 2], [1699920040, 1]],
'utc_offset_min': 0},
[['allow', 2, 1700006400],
['deny', 2, 1700006400],
['allow', 0, 1700006400],
['deny', 0, 1700006400]]],
['utc midnight is not local midnight',
{'quota': 1,
'requests': [[1699919900, 1], [1699920105, 1], [1699986605, 1]],
'utc_offset_min': 330},
[['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]]],
['several days',
{'quota': 2,
'requests': [[1699920005, 1],
[1699963205, 1],
[1700006405, 1],
[1700049605, 1],
[1700092805, 1],
[1700136005, 1]],
'utc_offset_min': -60},
[['allow', 1, 1699923600],
['allow', 1, 1700010000],
['allow', 0, 1700010000],
['allow', 1, 1700096400],
['allow', 0, 1700096400],
['allow', 1, 1700182800]]],
['exact quota',
{'quota': 4, 'requests': [[1699925000, 4], [1699925006, 1]], 'utc_offset_min': 60},
[['allow', 0, 1700002800], ['deny', 0, 1700002800]]]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| east of UTC rollover | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['allow', 2, 1699999200], ['deny', 2, 1699999200]] | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['allow', 2, 1699999200], ['deny', 2, 1699999200]] | Passed |
| west of UTC rollover | [['allow', 0, 1699938000], ['deny', 0, 1699938000], ['allow', 1, 1700024400], ['allow', 0, 1700024400]] | [['allow', 0, 1699938000], ['deny', 0, 1699938000], ['allow', 1, 1700024400], ['allow', 0, 1700024400]] | Passed |
| large cost denied whole | [['allow', 2, 1700006400], ['deny', 2, 1700006400], ['allow', 0, 1700006400], ['deny', 0, 1700006400]] | [['allow', 2, 1700006400], ['deny', 2, 1700006400], ['allow', 0, 1700006400], ['deny', 0, 1700006400]] | Passed |
| utc midnight is not local midnight | [['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]] | [['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]] | Passed |
| several days | [['allow', 1, 1699923600], ['allow', 1, 1700010000], ['allow', 0, 1700010000], ['allow', 1, 1700096400], ['allow', 0, 1700096400], ['allow', 1, 1700182800]] | [['allow', 1, 1699923600], ['allow', 1, 1700010000], ['allow', 0, 1700010000], ['allow', 1, 1700096400], ['allow', 0, 1700096400], ['allow', 1, 1700182800]] | Passed |
| exact quota | [['allow', 0, 1700002800], ['deny', 0, 1700002800]] | [['allow', 0, 1700002800], ['deny', 0, 1700002800]] | Passed |
SHA-256 / 62c5e6b9caac99e3f02cf5bbed6b5fdce68b520c3c0afd356407b6461baa0b2c
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:49.427352+00:00.
Case digest / c2893f71e00ee4e941da7a7c7a7fb6c9c14e751c79c19ebb207c85f0ca38a5a2