FA-73626 / Rate limiter algorithms / Open access
Daily quota reset at local midnight: offset applied with the wrong sign · case 01
Quotas reset at the mirror-image hour: customers east of UTC reset in the afternoon.
ROOT CAUSE
The local day subtracts the UTC offset instead of adding it.
VERIFIED REPAIR
Add the offset to the UTC epoch before dividing into days.
Unsuccessful approach: Treating the offset minutes as hours shifts the rollover by sixty times the offset.
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 - 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, 1699912800], ['deny', 0, 1699912800]] | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['allow', 2, 1699999200], ['deny', 2, 1699999200]] | Failed |
| west of UTC rollover | [['allow', 0, 1700024400], ['deny', 0, 1700024400], ['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, 1699900200], ['deny', 0, 1699900200], ['allow', 0, 1699986600]] | [['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]] | Failed |
| several days | [['allow', 1, 1700010000], ['allow', 0, 1700010000], ['allow', 1, 1700096400], ['allow', 0, 1700096400], ['allow', 1, 1700182800], ['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 / b0b2c7ac0ff40023bf935f8336e3075f197ad15fa6092a03762ee06a2dc90834
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 + x['utc_offset_min'] * 3600) // 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, 1700344800], ['allow', 0, 1700344800], ['deny', 0, 1700344800], ['deny', 0, 1700344800]] | [['allow', 1, 1699912800], ['allow', 0, 1699912800], ['allow', 2, 1699999200], ['deny', 2, 1699999200]] | Failed |
| west of UTC rollover | [['allow', 0, 1698901200], ['deny', 0, 1698901200], ['deny', 0, 1698901200], ['deny', 0, 1698901200]] | [['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, 1701109800], ['deny', 0, 1701109800], ['allow', 0, 1701196200]] | [['allow', 0, 1699986600], ['deny', 0, 1699986600], ['allow', 0, 1700073000]] | Failed |
| several days | [['allow', 1, 1699750800], ['allow', 1, 1699837200], ['allow', 0, 1699837200], ['allow', 1, 1699923600], ['allow', 0, 1699923600], ['allow', 1, 1700010000]] | [['allow', 1, 1699923600], ['allow', 1, 1700010000], ['allow', 0, 1700010000], ['allow', 1, 1700096400], ['allow', 0, 1700096400], ['allow', 1, 1700182800]] | Failed |
| exact quota | [['allow', 0, 1700175600], ['deny', 0, 1700175600]] | [['allow', 0, 1700002800], ['deny', 0, 1700002800]] | Failed |
SHA-256 / 363a2e8a3de0c1ab846f48fdb7d2f97c546f354135ecbcf026165532abd007cb
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.340138+00:00.
Case digest / bf39e3ddbb7de51b2d559df74ef6ee4df2df91adfba82cb0bfe7d8dabbf7e109