FAILURE MAP
← Case archive

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.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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