FA-67661 / Elevator dispatch scheduling / Open access
Car relevelling with doors open: stop hysteresis · case 01
Relevelling stops as soon as the offset is back inside the start band.
ROOT CAUSE
The stop threshold equals the start threshold, removing the hysteresis.
VERIFIED REPAIR
Stop relevelling only at |offset| <= 3.
Unsuccessful approach: A strict comparison keeps relevelling at exactly 3 mm.
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 <= 10:
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: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('sampled regression 3', {'samples': [76, -250, 201, -11, 10, 201, 4]}, ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']), ('regression: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('boundary: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('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 4', {'samples': [150, 4, 200, 201, 4, -250, 9, 0]}, ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold']), ('sampled regression 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'])], [('regression: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('sampled regression 16', {'samples': [200, 75, -76, 10, 0, 40]}, ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'hold', 'relevel']), ('control 19', {'samples': [75, 76, 3, -3, -3]}, ['relevel', 'close-relevel', 'hold', 'hold', '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 12', {'samples': [-4, 150, 11]}, ['hold', 'close-relevel', 'relevel']), ('control 15', {'samples': [-3, 2, 75, 201, 75, 200]}, ['hold', 'hold', 'relevel', 'fault', 'relevel', 'close-relevel']), ('sampled regression 18', {'samples': [-76, 10, 10, -250, 201, -4, 40]}, ['close-relevel', 'relevel', 'relevel', 'fault', 'fault', 'hold', 'relevel'])], [('regression: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('sampled regression 31', {'samples': [-3, -250, -76, 150, 10, 75, 75, -76, 75, 10]}, ['hold', 'fault', 'close-relevel', 'close-relevel', 'relevel', 'relevel', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 45', {'samples': [150, 75, 4, 75, -11, 75, 40, -4, 3, 9]}, ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'hold', 'hold']), ('regression: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('boundary: 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: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('sampled regression 46', {'samples': [-4, 150, -4, 200, 200, -3, 9]}, ['hold', 'close-relevel', 'relevel', 'close-relevel', 'close-relevel', 'hold', 'hold']), ('control 64', {'samples': [201, -3, 11, 200, 3, 0]}, ['fault', 'hold', 'relevel', 'close-relevel', 'hold', 'hold']), ('regression: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: 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: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('sampled regression 58', {'samples': [75, 2, 10, 0, -11, 2, -11, 10]}, ['relevel', 'hold', 'hold', 'hold', 'relevel', 'hold', 'relevel', 'relevel']), ('control 78', {'samples': [3, 201, 2, 75, 3, 10, 2]}, ['hold', 'fault', 'hold', 'relevel', 'hold', 'hold', 'hold']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('sampled regression 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: hysteresis band | ['relevel', 'hold', 'hold', 'hold'] | ['relevel', 'relevel', 'relevel', 'hold'] | Failed |
| sampled regression 3 | ['close-relevel', 'fault', 'fault', 'relevel', 'hold', 'fault', 'hold'] | ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold'] | Failed |
| regression: negative offsets | ['relevel', 'hold', 'hold'] | ['relevel', 'relevel', 'hold'] | Failed |
| boundary: large offset while relevelling | ['relevel', 'close-relevel', 'relevel'] | ['relevel', 'close-relevel', 'relevel'] | Passed |
| boundary: fault clears relevelling | ['relevel', 'fault', 'hold'] | ['relevel', 'fault', 'hold'] | Passed |
| sampled regression 1 | ['close-relevel', 'relevel', 'close-relevel', 'hold', 'hold'] | ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'relevel'] | Failed |
| sampled regression 4 | ['close-relevel', 'hold', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | Failed |
| sampled regression 7 | ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'hold'] | ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'] | Failed |
SHA-256 / f09ce5709a0767e11e7db94155b39a01cc63084ff139d9c1400b84037a92a2b6
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' 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: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('sampled regression 3', {'samples': [76, -250, 201, -11, 10, 201, 4]}, ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']), ('regression: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('boundary: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('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 4', {'samples': [150, 4, 200, 201, 4, -250, 9, 0]}, ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold']), ('sampled regression 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'])], [('regression: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('sampled regression 16', {'samples': [200, 75, -76, 10, 0, 40]}, ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'hold', 'relevel']), ('control 19', {'samples': [75, 76, 3, -3, -3]}, ['relevel', 'close-relevel', 'hold', 'hold', '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 12', {'samples': [-4, 150, 11]}, ['hold', 'close-relevel', 'relevel']), ('control 15', {'samples': [-3, 2, 75, 201, 75, 200]}, ['hold', 'hold', 'relevel', 'fault', 'relevel', 'close-relevel']), ('sampled regression 18', {'samples': [-76, 10, 10, -250, 201, -4, 40]}, ['close-relevel', 'relevel', 'relevel', 'fault', 'fault', 'hold', 'relevel'])], [('regression: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('sampled regression 31', {'samples': [-3, -250, -76, 150, 10, 75, 75, -76, 75, 10]}, ['hold', 'fault', 'close-relevel', 'close-relevel', 'relevel', 'relevel', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 45', {'samples': [150, 75, 4, 75, -11, 75, 40, -4, 3, 9]}, ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'hold', 'hold']), ('regression: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('boundary: 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: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('sampled regression 46', {'samples': [-4, 150, -4, 200, 200, -3, 9]}, ['hold', 'close-relevel', 'relevel', 'close-relevel', 'close-relevel', 'hold', 'hold']), ('control 64', {'samples': [201, -3, 11, 200, 3, 0]}, ['fault', 'hold', 'relevel', 'close-relevel', 'hold', 'hold']), ('regression: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: 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: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('sampled regression 58', {'samples': [75, 2, 10, 0, -11, 2, -11, 10]}, ['relevel', 'hold', 'hold', 'hold', 'relevel', 'hold', 'relevel', 'relevel']), ('control 78', {'samples': [3, 201, 2, 75, 3, 10, 2]}, ['hold', 'fault', 'hold', 'relevel', 'hold', 'hold', 'hold']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('sampled regression 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: hysteresis band | ['relevel', 'relevel', 'relevel', 'relevel'] | ['relevel', 'relevel', 'relevel', 'hold'] | Failed |
| sampled regression 3 | ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold'] | ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold'] | Passed |
| regression: negative offsets | ['relevel', 'relevel', 'relevel'] | ['relevel', 'relevel', 'hold'] | Failed |
| boundary: large offset while relevelling | ['relevel', 'close-relevel', 'relevel'] | ['relevel', 'close-relevel', 'relevel'] | 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 4 | ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | 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 |
SHA-256 / 51ae84bb3990c1b0422bc52996fd82147e12045b277cad39f85fc4c1bf84f225
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: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('sampled regression 3', {'samples': [76, -250, 201, -11, 10, 201, 4]}, ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']), ('regression: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('boundary: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('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 4', {'samples': [150, 4, 200, 201, 4, -250, 9, 0]}, ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold']), ('sampled regression 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'])], [('regression: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('sampled regression 16', {'samples': [200, 75, -76, 10, 0, 40]}, ['close-relevel', 'relevel', 'close-relevel', 'relevel', 'hold', 'relevel']), ('control 19', {'samples': [75, 76, 3, -3, -3]}, ['relevel', 'close-relevel', 'hold', 'hold', '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 12', {'samples': [-4, 150, 11]}, ['hold', 'close-relevel', 'relevel']), ('control 15', {'samples': [-3, 2, 75, 201, 75, 200]}, ['hold', 'hold', 'relevel', 'fault', 'relevel', 'close-relevel']), ('sampled regression 18', {'samples': [-76, 10, 10, -250, 201, -4, 40]}, ['close-relevel', 'relevel', 'relevel', 'fault', 'fault', 'hold', 'relevel'])], [('regression: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('sampled regression 31', {'samples': [-3, -250, -76, 150, 10, 75, 75, -76, 75, 10]}, ['hold', 'fault', 'close-relevel', 'close-relevel', 'relevel', 'relevel', 'relevel', 'close-relevel', 'relevel', 'relevel']), ('sampled regression 45', {'samples': [150, 75, 4, 75, -11, 75, 40, -4, 3, 9]}, ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'hold', 'hold']), ('regression: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('boundary: 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: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('sampled regression 46', {'samples': [-4, 150, -4, 200, 200, -3, 9]}, ['hold', 'close-relevel', 'relevel', 'close-relevel', 'close-relevel', 'hold', 'hold']), ('control 64', {'samples': [201, -3, 11, 200, 3, 0]}, ['fault', 'hold', 'relevel', 'close-relevel', 'hold', 'hold']), ('regression: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: 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: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('sampled regression 58', {'samples': [75, 2, 10, 0, -11, 2, -11, 10]}, ['relevel', 'hold', 'hold', 'hold', 'relevel', 'hold', 'relevel', 'relevel']), ('control 78', {'samples': [3, 201, 2, 75, 3, 10, 2]}, ['hold', 'fault', 'hold', 'relevel', 'hold', 'hold', 'hold']), ('boundary: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('sampled regression 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: hysteresis band | ['relevel', 'relevel', 'relevel', 'hold'] | ['relevel', 'relevel', 'relevel', 'hold'] | Passed |
| sampled regression 3 | ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold'] | ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold'] | Passed |
| regression: negative offsets | ['relevel', 'relevel', 'hold'] | ['relevel', 'relevel', 'hold'] | Passed |
| boundary: large offset while relevelling | ['relevel', 'close-relevel', 'relevel'] | ['relevel', 'close-relevel', 'relevel'] | 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 4 | ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | ['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold'] | 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 |
SHA-256 / 8be7942cc46a41b9a97f50fe8b0fb43130edae2c7dd5bec84c535c6b39935415
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.046637+00:00.
Case digest / 785ea96f882e47e9c6296621bf22fb7d271f43ee95760269b09281d3e0cfb029