FAILURE MAP
← Case archive

FA-92866 / EV charging session scheduling / Open access

Time-of-use cheapest slot plan: pre-horizon arrival clipping · case 01

A car that plugged in before the tariff horizon is planned into slots at the end of the day.

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

ROOT CAUSE

A negative arrival index is used directly, so Python negative indexing wraps into late slots.

VERIFIED REPAIR

Clip the arrival to slot 0 before building the window.

Unsuccessful approach: Skipping slot 0 for early arrivals discards the first valid tariff slot.

Case contract

prices[i] is the tariff in cents/kWh of 15-minute slot i. The car is present for slots arrive..depart-1 (depart exclusive) clipped to the tariff horizon; arrive may be negative. Each slot delivers at most max_w//4 Wh. Fill the cheapest slots first (equal price: earlier slot first), the last slot partially. Return [[slot, wh] sorted by slot, cost in millicents (sum wh*price), unmet wh]. need_wh<=0 or max_w<=0 returns [[], 0, max(need_wh,0)].

Why this case matters

Depot, workplace and public EV chargers schedule sessions against prices, circuit limits and departure deadlines; a wrong decision silently strands a driver or overloads a feeder.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(prices, arrive, depart, need_wh, max_w):
    if need_wh <= 0 or max_w <= 0:
        return [[], 0, max(need_wh, 0)]
    slot_wh = max_w // 4
    lo = arrive
    hi = min(depart, len(prices))
    window = list(range(lo, hi))
    ranked = sorted(window, key=lambda s: (prices[s], s))
    plan = []
    left = need_wh
    for s in ranked:
        if left <= 0:
            break
        take = min(slot_wh, left)
        plan.append([s, take])
        left -= take
    plan.sort()
    cost = sum(wh * prices[s] for s, wh in plan)
    return [plan, cost, left]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping', [[30, 8, 15, 8, 20], -3, 4, 4000, 11000],
   [[[1, 2750], [3, 1250]], 32000, 0]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[12, 25, 12, 8, 30, 10], -1, 9, 7000, 11000], [[[0, 1500], [3, 2750], [5, 2750]], 67500, 0]],
  ['control 1', [[25, 30, 20, 12, 12], 2, 2, 20000, 11000], [[], 0, 20000]],
  ['control 2', [[8, 15, 12, 10, 8, 25, 12, 8, 8, 20, 20, 25, 12, 8], -3, 15, 7000, 3700],
   [[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping',
   [[25, 30, 20, 12, 30, 12, 30, 12, 30, 8, 12, 10], -1, 3, 20000, 7400],
   [[[0, 1850], [1, 1850], [2, 1850]], 138750, 14450]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[15, 12, 12, 15, 30, 25, 25, 10, 12, 15, 20, 12], -1, 14, 12500, 3700],
   [[[0, 925], [1, 925], [2, 925], [3, 925], [4, 925], [5, 925], [6, 925], [7, 925], [8, 925],
     [9, 925], [10, 925], [11, 925]],
    187775, 1400]],
  ['control 1', [[30, 12, 20, 30, 25, 30, 12, 30, 20, 10, 20, 8, 15], 7, 12, 4000, 11000],
   [[[9, 1250], [11, 2750]], 34500, 0]],
  ['control 2', [[12, 12, 25, 30, 8, 20, 12, 12], 3, 11, 9000, 3700],
   [[[3, 925], [4, 925], [5, 925], [6, 925], [7, 925]], 75850, 4375]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping', [[15, 15, 25, 20], -1, 7, 7000, 7400],
   [[[0, 1850], [1, 1850], [2, 1450], [3, 1850]], 128750, 0]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[8, 10, 15, 10, 12, 8, 15, 20, 12, 8], -3, 7, 12500, 3700],
   [[[0, 925], [1, 925], [2, 925], [3, 925], [4, 925], [5, 925], [6, 925]], 72150, 6025]],
  ['control 1', [[12, 10, 15, 25, 30], 4, 4, 12500, 7400], [[], 0, 12500]],
  ['control 2', [[30, 12, 15, 12, 30, 15, 12, 20, 20], -2, 1, 9000, 0], [[], 0, 9000]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping', [[10, 30, 12, 30, 30, 10], -1, 1, 12500, 11000],
   [[[0, 2750]], 27500, 9750]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[10, 12, 15, 25, 30], -1, 1, 12500, 3700], [[[0, 925]], 9250, 11575]],
  ['control 1', [[12, 20, 8, 15, 10, 8, 25, 12, 30, 12], 2, 12, 20000, 11000],
   [[[2, 2750], [3, 2750], [4, 2750], [5, 2750], [6, 2750], [7, 2750], [8, 750], [9, 2750]], 270000,
    0]],
  ['control 2', [[30, 30, 20, 12, 12, 15, 12, 10], -1, 8, 7000, 7400],
   [[[3, 1850], [4, 1850], [6, 1450], [7, 1850]], 80300, 0]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping',
   [[10, 12, 10, 20, 30, 15, 25, 12, 30, 10, 15, 12, 12], -1, 5, 9000, 7400],
   [[[0, 1850], [1, 1850], [2, 1850], [3, 1850], [4, 1600]], 144200, 0]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[12, 15, 12, 10, 12, 8, 15, 8], -1, 6, 9000, 11000],
   [[[0, 2750], [2, 750], [3, 2750], [5, 2750]], 91500, 0]],
  ['control 1', [[12, 12, 8, 15, 10, 12, 20, 15, 12, 10, 12, 12, 15, 15], 12, 13, 1500, 3700],
   [[[12, 925]], 13875, 575]],
  ['control 2', [[10, 12, 10, 8, 10, 12, 12], 2, 5, 4000, 11000],
   [[[2, 1250], [3, 2750]], 34500, 0]]]]
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
boundary: nothing needed[[], 0, 0][[], 0, 0]Passed
boundary: empty window[[], 0, 5000][[], 0, 5000]Passed
boundary: departure beyond tariff horizon[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0][[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]Passed
regression: pre-horizon arrival clipping[[[-2, 2750], [1, 1250]], 32000, 0][[[1, 2750], [3, 1250]], 32000, 0]Failed
regression: pre-horizon arrival clipping (partial repair)[[[-1, 2750], [3, 2750], [5, 1500]], 64500, 0][[[0, 1500], [3, 2750], [5, 2750]], 67500, 0]Failed
control 1[[], 0, 20000][[], 0, 20000]Passed
control 2[[[-2, 525], [-1, 925], [0, 925], [3, 925], [4, 925], [7, 925], [8, 925], [13, 925]], 59950, 0][[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0]Failed

SHA-256 / 8da4ee6985d4cbdade5b56b3c753d98badd6c3eb7209d47d1b0639376bb8bd84

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(prices, arrive, depart, need_wh, max_w):
    if need_wh <= 0 or max_w <= 0:
        return [[], 0, max(need_wh, 0)]
    slot_wh = max_w // 4
    lo = max(arrive, 0) + 1 if arrive < 0 else arrive
    hi = min(depart, len(prices))
    window = list(range(lo, hi))
    ranked = sorted(window, key=lambda s: (prices[s], s))
    plan = []
    left = need_wh
    for s in ranked:
        if left <= 0:
            break
        take = min(slot_wh, left)
        plan.append([s, take])
        left -= take
    plan.sort()
    cost = sum(wh * prices[s] for s, wh in plan)
    return [plan, cost, left]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping', [[30, 8, 15, 8, 20], -3, 4, 4000, 11000],
   [[[1, 2750], [3, 1250]], 32000, 0]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[12, 25, 12, 8, 30, 10], -1, 9, 7000, 11000], [[[0, 1500], [3, 2750], [5, 2750]], 67500, 0]],
  ['control 1', [[25, 30, 20, 12, 12], 2, 2, 20000, 11000], [[], 0, 20000]],
  ['control 2', [[8, 15, 12, 10, 8, 25, 12, 8, 8, 20, 20, 25, 12, 8], -3, 15, 7000, 3700],
   [[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping',
   [[25, 30, 20, 12, 30, 12, 30, 12, 30, 8, 12, 10], -1, 3, 20000, 7400],
   [[[0, 1850], [1, 1850], [2, 1850]], 138750, 14450]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[15, 12, 12, 15, 30, 25, 25, 10, 12, 15, 20, 12], -1, 14, 12500, 3700],
   [[[0, 925], [1, 925], [2, 925], [3, 925], [4, 925], [5, 925], [6, 925], [7, 925], [8, 925],
     [9, 925], [10, 925], [11, 925]],
    187775, 1400]],
  ['control 1', [[30, 12, 20, 30, 25, 30, 12, 30, 20, 10, 20, 8, 15], 7, 12, 4000, 11000],
   [[[9, 1250], [11, 2750]], 34500, 0]],
  ['control 2', [[12, 12, 25, 30, 8, 20, 12, 12], 3, 11, 9000, 3700],
   [[[3, 925], [4, 925], [5, 925], [6, 925], [7, 925]], 75850, 4375]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping', [[15, 15, 25, 20], -1, 7, 7000, 7400],
   [[[0, 1850], [1, 1850], [2, 1450], [3, 1850]], 128750, 0]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[8, 10, 15, 10, 12, 8, 15, 20, 12, 8], -3, 7, 12500, 3700],
   [[[0, 925], [1, 925], [2, 925], [3, 925], [4, 925], [5, 925], [6, 925]], 72150, 6025]],
  ['control 1', [[12, 10, 15, 25, 30], 4, 4, 12500, 7400], [[], 0, 12500]],
  ['control 2', [[30, 12, 15, 12, 30, 15, 12, 20, 20], -2, 1, 9000, 0], [[], 0, 9000]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping', [[10, 30, 12, 30, 30, 10], -1, 1, 12500, 11000],
   [[[0, 2750]], 27500, 9750]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[10, 12, 15, 25, 30], -1, 1, 12500, 3700], [[[0, 925]], 9250, 11575]],
  ['control 1', [[12, 20, 8, 15, 10, 8, 25, 12, 30, 12], 2, 12, 20000, 11000],
   [[[2, 2750], [3, 2750], [4, 2750], [5, 2750], [6, 2750], [7, 2750], [8, 750], [9, 2750]], 270000,
    0]],
  ['control 2', [[30, 30, 20, 12, 12, 15, 12, 10], -1, 8, 7000, 7400],
   [[[3, 1850], [4, 1850], [6, 1450], [7, 1850]], 80300, 0]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping',
   [[10, 12, 10, 20, 30, 15, 25, 12, 30, 10, 15, 12, 12], -1, 5, 9000, 7400],
   [[[0, 1850], [1, 1850], [2, 1850], [3, 1850], [4, 1600]], 144200, 0]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[12, 15, 12, 10, 12, 8, 15, 8], -1, 6, 9000, 11000],
   [[[0, 2750], [2, 750], [3, 2750], [5, 2750]], 91500, 0]],
  ['control 1', [[12, 12, 8, 15, 10, 12, 20, 15, 12, 10, 12, 12, 15, 15], 12, 13, 1500, 3700],
   [[[12, 925]], 13875, 575]],
  ['control 2', [[10, 12, 10, 8, 10, 12, 12], 2, 5, 4000, 11000],
   [[[2, 1250], [3, 2750]], 34500, 0]]]]
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
boundary: nothing needed[[], 0, 0][[], 0, 0]Passed
boundary: empty window[[], 0, 5000][[], 0, 5000]Passed
boundary: departure beyond tariff horizon[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0][[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]Passed
regression: pre-horizon arrival clipping[[[1, 2750], [3, 1250]], 32000, 0][[[1, 2750], [3, 1250]], 32000, 0]Passed
regression: pre-horizon arrival clipping (partial repair)[[[2, 1500], [3, 2750], [5, 2750]], 67500, 0][[[0, 1500], [3, 2750], [5, 2750]], 67500, 0]Failed
control 1[[], 0, 20000][[], 0, 20000]Passed
control 2[[[2, 925], [3, 925], [4, 925], [6, 925], [7, 925], [8, 925], [12, 525], [13, 925]], 67350, 0][[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0]Failed

SHA-256 / 1df564d3bc161ac17dbb0b9553257384cb2cdcf8a56d20604a647487fd13113d

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(prices, arrive, depart, need_wh, max_w):
    if need_wh <= 0 or max_w <= 0:
        return [[], 0, max(need_wh, 0)]
    slot_wh = max_w // 4
    lo = max(arrive, 0)
    hi = min(depart, len(prices))
    window = list(range(lo, hi))
    ranked = sorted(window, key=lambda s: (prices[s], s))
    plan = []
    left = need_wh
    for s in ranked:
        if left <= 0:
            break
        take = min(slot_wh, left)
        plan.append([s, take])
        left -= take
    plan.sort()
    cost = sum(wh * prices[s] for s, wh in plan)
    return [plan, cost, left]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping', [[30, 8, 15, 8, 20], -3, 4, 4000, 11000],
   [[[1, 2750], [3, 1250]], 32000, 0]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[12, 25, 12, 8, 30, 10], -1, 9, 7000, 11000], [[[0, 1500], [3, 2750], [5, 2750]], 67500, 0]],
  ['control 1', [[25, 30, 20, 12, 12], 2, 2, 20000, 11000], [[], 0, 20000]],
  ['control 2', [[8, 15, 12, 10, 8, 25, 12, 8, 8, 20, 20, 25, 12, 8], -3, 15, 7000, 3700],
   [[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping',
   [[25, 30, 20, 12, 30, 12, 30, 12, 30, 8, 12, 10], -1, 3, 20000, 7400],
   [[[0, 1850], [1, 1850], [2, 1850]], 138750, 14450]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[15, 12, 12, 15, 30, 25, 25, 10, 12, 15, 20, 12], -1, 14, 12500, 3700],
   [[[0, 925], [1, 925], [2, 925], [3, 925], [4, 925], [5, 925], [6, 925], [7, 925], [8, 925],
     [9, 925], [10, 925], [11, 925]],
    187775, 1400]],
  ['control 1', [[30, 12, 20, 30, 25, 30, 12, 30, 20, 10, 20, 8, 15], 7, 12, 4000, 11000],
   [[[9, 1250], [11, 2750]], 34500, 0]],
  ['control 2', [[12, 12, 25, 30, 8, 20, 12, 12], 3, 11, 9000, 3700],
   [[[3, 925], [4, 925], [5, 925], [6, 925], [7, 925]], 75850, 4375]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping', [[15, 15, 25, 20], -1, 7, 7000, 7400],
   [[[0, 1850], [1, 1850], [2, 1450], [3, 1850]], 128750, 0]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[8, 10, 15, 10, 12, 8, 15, 20, 12, 8], -3, 7, 12500, 3700],
   [[[0, 925], [1, 925], [2, 925], [3, 925], [4, 925], [5, 925], [6, 925]], 72150, 6025]],
  ['control 1', [[12, 10, 15, 25, 30], 4, 4, 12500, 7400], [[], 0, 12500]],
  ['control 2', [[30, 12, 15, 12, 30, 15, 12, 20, 20], -2, 1, 9000, 0], [[], 0, 9000]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping', [[10, 30, 12, 30, 30, 10], -1, 1, 12500, 11000],
   [[[0, 2750]], 27500, 9750]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[10, 12, 15, 25, 30], -1, 1, 12500, 3700], [[[0, 925]], 9250, 11575]],
  ['control 1', [[12, 20, 8, 15, 10, 8, 25, 12, 30, 12], 2, 12, 20000, 11000],
   [[[2, 2750], [3, 2750], [4, 2750], [5, 2750], [6, 2750], [7, 2750], [8, 750], [9, 2750]], 270000,
    0]],
  ['control 2', [[30, 30, 20, 12, 12, 15, 12, 10], -1, 8, 7000, 7400],
   [[[3, 1850], [4, 1850], [6, 1450], [7, 1850]], 80300, 0]]],
 [['boundary: nothing needed', [[10, 20, 30], 0, 3, 0, 7400], [[], 0, 0]],
  ['boundary: empty window', [[10, 20, 30], 2, 2, 5000, 7400], [[], 0, 5000]],
  ['boundary: departure beyond tariff horizon', [[30, 10, 10, 20], 1, 9, 5000, 7400],
   [[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]],
  ['regression: pre-horizon arrival clipping',
   [[10, 12, 10, 20, 30, 15, 25, 12, 30, 10, 15, 12, 12], -1, 5, 9000, 7400],
   [[[0, 1850], [1, 1850], [2, 1850], [3, 1850], [4, 1600]], 144200, 0]],
  ['regression: pre-horizon arrival clipping (partial repair)',
   [[12, 15, 12, 10, 12, 8, 15, 8], -1, 6, 9000, 11000],
   [[[0, 2750], [2, 750], [3, 2750], [5, 2750]], 91500, 0]],
  ['control 1', [[12, 12, 8, 15, 10, 12, 20, 15, 12, 10, 12, 12, 15, 15], 12, 13, 1500, 3700],
   [[[12, 925]], 13875, 575]],
  ['control 2', [[10, 12, 10, 8, 10, 12, 12], 2, 5, 4000, 11000],
   [[[2, 1250], [3, 2750]], 34500, 0]]]]
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
boundary: nothing needed[[], 0, 0][[], 0, 0]Passed
boundary: empty window[[], 0, 5000][[], 0, 5000]Passed
boundary: departure beyond tariff horizon[[[1, 1850], [2, 1850], [3, 1300]], 63000, 0][[[1, 1850], [2, 1850], [3, 1300]], 63000, 0]Passed
regression: pre-horizon arrival clipping[[[1, 2750], [3, 1250]], 32000, 0][[[1, 2750], [3, 1250]], 32000, 0]Passed
regression: pre-horizon arrival clipping (partial repair)[[[0, 1500], [3, 2750], [5, 2750]], 67500, 0][[[0, 1500], [3, 2750], [5, 2750]], 67500, 0]Passed
control 1[[], 0, 20000][[], 0, 20000]Passed
control 2[[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0][[[0, 925], [2, 925], [3, 925], [4, 925], [6, 525], [7, 925], [8, 925], [13, 925]], 63650, 0]Passed

SHA-256 / e72e6b5ae07ad975e946f51c5e15c08ff21dcfe83e1cd92f38760f7311b86dfe

Verification & scope

Deterministic stipulated toy contract for teaching; no claim of conformance with any standard, vendor protocol or production controller. 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:51:49.843662+00:00.

Case digest / d8b4c2834551504edba3a86426dc109acf9292a8832df1b233ddcb2863e22afe