FAILURE MAP
← Case archive

FA-67431 / Elevator dispatch scheduling / Open access

Trip flight time from a trapezoidal profile: floor rise slice · case 01

Trip distances include the rise above the destination floor.

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

ROOT CAUSE

The slice of floor rises runs one floor too far.

VERIFIED REPAIR

Sum the rises from the lower floor up to, not including, the upper floor.

Unsuccessful approach: Shifting the slice by one attributes each rise to the floor above it.

Case contract

heights_mm[i] is the rise from floor i to floor i+1. The trip distance is the sum between the two floors (either direction). With speed vmax (mm/s) and acceleration acc (mm/s^2): if distance*acc >= vmax^2 the car reaches vmax and t = d/vmax + vmax/acc, otherwise t = 2*sqrt(d/acc). Return milliseconds rounded up; zero distance is 0.

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
import math
N = 1
observations = []
def solve(x):
    lo, hi = sorted((x['from'], x['to']))
    d = sum(x['heights_mm'][lo:hi + 1])
    if d == 0:
        return 0
    v = x['vmax']
    a = x['acc']
    if d * a >= v * v:
        t = d / v + v / a
    else:
        t = 2 * math.sqrt(d / a)
    return math.ceil(t * 1000 - 1e-9)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('regression: short hop without reaching speed', {'heights_mm': [3000, 3000, 3000, 3000, 3000], 'from': 1, 'to': 2, 'vmax': 4000, 'acc': 800}, 3873), ('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('regression: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('sampled regression 1', {'heights_mm': [5000, 4200, 3500, 4200, 4200, 5000, 3000, 3500, 5000, 4200, 3500], 'from': 7, 'to': 0, 'vmax': 1600, 'acc': 1200}, 19521), ('sampled regression 4', {'heights_mm': [3500, 3500, 5000, 3500], 'from': 1, 'to': 1, 'vmax': 4000, 'acc': 600}, 0), ('sampled regression 7', {'heights_mm': [3500, 3500, 4200, 5000, 3500], 'from': 4, 'to': 1, 'vmax': 2500, 'acc': 1200}, 7164)], [('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 4', {'heights_mm': [3500, 3500, 5000, 3500], 'from': 1, 'to': 1, 'vmax': 4000, 'acc': 600}, 0), ('sampled regression 11', {'heights_mm': [4200, 3500, 5000, 3000, 3000, 5000, 4200], 'from': 3, 'to': 2, 'vmax': 1000, 'acc': 1000}, 6000), ('regression: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('regression: short hop without reaching speed', {'heights_mm': [3000, 3000, 3000, 3000, 3000], 'from': 1, 'to': 2, 'vmax': 4000, 'acc': 800}, 3873), ('sampled regression 12', {'heights_mm': [3000, 5000, 3000, 5000, 4200, 5000, 3000, 4200, 4200, 3500], 'from': 5, 'to': 1, 'vmax': 1000, 'acc': 600}, 18867), ('sampled regression 15', {'heights_mm': [3000, 3500, 3000, 3000, 5000, 3000, 3500, 3000, 3000, 3500], 'from': 4, 'to': 7, 'vmax': 1000, 'acc': 600}, 13167), ('sampled regression 18', {'heights_mm': [4200, 3000, 3500, 5000, 3500], 'from': 3, 'to': 4, 'vmax': 1000, 'acc': 800}, 6250)], [('regression: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('regression: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('sampled regression 11', {'heights_mm': [4200, 3500, 5000, 3000, 3000, 5000, 4200], 'from': 3, 'to': 2, 'vmax': 1000, 'acc': 1000}, 6000), ('sampled regression 19', {'heights_mm': [5000, 3500, 3000, 5000, 5000, 4200, 5000, 4200], 'from': 0, 'to': 7, 'vmax': 1000, 'acc': 1000}, 31700), ('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('sampled regression 23', {'heights_mm': [5000, 3000, 3000, 4200, 4200, 3500, 3000], 'from': 1, 'to': 0, 'vmax': 1600, 'acc': 1000}, 4725), ('sampled regression 26', {'heights_mm': [4200, 5000, 4200, 4200, 3000, 3500, 3500, 3500], 'from': 7, 'to': 0, 'vmax': 4000, 'acc': 1000}, 10900), ('sampled regression 29', {'heights_mm': [3000, 3000, 3500, 3500, 3000, 4200, 3500, 3000, 3000, 4200, 3500, 5000], 'from': 0, 'to': 4, 'vmax': 1000, 'acc': 1000}, 14000)], [('regression: short hop without reaching speed', {'heights_mm': [3000, 3000, 3000, 3000, 3000], 'from': 1, 'to': 2, 'vmax': 4000, 'acc': 800}, 3873), ('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 18', {'heights_mm': [4200, 3000, 3500, 5000, 3500], 'from': 3, 'to': 4, 'vmax': 1000, 'acc': 800}, 6250), ('sampled regression 25', {'heights_mm': [3000, 3000, 3500, 4200, 3000, 3000, 5000, 4200, 4200], 'from': 4, 'to': 6, 'vmax': 2500, 'acc': 600}, 6325), ('regression: fractional milliseconds', {'heights_mm': [3500, 3500, 3500, 3500], 'from': 0, 'to': 3, 'vmax': 1600, 'acc': 600}, 9230), ('sampled regression 34', {'heights_mm': [3000, 5000, 3500, 4200, 3500, 3000, 3500], 'from': 3, 'to': 5, 'vmax': 4000, 'acc': 800}, 6205), ('sampled regression 37', {'heights_mm': [3000, 3000, 5000, 3000, 5000], 'from': 2, 'to': 4, 'vmax': 1000, 'acc': 1200}, 8834), ('sampled regression 40', {'heights_mm': [3000, 3500, 3500, 5000], 'from': 0, 'to': 2, 'vmax': 1600, 'acc': 1000}, 5663)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('regression: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('sampled regression 25', {'heights_mm': [3000, 3000, 3500, 4200, 3000, 3000, 5000, 4200, 4200], 'from': 4, 'to': 6, 'vmax': 2500, 'acc': 600}, 6325), ('sampled regression 31', {'heights_mm': [3500, 5000, 4200, 3500, 5000], 'from': 4, 'to': 2, 'vmax': 1000, 'acc': 600}, 9367), ('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 45', {'heights_mm': [5000, 3500, 3000, 3500, 4200, 3000, 3500, 3500, 3500, 4200], 'from': 3, 'to': 8, 'vmax': 1000, 'acc': 1200}, 18534), ('sampled regression 48', {'heights_mm': [5000, 3000, 3500, 3000, 3000, 3500, 3500, 3000, 5000, 3500], 'from': 9, 'to': 8, 'vmax': 4000, 'acc': 1000}, 4473), ('sampled regression 51', {'heights_mm': [4200, 4200, 3000, 5000, 5000, 5000, 3500], 'from': 6, 'to': 5, 'vmax': 4000, 'acc': 800}, 5000)]]
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: one floor up51003465Failed
regression: short hop without reaching speed54783873Failed
regression: downward trip75805580Failed
regression: long run at contract speed1850016900Failed
regression: between the two regimes73255917Failed
sampled regression 12170919521Failed
sampled regression 448310Failed
sampled regression 785647164Failed

SHA-256 / 07faf717522d4e07a049a8c44ec9fb4091d95465fd7abb9c0ccda76135dbc634

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    lo, hi = sorted((x['from'], x['to']))
    d = sum(x['heights_mm'][lo + 1:hi + 1])
    if d == 0:
        return 0
    v = x['vmax']
    a = x['acc']
    if d * a >= v * v:
        t = d / v + v / a
    else:
        t = 2 * math.sqrt(d / a)
    return math.ceil(t * 1000 - 1e-9)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('regression: short hop without reaching speed', {'heights_mm': [3000, 3000, 3000, 3000, 3000], 'from': 1, 'to': 2, 'vmax': 4000, 'acc': 800}, 3873), ('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('regression: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('sampled regression 1', {'heights_mm': [5000, 4200, 3500, 4200, 4200, 5000, 3000, 3500, 5000, 4200, 3500], 'from': 7, 'to': 0, 'vmax': 1600, 'acc': 1200}, 19521), ('sampled regression 4', {'heights_mm': [3500, 3500, 5000, 3500], 'from': 1, 'to': 1, 'vmax': 4000, 'acc': 600}, 0), ('sampled regression 7', {'heights_mm': [3500, 3500, 4200, 5000, 3500], 'from': 4, 'to': 1, 'vmax': 2500, 'acc': 1200}, 7164)], [('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 4', {'heights_mm': [3500, 3500, 5000, 3500], 'from': 1, 'to': 1, 'vmax': 4000, 'acc': 600}, 0), ('sampled regression 11', {'heights_mm': [4200, 3500, 5000, 3000, 3000, 5000, 4200], 'from': 3, 'to': 2, 'vmax': 1000, 'acc': 1000}, 6000), ('regression: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('regression: short hop without reaching speed', {'heights_mm': [3000, 3000, 3000, 3000, 3000], 'from': 1, 'to': 2, 'vmax': 4000, 'acc': 800}, 3873), ('sampled regression 12', {'heights_mm': [3000, 5000, 3000, 5000, 4200, 5000, 3000, 4200, 4200, 3500], 'from': 5, 'to': 1, 'vmax': 1000, 'acc': 600}, 18867), ('sampled regression 15', {'heights_mm': [3000, 3500, 3000, 3000, 5000, 3000, 3500, 3000, 3000, 3500], 'from': 4, 'to': 7, 'vmax': 1000, 'acc': 600}, 13167), ('sampled regression 18', {'heights_mm': [4200, 3000, 3500, 5000, 3500], 'from': 3, 'to': 4, 'vmax': 1000, 'acc': 800}, 6250)], [('regression: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('regression: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('sampled regression 11', {'heights_mm': [4200, 3500, 5000, 3000, 3000, 5000, 4200], 'from': 3, 'to': 2, 'vmax': 1000, 'acc': 1000}, 6000), ('sampled regression 19', {'heights_mm': [5000, 3500, 3000, 5000, 5000, 4200, 5000, 4200], 'from': 0, 'to': 7, 'vmax': 1000, 'acc': 1000}, 31700), ('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('sampled regression 23', {'heights_mm': [5000, 3000, 3000, 4200, 4200, 3500, 3000], 'from': 1, 'to': 0, 'vmax': 1600, 'acc': 1000}, 4725), ('sampled regression 26', {'heights_mm': [4200, 5000, 4200, 4200, 3000, 3500, 3500, 3500], 'from': 7, 'to': 0, 'vmax': 4000, 'acc': 1000}, 10900), ('sampled regression 29', {'heights_mm': [3000, 3000, 3500, 3500, 3000, 4200, 3500, 3000, 3000, 4200, 3500, 5000], 'from': 0, 'to': 4, 'vmax': 1000, 'acc': 1000}, 14000)], [('regression: short hop without reaching speed', {'heights_mm': [3000, 3000, 3000, 3000, 3000], 'from': 1, 'to': 2, 'vmax': 4000, 'acc': 800}, 3873), ('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 18', {'heights_mm': [4200, 3000, 3500, 5000, 3500], 'from': 3, 'to': 4, 'vmax': 1000, 'acc': 800}, 6250), ('sampled regression 25', {'heights_mm': [3000, 3000, 3500, 4200, 3000, 3000, 5000, 4200, 4200], 'from': 4, 'to': 6, 'vmax': 2500, 'acc': 600}, 6325), ('regression: fractional milliseconds', {'heights_mm': [3500, 3500, 3500, 3500], 'from': 0, 'to': 3, 'vmax': 1600, 'acc': 600}, 9230), ('sampled regression 34', {'heights_mm': [3000, 5000, 3500, 4200, 3500, 3000, 3500], 'from': 3, 'to': 5, 'vmax': 4000, 'acc': 800}, 6205), ('sampled regression 37', {'heights_mm': [3000, 3000, 5000, 3000, 5000], 'from': 2, 'to': 4, 'vmax': 1000, 'acc': 1200}, 8834), ('sampled regression 40', {'heights_mm': [3000, 3500, 3500, 5000], 'from': 0, 'to': 2, 'vmax': 1600, 'acc': 1000}, 5663)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('regression: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('sampled regression 25', {'heights_mm': [3000, 3000, 3500, 4200, 3000, 3000, 5000, 4200, 4200], 'from': 4, 'to': 6, 'vmax': 2500, 'acc': 600}, 6325), ('sampled regression 31', {'heights_mm': [3500, 5000, 4200, 3500, 5000], 'from': 4, 'to': 2, 'vmax': 1000, 'acc': 600}, 9367), ('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 45', {'heights_mm': [5000, 3500, 3000, 3500, 4200, 3000, 3500, 3500, 3500, 4200], 'from': 3, 'to': 8, 'vmax': 1000, 'acc': 1200}, 18534), ('sampled regression 48', {'heights_mm': [5000, 3000, 3500, 3000, 3000, 3500, 3500, 3000, 5000, 3500], 'from': 9, 'to': 8, 'vmax': 4000, 'acc': 1000}, 4473), ('sampled regression 51', {'heights_mm': [4200, 4200, 3000, 5000, 5000, 5000, 3500], 'from': 6, 'to': 5, 'vmax': 4000, 'acc': 800}, 5000)]]
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: one floor up37423465Failed
regression: short hop without reaching speed38733873Passed
regression: downward trip61805580Failed
regression: long run at contract speed1690016900Passed
regression: between the two regimes59175917Passed
sampled regression 11858419521Failed
sampled regression 400Passed
sampled regression 771647164Passed

SHA-256 / 8dc055c5b3a09b9f8d59b09759acb3db92ccea2771cee7961e195f85803f31a8

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    lo, hi = sorted((x['from'], x['to']))
    d = sum(x['heights_mm'][lo:hi])
    if d == 0:
        return 0
    v = x['vmax']
    a = x['acc']
    if d * a >= v * v:
        t = d / v + v / a
    else:
        t = 2 * math.sqrt(d / a)
    return math.ceil(t * 1000 - 1e-9)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('regression: short hop without reaching speed', {'heights_mm': [3000, 3000, 3000, 3000, 3000], 'from': 1, 'to': 2, 'vmax': 4000, 'acc': 800}, 3873), ('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('regression: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('sampled regression 1', {'heights_mm': [5000, 4200, 3500, 4200, 4200, 5000, 3000, 3500, 5000, 4200, 3500], 'from': 7, 'to': 0, 'vmax': 1600, 'acc': 1200}, 19521), ('sampled regression 4', {'heights_mm': [3500, 3500, 5000, 3500], 'from': 1, 'to': 1, 'vmax': 4000, 'acc': 600}, 0), ('sampled regression 7', {'heights_mm': [3500, 3500, 4200, 5000, 3500], 'from': 4, 'to': 1, 'vmax': 2500, 'acc': 1200}, 7164)], [('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 4', {'heights_mm': [3500, 3500, 5000, 3500], 'from': 1, 'to': 1, 'vmax': 4000, 'acc': 600}, 0), ('sampled regression 11', {'heights_mm': [4200, 3500, 5000, 3000, 3000, 5000, 4200], 'from': 3, 'to': 2, 'vmax': 1000, 'acc': 1000}, 6000), ('regression: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('regression: short hop without reaching speed', {'heights_mm': [3000, 3000, 3000, 3000, 3000], 'from': 1, 'to': 2, 'vmax': 4000, 'acc': 800}, 3873), ('sampled regression 12', {'heights_mm': [3000, 5000, 3000, 5000, 4200, 5000, 3000, 4200, 4200, 3500], 'from': 5, 'to': 1, 'vmax': 1000, 'acc': 600}, 18867), ('sampled regression 15', {'heights_mm': [3000, 3500, 3000, 3000, 5000, 3000, 3500, 3000, 3000, 3500], 'from': 4, 'to': 7, 'vmax': 1000, 'acc': 600}, 13167), ('sampled regression 18', {'heights_mm': [4200, 3000, 3500, 5000, 3500], 'from': 3, 'to': 4, 'vmax': 1000, 'acc': 800}, 6250)], [('regression: long run at contract speed', {'heights_mm': [4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000], 'from': 0, 'to': 9, 'vmax': 2500, 'acc': 1000}, 16900), ('regression: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('sampled regression 11', {'heights_mm': [4200, 3500, 5000, 3000, 3000, 5000, 4200], 'from': 3, 'to': 2, 'vmax': 1000, 'acc': 1000}, 6000), ('sampled regression 19', {'heights_mm': [5000, 3500, 3000, 5000, 5000, 4200, 5000, 4200], 'from': 0, 'to': 7, 'vmax': 1000, 'acc': 1000}, 31700), ('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('sampled regression 23', {'heights_mm': [5000, 3000, 3000, 4200, 4200, 3500, 3000], 'from': 1, 'to': 0, 'vmax': 1600, 'acc': 1000}, 4725), ('sampled regression 26', {'heights_mm': [4200, 5000, 4200, 4200, 3000, 3500, 3500, 3500], 'from': 7, 'to': 0, 'vmax': 4000, 'acc': 1000}, 10900), ('sampled regression 29', {'heights_mm': [3000, 3000, 3500, 3500, 3000, 4200, 3500, 3000, 3000, 4200, 3500, 5000], 'from': 0, 'to': 4, 'vmax': 1000, 'acc': 1000}, 14000)], [('regression: short hop without reaching speed', {'heights_mm': [3000, 3000, 3000, 3000, 3000], 'from': 1, 'to': 2, 'vmax': 4000, 'acc': 800}, 3873), ('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 18', {'heights_mm': [4200, 3000, 3500, 5000, 3500], 'from': 3, 'to': 4, 'vmax': 1000, 'acc': 800}, 6250), ('sampled regression 25', {'heights_mm': [3000, 3000, 3500, 4200, 3000, 3000, 5000, 4200, 4200], 'from': 4, 'to': 6, 'vmax': 2500, 'acc': 600}, 6325), ('regression: fractional milliseconds', {'heights_mm': [3500, 3500, 3500, 3500], 'from': 0, 'to': 3, 'vmax': 1600, 'acc': 600}, 9230), ('sampled regression 34', {'heights_mm': [3000, 5000, 3500, 4200, 3500, 3000, 3500], 'from': 3, 'to': 5, 'vmax': 4000, 'acc': 800}, 6205), ('sampled regression 37', {'heights_mm': [3000, 3000, 5000, 3000, 5000], 'from': 2, 'to': 4, 'vmax': 1000, 'acc': 1200}, 8834), ('sampled regression 40', {'heights_mm': [3000, 3500, 3500, 5000], 'from': 0, 'to': 2, 'vmax': 1600, 'acc': 1000}, 5663)], [('regression: between the two regimes', {'heights_mm': [3500, 3500, 3500, 3500, 3500, 3500], 'from': 0, 'to': 2, 'vmax': 2500, 'acc': 800}, 5917), ('regression: one floor up', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 0, 'to': 1, 'vmax': 2500, 'acc': 1000}, 3465), ('sampled regression 25', {'heights_mm': [3000, 3000, 3500, 4200, 3000, 3000, 5000, 4200, 4200], 'from': 4, 'to': 6, 'vmax': 2500, 'acc': 600}, 6325), ('sampled regression 31', {'heights_mm': [3500, 5000, 4200, 3500, 5000], 'from': 4, 'to': 2, 'vmax': 1000, 'acc': 600}, 9367), ('regression: downward trip', {'heights_mm': [3000, 3500, 4200, 5000], 'from': 3, 'to': 1, 'vmax': 2500, 'acc': 1000}, 5580), ('sampled regression 45', {'heights_mm': [5000, 3500, 3000, 3500, 4200, 3000, 3500, 3500, 3500, 4200], 'from': 3, 'to': 8, 'vmax': 1000, 'acc': 1200}, 18534), ('sampled regression 48', {'heights_mm': [5000, 3000, 3500, 3000, 3000, 3500, 3500, 3000, 5000, 3500], 'from': 9, 'to': 8, 'vmax': 4000, 'acc': 1000}, 4473), ('sampled regression 51', {'heights_mm': [4200, 4200, 3000, 5000, 5000, 5000, 3500], 'from': 6, 'to': 5, 'vmax': 4000, 'acc': 800}, 5000)]]
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: one floor up34653465Passed
regression: short hop without reaching speed38733873Passed
regression: downward trip55805580Passed
regression: long run at contract speed1690016900Passed
regression: between the two regimes59175917Passed
sampled regression 11952119521Passed
sampled regression 400Passed
sampled regression 771647164Passed

SHA-256 / 09a8633e7336a1a93d83ffae2db69de377771a422b2f5e6a02a0206fb5616062

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

Case digest / 2ddbe079f626c4136f5c768b75a137ac810df14f67c0edc1140ca3c7a9f12184