FAILURE MAP
← Case archive

FA-67671 / Elevator dispatch scheduling / Open access

Car relevelling with doors open: fault handling · case 01

A relevel continues after a fault sample.

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

ROOT CAUSE

The fault sample does not stop the active relevel.

VERIFIED REPAIR

Stop relevelling on a fault sample.

Unsuccessful approach: Recomputing active from the fault offset re-arms relevelling.

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')
            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: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 14', {'samples': [-11, 9, -11, 2, -76, 200, -4, -250, 201, -4]}, ['relevel', 'relevel', 'relevel', 'hold', 'close-relevel', 'close-relevel', 'relevel', 'fault', 'fault', 'hold']), ('sampled regression 3', {'samples': [76, -250, 201, -11, 10, 201, 4]}, ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('control 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']), ('control 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'])], [('regression: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 75', {'samples': [11, 9, -250, 10, 10, 0, -11]}, ['relevel', 'relevel', 'fault', 'hold', 'hold', 'hold', 'relevel']), ('sampled regression 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('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: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel']), ('sampled regression 55', {'samples': [75, 10, -250, 10, -76, -4, 4, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'close-relevel', 'relevel', 'relevel', 'relevel']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('boundary: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('control 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: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 3', {'samples': [76, -250, 201, -11, 10, 201, 4]}, ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('control 34', {'samples': [150, 10, 200]}, ['close-relevel', 'relevel', 'close-relevel']), ('control 37', {'samples': [-76, 0, 76, 11, -11, 200, 150, 9]}, ['close-relevel', 'hold', 'close-relevel', 'relevel', 'relevel', 'close-relevel', 'close-relevel', 'relevel']), ('control 40', {'samples': [40, 76, -4]}, ['relevel', 'close-relevel', 'relevel'])], [('regression: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 33', {'samples': [4, -11, -11, 40, 11, 201, 9, -4]}, ['hold', 'relevel', 'relevel', 'relevel', 'relevel', 'fault', 'hold', 'hold']), ('sampled regression 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('control 45', {'samples': [150, 75, 4, 75, -11, 75, 40, -4, 3, 9]}, ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'hold', 'hold']), ('control 48', {'samples': [150, -76, 10, 4, -250, 40, 10]}, ['close-relevel', 'close-relevel', 'relevel', 'relevel', 'fault', 'relevel', 'relevel']), ('control 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: fault clears relevelling['relevel', 'fault', 'relevel']['relevel', 'fault', 'hold']Failed
sampled regression 14['relevel', 'relevel', 'relevel', 'hold', 'close-relevel', 'close-relevel', 'relevel', 'fault', 'fault', 'relevel']['relevel', 'relevel', 'relevel', 'hold', 'close-relevel', 'close-relevel', 'relevel', 'fault', 'fault', 'hold']Failed
sampled regression 3['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'relevel']['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']Failed
boundary: hysteresis band['relevel', 'relevel', 'relevel', 'hold']['relevel', 'relevel', 'relevel', 'hold']Passed
boundary: large offset while relevelling['relevel', 'close-relevel', 'relevel']['relevel', 'close-relevel', 'relevel']Passed
control 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', 'relevel', 'fault', 'relevel', 'hold']['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold']Failed
control 7['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']Passed

SHA-256 / 7eddda11239f2fc7b4836b464bc19d1db4707ca667e87808ff7b95e8987d97aa

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 = a > 10
            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: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 14', {'samples': [-11, 9, -11, 2, -76, 200, -4, -250, 201, -4]}, ['relevel', 'relevel', 'relevel', 'hold', 'close-relevel', 'close-relevel', 'relevel', 'fault', 'fault', 'hold']), ('sampled regression 3', {'samples': [76, -250, 201, -11, 10, 201, 4]}, ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('control 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']), ('control 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'])], [('regression: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 75', {'samples': [11, 9, -250, 10, 10, 0, -11]}, ['relevel', 'relevel', 'fault', 'hold', 'hold', 'hold', 'relevel']), ('sampled regression 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('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: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel']), ('sampled regression 55', {'samples': [75, 10, -250, 10, -76, -4, 4, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'close-relevel', 'relevel', 'relevel', 'relevel']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('boundary: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('control 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: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 3', {'samples': [76, -250, 201, -11, 10, 201, 4]}, ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('control 34', {'samples': [150, 10, 200]}, ['close-relevel', 'relevel', 'close-relevel']), ('control 37', {'samples': [-76, 0, 76, 11, -11, 200, 150, 9]}, ['close-relevel', 'hold', 'close-relevel', 'relevel', 'relevel', 'close-relevel', 'close-relevel', 'relevel']), ('control 40', {'samples': [40, 76, -4]}, ['relevel', 'close-relevel', 'relevel'])], [('regression: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 33', {'samples': [4, -11, -11, 40, 11, 201, 9, -4]}, ['hold', 'relevel', 'relevel', 'relevel', 'relevel', 'fault', 'hold', 'hold']), ('sampled regression 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('control 45', {'samples': [150, 75, 4, 75, -11, 75, 40, -4, 3, 9]}, ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'hold', 'hold']), ('control 48', {'samples': [150, -76, 10, 4, -250, 40, 10]}, ['close-relevel', 'close-relevel', 'relevel', 'relevel', 'fault', 'relevel', 'relevel']), ('control 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: fault clears relevelling['relevel', 'fault', 'relevel']['relevel', 'fault', 'hold']Failed
sampled regression 14['relevel', 'relevel', 'relevel', 'hold', 'close-relevel', 'close-relevel', 'relevel', 'fault', 'fault', 'relevel']['relevel', 'relevel', 'relevel', 'hold', 'close-relevel', 'close-relevel', 'relevel', 'fault', 'fault', 'hold']Failed
sampled regression 3['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'relevel']['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']Failed
boundary: hysteresis band['relevel', 'relevel', 'relevel', 'hold']['relevel', 'relevel', 'relevel', 'hold']Passed
boundary: large offset while relevelling['relevel', 'close-relevel', 'relevel']['relevel', 'close-relevel', 'relevel']Passed
control 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', 'relevel', 'fault', 'relevel', 'hold']['close-relevel', 'relevel', 'close-relevel', 'fault', 'hold', 'fault', 'hold', 'hold']Failed
control 7['fault', 'fault', 'relevel', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']Failed

SHA-256 / 2964d18e003a61dad9d91f96b078aae2f47f7704ff13291bd203a082cef500af

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: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 14', {'samples': [-11, 9, -11, 2, -76, 200, -4, -250, 201, -4]}, ['relevel', 'relevel', 'relevel', 'hold', 'close-relevel', 'close-relevel', 'relevel', 'fault', 'fault', 'hold']), ('sampled regression 3', {'samples': [76, -250, 201, -11, 10, 201, 4]}, ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('control 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']), ('control 7', {'samples': [-250, 201, 4, 2, 4, 11, 76, 75, 10]}, ['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel'])], [('regression: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 75', {'samples': [11, 9, -250, 10, 10, 0, -11]}, ['relevel', 'relevel', 'fault', 'hold', 'hold', 'hold', 'relevel']), ('sampled regression 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('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: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel']), ('sampled regression 55', {'samples': [75, 10, -250, 10, -76, -4, 4, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'close-relevel', 'relevel', 'relevel', 'relevel']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('boundary: open door limit', {'samples': [75, 76]}, ['relevel', 'close-relevel']), ('control 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: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 3', {'samples': [76, -250, 201, -11, 10, 201, 4]}, ['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']), ('boundary: hysteresis band', {'samples': [11, 8, 4, 3]}, ['relevel', 'relevel', 'relevel', 'hold']), ('boundary: large offset while relevelling', {'samples': [20, 90, 30]}, ['relevel', 'close-relevel', 'relevel']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('control 34', {'samples': [150, 10, 200]}, ['close-relevel', 'relevel', 'close-relevel']), ('control 37', {'samples': [-76, 0, 76, 11, -11, 200, 150, 9]}, ['close-relevel', 'hold', 'close-relevel', 'relevel', 'relevel', 'close-relevel', 'close-relevel', 'relevel']), ('control 40', {'samples': [40, 76, -4]}, ['relevel', 'close-relevel', 'relevel'])], [('regression: fault clears relevelling', {'samples': [20, 250, 5]}, ['relevel', 'fault', 'hold']), ('sampled regression 33', {'samples': [4, -11, -11, 40, 11, 201, 9, -4]}, ['hold', 'relevel', 'relevel', 'relevel', 'relevel', 'fault', 'hold', 'hold']), ('sampled regression 21', {'samples': [75, 40, 201, 9, 11, 4]}, ['relevel', 'relevel', 'fault', 'hold', 'relevel', 'relevel']), ('boundary: exactly at the fault limit', {'samples': [200, 201]}, ['close-relevel', 'fault']), ('boundary: negative offsets', {'samples': [-11, -4, -3]}, ['relevel', 'relevel', 'hold']), ('control 45', {'samples': [150, 75, 4, 75, -11, 75, 40, -4, 3, 9]}, ['close-relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'relevel', 'hold', 'hold']), ('control 48', {'samples': [150, -76, 10, 4, -250, 40, 10]}, ['close-relevel', 'close-relevel', 'relevel', 'relevel', 'fault', 'relevel', 'relevel']), ('control 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: fault clears relevelling['relevel', 'fault', 'hold']['relevel', 'fault', 'hold']Passed
sampled regression 14['relevel', 'relevel', 'relevel', 'hold', 'close-relevel', 'close-relevel', 'relevel', 'fault', 'fault', 'hold']['relevel', 'relevel', 'relevel', 'hold', 'close-relevel', 'close-relevel', 'relevel', 'fault', 'fault', 'hold']Passed
sampled regression 3['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']['close-relevel', 'fault', 'fault', 'relevel', 'relevel', 'fault', 'hold']Passed
boundary: hysteresis band['relevel', 'relevel', 'relevel', 'hold']['relevel', 'relevel', 'relevel', 'hold']Passed
boundary: large offset while relevelling['relevel', 'close-relevel', 'relevel']['relevel', 'close-relevel', 'relevel']Passed
control 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
control 7['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']['fault', 'fault', 'hold', 'hold', 'hold', 'relevel', 'close-relevel', 'relevel', 'relevel']Passed

SHA-256 / 4a12f8a5a56a1e3ff18bcf070efdb89287cb0c1a1e4109af63422819769e1b71

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.086516+00:00.

Case digest / e5df506811036368b70cc98d1fde66196dd6c8e5072352faa3550b5b84d6d153