FA-73631 / Rate limiter algorithms / Open access
Daily quota reset at local midnight: reset time reported as UTC midnight · case 01
Clients are told the quota resets at a local-midnight number interpreted as a UTC epoch.
ROOT CAUSE
The next local midnight is converted back to UTC without removing the offset.
VERIFIED REPAIR
Report (day + 1)*86400 - offset.
Unsuccessful approach: Adding the offset converts in the wrong direction.
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 d != day:
day = d
used = 0
reset_at = (d + 1) * 86400
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, 1699920000], ['allow', 0, 1699920000], ['allow', 2, 1700006400], ['deny', 2, 1700006400]] | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['allow', 2, 1699999200], ['deny', 2, 1699999200]] | Failed |
| west of UTC rollover | [['allow', 0, 1699920000], ['deny', 0, 1699920000], ['allow', 1, 1700006400], ['allow', 0, 1700006400]] | [['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, 1700006400], ['deny', 0, 1700006400], ['allow', 0, 1700092800]] | [['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]] | Failed |
| several days | [['allow', 1, 1699920000], ['allow', 1, 1700006400], ['allow', 0, 1700006400], ['allow', 1, 1700092800], ['allow', 0, 1700092800], ['allow', 1, 1700179200]] | [['allow', 1, 1699923600], ['allow', 1, 1700010000], ['allow', 0, 1700010000], ['allow', 1, 1700096400], ['allow', 0, 1700096400], ['allow', 1, 1700182800]] | Failed |
| exact quota | [['allow', 0, 1700006400], ['deny', 0, 1700006400]] | [['allow', 0, 1700002800], ['deny', 0, 1700002800]] | Failed |
SHA-256 / e9dc31352397d36d7a299f8aad737b5ba261cfa4ed5929f121652235a4951d9f
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:
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, 1699927200], ['allow', 0, 1699927200], ['allow', 2, 1700013600], ['deny', 2, 1700013600]] | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['allow', 2, 1699999200], ['deny', 2, 1699999200]] | Failed |
| west of UTC rollover | [['allow', 0, 1699902000], ['deny', 0, 1699902000], ['allow', 1, 1699988400], ['allow', 0, 1699988400]] | [['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, 1700026200], ['deny', 0, 1700026200], ['allow', 0, 1700112600]] | [['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]] | Failed |
| several days | [['allow', 1, 1699916400], ['allow', 1, 1700002800], ['allow', 0, 1700002800], ['allow', 1, 1700089200], ['allow', 0, 1700089200], ['allow', 1, 1700175600]] | [['allow', 1, 1699923600], ['allow', 1, 1700010000], ['allow', 0, 1700010000], ['allow', 1, 1700096400], ['allow', 0, 1700096400], ['allow', 1, 1700182800]] | Failed |
| exact quota | [['allow', 0, 1700010000], ['deny', 0, 1700010000]] | [['allow', 0, 1700002800], ['deny', 0, 1700002800]] | Failed |
SHA-256 / c96d0d94b3fd197d732ea8b748f55fc145f3aa492e61fcaa003b3993b6a7a8e2
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.385217+00:00.
Case digest / baaef8ee5e961fdf4d4c8cf3e123c73f78f658912d1eb3c9c04117355db08cc7