FA-67711 / Elevator dispatch scheduling / Open access
Secured floor car call access: hour of day · case 01
Security windows stop applying after the first day or apply at random times.
ROOT CAUSE
The hour is not reduced modulo 24.
VERIFIED REPAIR
Derive the hour of day as (t // 3600) mod 24.
Unsuccessful approach: Dividing by 60 yields minutes, not hours.
Case contract
Restricted floors are secured during [lo, hi) hours of day (hour = t//3600 mod 24; when lo > hi the window wraps midnight). A car call to a secured floor is accepted only within 10 s of a card read whose card allows that floor; the credential is consumed by the call it authorises. Unsecured calls are accepted without affecting the credential. Log read, accepted or denied.
Why this case matters
Lift group controllers make these decisions many times per minute; a wrong answer strands passengers, wastes trips or overrides a safety rule.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
cards = x['cards']
restricted = set(x['restricted'])
lo, hi = x['secure_hours']
card = None
card_t = None
out = []
for t, kind, v in x['events']:
if kind == 'card':
card = v
card_t = t
out.append('read')
continue
hour = t // 3600
in_window = (lo <= hour < hi) if lo <= hi else (hour >= lo or hour < hi)
if v not in restricted or not in_window:
out.append('accepted')
elif card is not None and t - card_t <= 10 and v in cards.get(card, []):
out.append('accepted')
card = None
else:
out.append('denied')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('sampled regression 5', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85805, 'call', 12], [89405, 'call', 2], [89406, 'card', 'K1'], [89407, 'call', 5], [89418, 'card', 'K9'], [89427, 'call', 5]]}, ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied']), ('boundary: end of the secured window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[64800, 'call', 5], [64799, 'call', 5]]}, ['accepted', 'denied']), ('sampled regression 44', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85809, 'card', 'K2'], [89409, 'call', 7], [89419, 'call', 12], [89429, 'card', 'K9'], [93029, 'card', 'K9'], [93034, 'call', 5]]}, ['read', 'denied', 'accepted', 'read', 'read', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('boundary: call ten seconds after the read', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K1'], [110, 'call', 5]]}, ['read', 'accepted']), ('control 1', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[9, 'card', 'K1'], [14, 'card', 'K1'], [23, 'call', 2]]}, ['read', 'read', 'accepted']), ('control 4', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[10, 'call', 7], [3610, 'call', 2], [3615, 'card', 'K9'], [3625, 'call', 2]]}, ['denied', 'accepted', 'read', 'accepted']), ('control 7', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[85810, 'card', 'K1'], [85811, 'call', 7], [85812, 'card', 'K1'], [85821, 'call', 5], [85831, 'card', 'K2']]}, ['read', 'accepted', 'read', 'accepted', 'read'])], [('sampled regression 15', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[89400, 'call', 9], [93000, 'call', 7]]}, ['denied', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('sampled regression 42', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85801, 'call', 7], [89401, 'call', 9], [89461, 'card', 'K1'], [89472, 'call', 12], [89532, 'call', 5], [89541, 'card', 'K9'], [89550, 'card', 'K2']]}, ['denied', 'denied', 'read', 'accepted', 'denied', 'read', 'read']), ('control 18', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[85810, 'card', 'K1'], [85870, 'call', 2], [85880, 'call', 5], [85889, 'call', 12], [85900, 'card', 'K2']]}, ['read', 'accepted', 'accepted', 'accepted', 'read']), ('boundary: credential used twice', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K1'], [102, 'call', 5], [104, 'call', 7]]}, ['read', 'accepted', 'denied']), ('control 12', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[5, 'card', 'K1'], [3605, 'call', 12], [3615, 'call', 9], [3616, 'call', 7]]}, ['read', 'accepted', 'denied', 'denied']), ('control 21', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[25209, 'card', 'K1'], [28809, 'call', 12], [28818, 'card', 'K1'], [28878, 'call', 7], [28879, 'call', 12]]}, ['read', 'accepted', 'read', 'denied', 'accepted']), ('control 24', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[9, 'call', 9], [14, 'card', 'K1'], [15, 'card', 'K9'], [25, 'card', 'K9']]}, ['denied', 'read', 'read', 'read'])], [('sampled regression 42', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85801, 'call', 7], [89401, 'call', 9], [89461, 'card', 'K1'], [89472, 'call', 12], [89532, 'call', 5], [89541, 'card', 'K9'], [89550, 'card', 'K2']]}, ['denied', 'denied', 'read', 'accepted', 'denied', 'read', 'read']), ('boundary: end of the secured window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[64800, 'call', 5], [64799, 'call', 5]]}, ['accepted', 'denied']), ('sampled regression 15', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[89400, 'call', 9], [93000, 'call', 7]]}, ['denied', 'denied']), ('control 47', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[25260, 'call', 5], [28860, 'card', 'K1'], [28920, 'call', 12], [28931, 'card', 'K1'], [28936, 'card', 'K1']]}, ['accepted', 'read', 'accepted', 'read', 'read']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('control 23', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[72010, 'call', 9], [75610, 'card', 'K1'], [75615, 'call', 12], [75675, 'call', 5], [75686, 'call', 9], [75696, 'call', 5], [75705, 'call', 9]]}, ['denied', 'read', 'accepted', 'denied', 'denied', 'denied', 'denied']), ('control 26', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85810, 'call', 2], [85819, 'card', 'K1'], [85820, 'card', 'K9'], [85825, 'call', 2]]}, ['accepted', 'read', 'read', 'accepted']), ('control 29', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[85801, 'card', 'K2'], [85812, 'call', 12], [85823, 'call', 9], [85832, 'call', 12], [85892, 'card', 'K2']]}, ['read', 'accepted', 'accepted', 'accepted', 'read'])], [('sampled regression 44', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85809, 'card', 'K2'], [89409, 'call', 7], [89419, 'call', 12], [89429, 'card', 'K9'], [93029, 'card', 'K9'], [93034, 'call', 5]]}, ['read', 'denied', 'accepted', 'read', 'read', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('sampled regression 5', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85805, 'call', 12], [89405, 'call', 2], [89406, 'card', 'K1'], [89407, 'call', 5], [89418, 'card', 'K9'], [89427, 'call', 5]]}, ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied']), ('control 59', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[85809, 'call', 5], [85818, 'call', 2], [85823, 'card', 'K9'], [85834, 'call', 12], [85894, 'card', 'K1'], [85954, 'call', 7], [85965, 'call', 9]]}, ['denied', 'accepted', 'read', 'accepted', 'read', 'denied', 'denied']), ('boundary: card without the floor', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K2'], [101, 'call', 5]]}, ['read', 'denied']), ('control 34', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[3600, 'call', 2], [3611, 'card', 'K2']]}, ['accepted', 'read']), ('control 37', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[3600, 'card', 'K9'], [3609, 'card', 'K1'], [3619, 'card', 'K1'], [7219, 'card', 'K1'], [7224, 'card', 'K1']]}, ['read', 'read', 'read', 'read', 'read']), ('control 40', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[72011, 'call', 12], [72022, 'call', 9]]}, ['accepted', 'denied'])], [('sampled regression 5', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85805, 'call', 12], [89405, 'call', 2], [89406, 'card', 'K1'], [89407, 'call', 5], [89418, 'card', 'K9'], [89427, 'call', 5]]}, ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied']), ('boundary: end of the secured window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[64800, 'call', 5], [64799, 'call', 5]]}, ['accepted', 'denied']), ('sampled regression 44', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85809, 'card', 'K2'], [89409, 'call', 7], [89419, 'call', 12], [89429, 'card', 'K9'], [93029, 'card', 'K9'], [93034, 'call', 5]]}, ['read', 'denied', 'accepted', 'read', 'read', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('boundary: call eleven seconds after the read', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K1'], [111, 'call', 5]]}, ['read', 'denied']), ('control 45', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[72011, 'call', 2], [72020, 'card', 'K9'], [72021, 'call', 2]]}, ['accepted', 'read', 'accepted']), ('control 48', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[25260, 'call', 5], [25265, 'card', 'K2']]}, ['accepted', 'read']), ('control 51', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[72011, 'card', 'K9'], [75611, 'call', 5], [75620, 'call', 12], [75629, 'card', 'K1']]}, ['read', 'accepted', 'accepted', 'read'])]]
for label, args, expected in fixtures[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 |
|---|---|---|---|
| sampled regression 5 | ['accepted', 'accepted', 'read', 'accepted', 'read', 'accepted'] | ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied'] | Failed |
| boundary: end of the secured window | ['accepted', 'denied'] | ['accepted', 'denied'] | Passed |
| sampled regression 44 | ['read', 'accepted', 'accepted', 'read', 'read', 'accepted'] | ['read', 'denied', 'accepted', 'read', 'read', 'denied'] | Failed |
| boundary: overnight window | ['denied', 'denied', 'accepted'] | ['denied', 'denied', 'accepted'] | Passed |
| boundary: call ten seconds after the read | ['read', 'accepted'] | ['read', 'accepted'] | Passed |
| control 1 | ['read', 'read', 'accepted'] | ['read', 'read', 'accepted'] | Passed |
| control 4 | ['denied', 'accepted', 'read', 'accepted'] | ['denied', 'accepted', 'read', 'accepted'] | Passed |
| control 7 | ['read', 'accepted', 'read', 'accepted', 'read'] | ['read', 'accepted', 'read', 'accepted', 'read'] | Passed |
SHA-256 / 8329e642ce5a28f237ef88d391e41aa7b2a6c1b6f2c68cfe6976c2bd9137224c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
cards = x['cards']
restricted = set(x['restricted'])
lo, hi = x['secure_hours']
card = None
card_t = None
out = []
for t, kind, v in x['events']:
if kind == 'card':
card = v
card_t = t
out.append('read')
continue
hour = (t // 60) % 24
in_window = (lo <= hour < hi) if lo <= hi else (hour >= lo or hour < hi)
if v not in restricted or not in_window:
out.append('accepted')
elif card is not None and t - card_t <= 10 and v in cards.get(card, []):
out.append('accepted')
card = None
else:
out.append('denied')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('sampled regression 5', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85805, 'call', 12], [89405, 'call', 2], [89406, 'card', 'K1'], [89407, 'call', 5], [89418, 'card', 'K9'], [89427, 'call', 5]]}, ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied']), ('boundary: end of the secured window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[64800, 'call', 5], [64799, 'call', 5]]}, ['accepted', 'denied']), ('sampled regression 44', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85809, 'card', 'K2'], [89409, 'call', 7], [89419, 'call', 12], [89429, 'card', 'K9'], [93029, 'card', 'K9'], [93034, 'call', 5]]}, ['read', 'denied', 'accepted', 'read', 'read', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('boundary: call ten seconds after the read', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K1'], [110, 'call', 5]]}, ['read', 'accepted']), ('control 1', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[9, 'card', 'K1'], [14, 'card', 'K1'], [23, 'call', 2]]}, ['read', 'read', 'accepted']), ('control 4', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[10, 'call', 7], [3610, 'call', 2], [3615, 'card', 'K9'], [3625, 'call', 2]]}, ['denied', 'accepted', 'read', 'accepted']), ('control 7', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[85810, 'card', 'K1'], [85811, 'call', 7], [85812, 'card', 'K1'], [85821, 'call', 5], [85831, 'card', 'K2']]}, ['read', 'accepted', 'read', 'accepted', 'read'])], [('sampled regression 15', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[89400, 'call', 9], [93000, 'call', 7]]}, ['denied', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('sampled regression 42', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85801, 'call', 7], [89401, 'call', 9], [89461, 'card', 'K1'], [89472, 'call', 12], [89532, 'call', 5], [89541, 'card', 'K9'], [89550, 'card', 'K2']]}, ['denied', 'denied', 'read', 'accepted', 'denied', 'read', 'read']), ('control 18', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[85810, 'card', 'K1'], [85870, 'call', 2], [85880, 'call', 5], [85889, 'call', 12], [85900, 'card', 'K2']]}, ['read', 'accepted', 'accepted', 'accepted', 'read']), ('boundary: credential used twice', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K1'], [102, 'call', 5], [104, 'call', 7]]}, ['read', 'accepted', 'denied']), ('control 12', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[5, 'card', 'K1'], [3605, 'call', 12], [3615, 'call', 9], [3616, 'call', 7]]}, ['read', 'accepted', 'denied', 'denied']), ('control 21', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[25209, 'card', 'K1'], [28809, 'call', 12], [28818, 'card', 'K1'], [28878, 'call', 7], [28879, 'call', 12]]}, ['read', 'accepted', 'read', 'denied', 'accepted']), ('control 24', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[9, 'call', 9], [14, 'card', 'K1'], [15, 'card', 'K9'], [25, 'card', 'K9']]}, ['denied', 'read', 'read', 'read'])], [('sampled regression 42', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85801, 'call', 7], [89401, 'call', 9], [89461, 'card', 'K1'], [89472, 'call', 12], [89532, 'call', 5], [89541, 'card', 'K9'], [89550, 'card', 'K2']]}, ['denied', 'denied', 'read', 'accepted', 'denied', 'read', 'read']), ('boundary: end of the secured window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[64800, 'call', 5], [64799, 'call', 5]]}, ['accepted', 'denied']), ('sampled regression 15', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[89400, 'call', 9], [93000, 'call', 7]]}, ['denied', 'denied']), ('control 47', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[25260, 'call', 5], [28860, 'card', 'K1'], [28920, 'call', 12], [28931, 'card', 'K1'], [28936, 'card', 'K1']]}, ['accepted', 'read', 'accepted', 'read', 'read']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('control 23', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[72010, 'call', 9], [75610, 'card', 'K1'], [75615, 'call', 12], [75675, 'call', 5], [75686, 'call', 9], [75696, 'call', 5], [75705, 'call', 9]]}, ['denied', 'read', 'accepted', 'denied', 'denied', 'denied', 'denied']), ('control 26', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85810, 'call', 2], [85819, 'card', 'K1'], [85820, 'card', 'K9'], [85825, 'call', 2]]}, ['accepted', 'read', 'read', 'accepted']), ('control 29', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[85801, 'card', 'K2'], [85812, 'call', 12], [85823, 'call', 9], [85832, 'call', 12], [85892, 'card', 'K2']]}, ['read', 'accepted', 'accepted', 'accepted', 'read'])], [('sampled regression 44', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85809, 'card', 'K2'], [89409, 'call', 7], [89419, 'call', 12], [89429, 'card', 'K9'], [93029, 'card', 'K9'], [93034, 'call', 5]]}, ['read', 'denied', 'accepted', 'read', 'read', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('sampled regression 5', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85805, 'call', 12], [89405, 'call', 2], [89406, 'card', 'K1'], [89407, 'call', 5], [89418, 'card', 'K9'], [89427, 'call', 5]]}, ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied']), ('control 59', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[85809, 'call', 5], [85818, 'call', 2], [85823, 'card', 'K9'], [85834, 'call', 12], [85894, 'card', 'K1'], [85954, 'call', 7], [85965, 'call', 9]]}, ['denied', 'accepted', 'read', 'accepted', 'read', 'denied', 'denied']), ('boundary: card without the floor', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K2'], [101, 'call', 5]]}, ['read', 'denied']), ('control 34', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[3600, 'call', 2], [3611, 'card', 'K2']]}, ['accepted', 'read']), ('control 37', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[3600, 'card', 'K9'], [3609, 'card', 'K1'], [3619, 'card', 'K1'], [7219, 'card', 'K1'], [7224, 'card', 'K1']]}, ['read', 'read', 'read', 'read', 'read']), ('control 40', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[72011, 'call', 12], [72022, 'call', 9]]}, ['accepted', 'denied'])], [('sampled regression 5', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85805, 'call', 12], [89405, 'call', 2], [89406, 'card', 'K1'], [89407, 'call', 5], [89418, 'card', 'K9'], [89427, 'call', 5]]}, ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied']), ('boundary: end of the secured window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[64800, 'call', 5], [64799, 'call', 5]]}, ['accepted', 'denied']), ('sampled regression 44', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85809, 'card', 'K2'], [89409, 'call', 7], [89419, 'call', 12], [89429, 'card', 'K9'], [93029, 'card', 'K9'], [93034, 'call', 5]]}, ['read', 'denied', 'accepted', 'read', 'read', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('boundary: call eleven seconds after the read', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K1'], [111, 'call', 5]]}, ['read', 'denied']), ('control 45', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[72011, 'call', 2], [72020, 'card', 'K9'], [72021, 'call', 2]]}, ['accepted', 'read', 'accepted']), ('control 48', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[25260, 'call', 5], [25265, 'card', 'K2']]}, ['accepted', 'read']), ('control 51', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[72011, 'card', 'K9'], [75611, 'call', 5], [75620, 'call', 12], [75629, 'card', 'K1']]}, ['read', 'accepted', 'accepted', 'read'])]]
for label, args, expected in fixtures[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 |
|---|---|---|---|
| sampled regression 5 | ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied'] | ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied'] | Passed |
| boundary: end of the secured window | ['accepted', 'accepted'] | ['accepted', 'denied'] | Failed |
| sampled regression 44 | ['read', 'denied', 'accepted', 'read', 'read', 'denied'] | ['read', 'denied', 'accepted', 'read', 'read', 'denied'] | Passed |
| boundary: overnight window | ['accepted', 'accepted', 'denied'] | ['denied', 'denied', 'accepted'] | Failed |
| boundary: call ten seconds after the read | ['read', 'accepted'] | ['read', 'accepted'] | Passed |
| control 1 | ['read', 'read', 'accepted'] | ['read', 'read', 'accepted'] | Passed |
| control 4 | ['denied', 'accepted', 'read', 'accepted'] | ['denied', 'accepted', 'read', 'accepted'] | Passed |
| control 7 | ['read', 'accepted', 'read', 'accepted', 'read'] | ['read', 'accepted', 'read', 'accepted', 'read'] | Passed |
SHA-256 / d6519a4e9f6c7302ff1915d1a66f3ce44fdfe68ca33004baf367a102ef61f846
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
cards = x['cards']
restricted = set(x['restricted'])
lo, hi = x['secure_hours']
card = None
card_t = None
out = []
for t, kind, v in x['events']:
if kind == 'card':
card = v
card_t = t
out.append('read')
continue
hour = (t // 3600) % 24
in_window = (lo <= hour < hi) if lo <= hi else (hour >= lo or hour < hi)
if v not in restricted or not in_window:
out.append('accepted')
elif card is not None and t - card_t <= 10 and v in cards.get(card, []):
out.append('accepted')
card = None
else:
out.append('denied')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('sampled regression 5', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85805, 'call', 12], [89405, 'call', 2], [89406, 'card', 'K1'], [89407, 'call', 5], [89418, 'card', 'K9'], [89427, 'call', 5]]}, ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied']), ('boundary: end of the secured window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[64800, 'call', 5], [64799, 'call', 5]]}, ['accepted', 'denied']), ('sampled regression 44', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85809, 'card', 'K2'], [89409, 'call', 7], [89419, 'call', 12], [89429, 'card', 'K9'], [93029, 'card', 'K9'], [93034, 'call', 5]]}, ['read', 'denied', 'accepted', 'read', 'read', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('boundary: call ten seconds after the read', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K1'], [110, 'call', 5]]}, ['read', 'accepted']), ('control 1', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[9, 'card', 'K1'], [14, 'card', 'K1'], [23, 'call', 2]]}, ['read', 'read', 'accepted']), ('control 4', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[10, 'call', 7], [3610, 'call', 2], [3615, 'card', 'K9'], [3625, 'call', 2]]}, ['denied', 'accepted', 'read', 'accepted']), ('control 7', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[85810, 'card', 'K1'], [85811, 'call', 7], [85812, 'card', 'K1'], [85821, 'call', 5], [85831, 'card', 'K2']]}, ['read', 'accepted', 'read', 'accepted', 'read'])], [('sampled regression 15', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[89400, 'call', 9], [93000, 'call', 7]]}, ['denied', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('sampled regression 42', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85801, 'call', 7], [89401, 'call', 9], [89461, 'card', 'K1'], [89472, 'call', 12], [89532, 'call', 5], [89541, 'card', 'K9'], [89550, 'card', 'K2']]}, ['denied', 'denied', 'read', 'accepted', 'denied', 'read', 'read']), ('control 18', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[85810, 'card', 'K1'], [85870, 'call', 2], [85880, 'call', 5], [85889, 'call', 12], [85900, 'card', 'K2']]}, ['read', 'accepted', 'accepted', 'accepted', 'read']), ('boundary: credential used twice', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K1'], [102, 'call', 5], [104, 'call', 7]]}, ['read', 'accepted', 'denied']), ('control 12', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[5, 'card', 'K1'], [3605, 'call', 12], [3615, 'call', 9], [3616, 'call', 7]]}, ['read', 'accepted', 'denied', 'denied']), ('control 21', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[25209, 'card', 'K1'], [28809, 'call', 12], [28818, 'card', 'K1'], [28878, 'call', 7], [28879, 'call', 12]]}, ['read', 'accepted', 'read', 'denied', 'accepted']), ('control 24', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[9, 'call', 9], [14, 'card', 'K1'], [15, 'card', 'K9'], [25, 'card', 'K9']]}, ['denied', 'read', 'read', 'read'])], [('sampled regression 42', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85801, 'call', 7], [89401, 'call', 9], [89461, 'card', 'K1'], [89472, 'call', 12], [89532, 'call', 5], [89541, 'card', 'K9'], [89550, 'card', 'K2']]}, ['denied', 'denied', 'read', 'accepted', 'denied', 'read', 'read']), ('boundary: end of the secured window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[64800, 'call', 5], [64799, 'call', 5]]}, ['accepted', 'denied']), ('sampled regression 15', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[89400, 'call', 9], [93000, 'call', 7]]}, ['denied', 'denied']), ('control 47', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[25260, 'call', 5], [28860, 'card', 'K1'], [28920, 'call', 12], [28931, 'card', 'K1'], [28936, 'card', 'K1']]}, ['accepted', 'read', 'accepted', 'read', 'read']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('control 23', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[72010, 'call', 9], [75610, 'card', 'K1'], [75615, 'call', 12], [75675, 'call', 5], [75686, 'call', 9], [75696, 'call', 5], [75705, 'call', 9]]}, ['denied', 'read', 'accepted', 'denied', 'denied', 'denied', 'denied']), ('control 26', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85810, 'call', 2], [85819, 'card', 'K1'], [85820, 'card', 'K9'], [85825, 'call', 2]]}, ['accepted', 'read', 'read', 'accepted']), ('control 29', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[85801, 'card', 'K2'], [85812, 'call', 12], [85823, 'call', 9], [85832, 'call', 12], [85892, 'card', 'K2']]}, ['read', 'accepted', 'accepted', 'accepted', 'read'])], [('sampled regression 44', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85809, 'card', 'K2'], [89409, 'call', 7], [89419, 'call', 12], [89429, 'card', 'K9'], [93029, 'card', 'K9'], [93034, 'call', 5]]}, ['read', 'denied', 'accepted', 'read', 'read', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('sampled regression 5', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85805, 'call', 12], [89405, 'call', 2], [89406, 'card', 'K1'], [89407, 'call', 5], [89418, 'card', 'K9'], [89427, 'call', 5]]}, ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied']), ('control 59', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[85809, 'call', 5], [85818, 'call', 2], [85823, 'card', 'K9'], [85834, 'call', 12], [85894, 'card', 'K1'], [85954, 'call', 7], [85965, 'call', 9]]}, ['denied', 'accepted', 'read', 'accepted', 'read', 'denied', 'denied']), ('boundary: card without the floor', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K2'], [101, 'call', 5]]}, ['read', 'denied']), ('control 34', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[3600, 'call', 2], [3611, 'card', 'K2']]}, ['accepted', 'read']), ('control 37', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[3600, 'card', 'K9'], [3609, 'card', 'K1'], [3619, 'card', 'K1'], [7219, 'card', 'K1'], [7224, 'card', 'K1']]}, ['read', 'read', 'read', 'read', 'read']), ('control 40', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[72011, 'call', 12], [72022, 'call', 9]]}, ['accepted', 'denied'])], [('sampled regression 5', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85805, 'call', 12], [89405, 'call', 2], [89406, 'card', 'K1'], [89407, 'call', 5], [89418, 'card', 'K9'], [89427, 'call', 5]]}, ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied']), ('boundary: end of the secured window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[64800, 'call', 5], [64799, 'call', 5]]}, ['accepted', 'denied']), ('sampled regression 44', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[85809, 'card', 'K2'], [89409, 'call', 7], [89419, 'call', 12], [89429, 'card', 'K9'], [93029, 'card', 'K9'], [93034, 'call', 5]]}, ['read', 'denied', 'accepted', 'read', 'read', 'denied']), ('boundary: overnight window', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[82800, 'call', 9], [10800, 'call', 9], [43200, 'call', 9]]}, ['denied', 'denied', 'accepted']), ('boundary: call eleven seconds after the read', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [0, 24], 'events': [[100, 'card', 'K1'], [111, 'call', 5]]}, ['read', 'denied']), ('control 45', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[72011, 'call', 2], [72020, 'card', 'K9'], [72021, 'call', 2]]}, ['accepted', 'read', 'accepted']), ('control 48', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [20, 6], 'events': [[25260, 'call', 5], [25265, 'card', 'K2']]}, ['accepted', 'read']), ('control 51', {'restricted': [5, 7, 9], 'cards': {'K1': [5, 7], 'K2': [9]}, 'secure_hours': [8, 18], 'events': [[72011, 'card', 'K9'], [75611, 'call', 5], [75620, 'call', 12], [75629, 'card', 'K1']]}, ['read', 'accepted', 'accepted', 'read'])]]
for label, args, expected in fixtures[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 |
|---|---|---|---|
| sampled regression 5 | ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied'] | ['accepted', 'accepted', 'read', 'accepted', 'read', 'denied'] | Passed |
| boundary: end of the secured window | ['accepted', 'denied'] | ['accepted', 'denied'] | Passed |
| sampled regression 44 | ['read', 'denied', 'accepted', 'read', 'read', 'denied'] | ['read', 'denied', 'accepted', 'read', 'read', 'denied'] | Passed |
| boundary: overnight window | ['denied', 'denied', 'accepted'] | ['denied', 'denied', 'accepted'] | Passed |
| boundary: call ten seconds after the read | ['read', 'accepted'] | ['read', 'accepted'] | Passed |
| control 1 | ['read', 'read', 'accepted'] | ['read', 'read', 'accepted'] | Passed |
| control 4 | ['denied', 'accepted', 'read', 'accepted'] | ['denied', 'accepted', 'read', 'accepted'] | Passed |
| control 7 | ['read', 'accepted', 'read', 'accepted', 'read'] | ['read', 'accepted', 'read', 'accepted', 'read'] | Passed |
SHA-256 / a9cb16175ded58e82645cfd2dcfc4f628b8e8e9bf6ce5b6a99dcbfdd7815fc76
Verification & scope
Stipulated toy lift-control contract for a bounded teaching model; it makes no claim of conformance to any lift code or vendor dispatcher and omits real safety cases. 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:47:55.307100+00:00.
Case digest / 0c37a24aafe9d5b2c316b845b249be33f76b9df07a32fd305e6ab28eedb3a6ca