FA-67666 / Elevator dispatch scheduling / Open access
Car relevelling with doors open: open door limit while active · case 01
The car keeps relevelling with doors open after the offset grows large.
ROOT CAUSE
The door-open limit is replaced by the fault limit during an active relevel.
VERIFIED REPAIR
Apply the 75 mm open-door limit on every relevelling sample.
Unsuccessful approach: Dropping the limit for active relevels misses growth after the start.
Case contract
While standing at a floor the level offset (mm) is sampled. Beyond +-200 mm the sample is a fault and any relevel stops. Relevelling starts when |offset| > 10 and continues until |offset| <= 3 (hysteresis). A relevel runs with doors open when |offset| <= 75, otherwise the doors close first (close-relevel). Output hold, relevel, close-relevel or fault per sample.
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):
active = False
out = []
for off in x['samples']:
a = abs(off)
if a > 200:
out.append('fault')
active = False
continue
if active:
if a <= 3:
active = False
out.append('hold')
else:
out.append('relevel' if a <= 200 else 'close-relevel')
elif a > 10:
active = True
out.append('relevel' if a <= 75 else 'close-relevel')
else:
out.append('hold')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 4', {'samples': [150, 4, 200, 201, 4, -250, 9, 0]}, ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold']), ('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 1', {'samples': [200, 40, 200, 9, 4]}, ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 10', {'samples': [10, 9, -11, 150, 3, 201]}, ['hold', 'hold', 'relevel', 'close-relevel', 'hold', 'fault'])], [('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('sampled regression 15', {'samples': [-3, 2, 75, 201, 75, 200]}, ['hold', 'hold', 'relevel', 'fault', 'relevel', 'close-relevel']), ('sampled regression 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('control 12', {'samples': [-4, 150, 11]}, ['hold', 'close-relevel', 'relevel']), ('control 18', {'samples': [-76, 10, 10, -250, 201, -4, 40]}, ['close-relevel', 'relevel', 'relevel', 'fault', 'fault', 'hold', 'relevel']), ('control 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel'])], [('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 27', {'samples': [3, 11, 11, 4, 201, 150, 150, -4, 10]}, ['hold', 'relevel', 'relevel', 'relevel', 'fault', 'close-relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 16', {'samples': [200, 75, -76, 10, 0, 40]}, ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'hold', 'relevel']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('sampled regression 23', {'samples': [3, 10, 200, 0, 3, -4, 0, 200, -4, 150]}, ['hold', 'hold', 'close-relevel', 'hold', 'hold', 'hold', 'hold', 'close-relevel', 'relevel', 'close-relevel']), ('control 26', {'samples': [76, 201, 3, 3]}, ['close-relevel', 'fault', 'hold', 'hold']), ('control 29', {'samples': [2, 4, 75, 0, 11, -3, -3, 4]}, ['hold', 'hold', 'relevel', 'hold', 'relevel', 'hold', 'hold', 'hold'])], [('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('sampled regression 42', {'samples': [-3, -76, -76, 11, 2, 150, 75, 76]}, ['hold', 'close-relevel', 'close-relevel', 'relevel', 'hold', 'close-relevel', 'relevel', 'close-relevel']), ('sampled regression 25', {'samples': [200, 150, 2, 11, -250, 75, 0, 11]}, ['close-relevel', 'close-relevel', 'hold', 'relevel', 'fault', 'relevel', 'hold', 'relevel']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 34', {'samples': [150, 10, 200]}, ['close-relevel', 'relevel', 'close-relevel']), ('sampled regression 37', {'samples': [-76, 0, 76, 11, -11, 200, 150, 9]}, ['close-relevel', 'hold', 'close-relevel', 'relevel', 'relevel', 'close-relevel', 'close-relevel', 'relevel']), ('sampled regression 40', {'samples': [40, 76, -4]}, ['relevel', 'close-relevel', 'relevel'])], [('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 60', {'samples': [-250, 200, 40, -4, 150, 3, 3, 3]}, ['fault', 'close-relevel', 'relevel', 'relevel', 'close-relevel', 'hold', 'hold', 'hold']), ('sampled regression 36', {'samples': [11, 150, 11, 3]}, ['relevel', 'close-relevel', 'relevel', 'hold']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('control 45', {'samples': [150, 75, 4, 75, -11, 75, 40, -4, 3, 9]}, ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'hold', 'hold']), ('sampled regression 48', {'samples': [150, -76, 10, 4, -250, 40, 10]}, ['close-relevel', 'close-relevel', 'relevel', 'relevel', 'fault', 'relevel', 'relevel']), ('sampled regression 51', {'samples': [200, -4, -4, 76, 75, 76]}, ['close-relevel', 'relevel', 'relevel', 'close-relevel', 'relevel', 'close-relevel'])]]
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 |
|---|---|---|---|
| regression: large offset while relevelling | ['relevel', 'relevel', 'relevel'] | ['relevel', 'close-relevel', 'relevel'] | Failed |
| sampled regression 4 | ['close-relevel', 'relevel', 'relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | Failed |
| regression: open door limit | ['relevel', 'relevel'] | ['relevel', 'close-relevel'] | Failed |
| boundary: hysteresis band | ['relevel', 'relevel', 'relevel', 'hold'] | ['relevel', 'relevel', 'relevel', 'hold'] | Passed |
| boundary: fault clears relevelling | ['relevel', 'fault', 'hold'] | ['relevel', 'fault', 'hold'] | Passed |
| sampled regression 1 | ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel'] | ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'relevel'] | Failed |
| sampled regression 7 | ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'relevel', 'relevel', 'relevel'] | ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'] | Failed |
| sampled regression 10 | ['hold', 'hold', 'relevel', 'relevel', 'hold', 'fault'] | ['hold', 'hold', 'relevel', 'close-relevel', 'hold', 'fault'] | Failed |
SHA-256 / 1d960ff9efebf4fd9387e83d59d617183ddfdab33dbbc1cb2be1fb97654cbe2d
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
active = False
out = []
for off in x['samples']:
a = abs(off)
if a > 200:
out.append('fault')
active = False
continue
if active:
if a <= 3:
active = False
out.append('hold')
else:
out.append('relevel')
elif a > 10:
active = True
out.append('relevel' if a <= 75 else 'close-relevel')
else:
out.append('hold')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 4', {'samples': [150, 4, 200, 201, 4, -250, 9, 0]}, ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold']), ('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 1', {'samples': [200, 40, 200, 9, 4]}, ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 10', {'samples': [10, 9, -11, 150, 3, 201]}, ['hold', 'hold', 'relevel', 'close-relevel', 'hold', 'fault'])], [('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('sampled regression 15', {'samples': [-3, 2, 75, 201, 75, 200]}, ['hold', 'hold', 'relevel', 'fault', 'relevel', 'close-relevel']), ('sampled regression 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('control 12', {'samples': [-4, 150, 11]}, ['hold', 'close-relevel', 'relevel']), ('control 18', {'samples': [-76, 10, 10, -250, 201, -4, 40]}, ['close-relevel', 'relevel', 'relevel', 'fault', 'fault', 'hold', 'relevel']), ('control 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel'])], [('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 27', {'samples': [3, 11, 11, 4, 201, 150, 150, -4, 10]}, ['hold', 'relevel', 'relevel', 'relevel', 'fault', 'close-relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 16', {'samples': [200, 75, -76, 10, 0, 40]}, ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'hold', 'relevel']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('sampled regression 23', {'samples': [3, 10, 200, 0, 3, -4, 0, 200, -4, 150]}, ['hold', 'hold', 'close-relevel', 'hold', 'hold', 'hold', 'hold', 'close-relevel', 'relevel', 'close-relevel']), ('control 26', {'samples': [76, 201, 3, 3]}, ['close-relevel', 'fault', 'hold', 'hold']), ('control 29', {'samples': [2, 4, 75, 0, 11, -3, -3, 4]}, ['hold', 'hold', 'relevel', 'hold', 'relevel', 'hold', 'hold', 'hold'])], [('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('sampled regression 42', {'samples': [-3, -76, -76, 11, 2, 150, 75, 76]}, ['hold', 'close-relevel', 'close-relevel', 'relevel', 'hold', 'close-relevel', 'relevel', 'close-relevel']), ('sampled regression 25', {'samples': [200, 150, 2, 11, -250, 75, 0, 11]}, ['close-relevel', 'close-relevel', 'hold', 'relevel', 'fault', 'relevel', 'hold', 'relevel']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 34', {'samples': [150, 10, 200]}, ['close-relevel', 'relevel', 'close-relevel']), ('sampled regression 37', {'samples': [-76, 0, 76, 11, -11, 200, 150, 9]}, ['close-relevel', 'hold', 'close-relevel', 'relevel', 'relevel', 'close-relevel', 'close-relevel', 'relevel']), ('sampled regression 40', {'samples': [40, 76, -4]}, ['relevel', 'close-relevel', 'relevel'])], [('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 60', {'samples': [-250, 200, 40, -4, 150, 3, 3, 3]}, ['fault', 'close-relevel', 'relevel', 'relevel', 'close-relevel', 'hold', 'hold', 'hold']), ('sampled regression 36', {'samples': [11, 150, 11, 3]}, ['relevel', 'close-relevel', 'relevel', 'hold']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('control 45', {'samples': [150, 75, 4, 75, -11, 75, 40, -4, 3, 9]}, ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'hold', 'hold']), ('sampled regression 48', {'samples': [150, -76, 10, 4, -250, 40, 10]}, ['close-relevel', 'close-relevel', 'relevel', 'relevel', 'fault', 'relevel', 'relevel']), ('sampled regression 51', {'samples': [200, -4, -4, 76, 75, 76]}, ['close-relevel', 'relevel', 'relevel', 'close-relevel', 'relevel', 'close-relevel'])]]
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 |
|---|---|---|---|
| regression: large offset while relevelling | ['relevel', 'relevel', 'relevel'] | ['relevel', 'close-relevel', 'relevel'] | Failed |
| sampled regression 4 | ['close-relevel', 'relevel', 'relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | Failed |
| regression: open door limit | ['relevel', 'relevel'] | ['relevel', 'close-relevel'] | Failed |
| boundary: hysteresis band | ['relevel', 'relevel', 'relevel', 'hold'] | ['relevel', 'relevel', 'relevel', 'hold'] | Passed |
| boundary: fault clears relevelling | ['relevel', 'fault', 'hold'] | ['relevel', 'fault', 'hold'] | Passed |
| sampled regression 1 | ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel'] | ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'relevel'] | Failed |
| sampled regression 7 | ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'relevel', 'relevel', 'relevel'] | ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'] | Failed |
| sampled regression 10 | ['hold', 'hold', 'relevel', 'relevel', 'hold', 'fault'] | ['hold', 'hold', 'relevel', 'close-relevel', 'hold', 'fault'] | Failed |
SHA-256 / 9b1f14b96364b83473bb7ea52c389780b8917ebc8554532f7a6834d5f3d1f9a5
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
active = False
out = []
for off in x['samples']:
a = abs(off)
if a > 200:
out.append('fault')
active = False
continue
if active:
if a <= 3:
active = False
out.append('hold')
else:
out.append('relevel' if a <= 75 else 'close-relevel')
elif a > 10:
active = True
out.append('relevel' if a <= 75 else 'close-relevel')
else:
out.append('hold')
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 4', {'samples': [150, 4, 200, 201, 4, -250, 9, 0]}, ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold']), ('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 1', {'samples': [200, 40, 200, 9, 4]}, ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 10', {'samples': [10, 9, -11, 150, 3, 201]}, ['hold', 'hold', 'relevel', 'close-relevel', 'hold', 'fault'])], [('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('sampled regression 15', {'samples': [-3, 2, 75, 201, 75, 200]}, ['hold', 'hold', 'relevel', 'fault', 'relevel', 'close-relevel']), ('sampled regression 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('control 12', {'samples': [-4, 150, 11]}, ['hold', 'close-relevel', 'relevel']), ('control 18', {'samples': [-76, 10, 10, -250, 201, -4, 40]}, ['close-relevel', 'relevel', 'relevel', 'fault', 'fault', 'hold', 'relevel']), ('control 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel'])], [('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 27', {'samples': [3, 11, 11, 4, 201, 150, 150, -4, 10]}, ['hold', 'relevel', 'relevel', 'relevel', 'fault', 'close-relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 16', {'samples': [200, 75, -76, 10, 0, 40]}, ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'hold', 'relevel']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('sampled regression 23', {'samples': [3, 10, 200, 0, 3, -4, 0, 200, -4, 150]}, ['hold', 'hold', 'close-relevel', 'hold', 'hold', 'hold', 'hold', 'close-relevel', 'relevel', 'close-relevel']), ('control 26', {'samples': [76, 201, 3, 3]}, ['close-relevel', 'fault', 'hold', 'hold']), ('control 29', {'samples': [2, 4, 75, 0, 11, -3, -3, 4]}, ['hold', 'hold', 'relevel', 'hold', 'relevel', 'hold', 'hold', 'hold'])], [('regression: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('sampled regression 42', {'samples': [-3, -76, -76, 11, 2, 150, 75, 76]}, ['hold', 'close-relevel', 'close-relevel', 'relevel', 'hold', 'close-relevel', 'relevel', 'close-relevel']), ('sampled regression 25', {'samples': [200, 150, 2, 11, -250, 75, 0, 11]}, ['close-relevel', 'close-relevel', 'hold', 'relevel', 'fault', 'relevel', 'hold', 'relevel']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 34', {'samples': [150, 10, 200]}, ['close-relevel', 'relevel', 'close-relevel']), ('sampled regression 37', {'samples': [-76, 0, 76, 11, -11, 200, 150, 9]}, ['close-relevel', 'hold', 'close-relevel', 'relevel', 'relevel', 'close-relevel', 'close-relevel', 'relevel']), ('sampled regression 40', {'samples': [40, 76, -4]}, ['relevel', 'close-relevel', 'relevel'])], [('regression: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('sampled regression 60', {'samples': [-250, 200, 40, -4, 150, 3, 3, 3]}, ['fault', 'close-relevel', 'relevel', 'relevel', 'close-relevel', 'hold', 'hold', 'hold']), ('sampled regression 36', {'samples': [11, 150, 11, 3]}, ['relevel', 'close-relevel', 'relevel', 'hold']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('control 45', {'samples': [150, 75, 4, 75, -11, 75, 40, -4, 3, 9]}, ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'hold', 'hold']), ('sampled regression 48', {'samples': [150, -76, 10, 4, -250, 40, 10]}, ['close-relevel', 'close-relevel', 'relevel', 'relevel', 'fault', 'relevel', 'relevel']), ('sampled regression 51', {'samples': [200, -4, -4, 76, 75, 76]}, ['close-relevel', 'relevel', 'relevel', 'close-relevel', 'relevel', 'close-relevel'])]]
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 |
|---|---|---|---|
| regression: large offset while relevelling | ['relevel', 'close-relevel', 'relevel'] | ['relevel', 'close-relevel', 'relevel'] | Passed |
| sampled regression 4 | ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | Passed |
| regression: open door limit | ['relevel', 'close-relevel'] | ['relevel', 'close-relevel'] | Passed |
| boundary: hysteresis band | ['relevel', 'relevel', 'relevel', 'hold'] | ['relevel', 'relevel', 'relevel', 'hold'] | Passed |
| boundary: fault clears relevelling | ['relevel', 'fault', 'hold'] | ['relevel', 'fault', 'hold'] | Passed |
| sampled regression 1 | ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'relevel'] | ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'relevel'] | Passed |
| sampled regression 7 | ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'] | ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'] | Passed |
| sampled regression 10 | ['hold', 'hold', 'relevel', 'close-relevel', 'hold', 'fault'] | ['hold', 'hold', 'relevel', 'close-relevel', 'hold', 'fault'] | Passed |
SHA-256 / ddc308fcd23fbca3cf4e8eb11cd0548c2d8b9a652a5a4e5a97f5c9b455f2288b
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.043041+00:00.
Case digest / 68c179298e4af5cd6e013f8632ed344ce8ad3c670169e73aee0a3651fb2fe29f