FAILURE MAP
← Case archive

FA-92906 / EV charging session scheduling / Open access

Shared circuit current allocation: minimum pilot current eligibility · case 01

Vehicles whose onboard charger accepts exactly 6 A are left paused.

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

ROOT CAUSE

The eligibility test excludes the 6 A minimum itself.

VERIFIED REPAIR

Accept EVs whose max_a is at least 6.

Unsuccessful approach: Lowering the bound to 5 A admits vehicles that cannot run at the minimum pilot current.

Case contract

evs is a list of [id, max_a, priority]. An EV with max_a < 6 cannot be served. Eligible EVs are ordered by priority descending then id; each is admitted while 6*(admitted+1) <= limit_a. Admitted EVs are water-filled: repeatedly give floor(remaining/open) amps, fixing EVs whose max_a <= share at their max. Leftover amps go one each in admission order to EVs below max. Return [[id, amps]] for every EV sorted by id (0 = paused).

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(limit_a, evs):
    elig = [e for e in evs if e[1] > 6]
    elig.sort(key=lambda e: (-e[2], e[0]))
    admitted = []
    for e in elig:
        if 6 * (len(admitted) + 1) <= limit_a:
            admitted.append(e)
    alloc = {e[0]: 0 for e in evs}
    remaining = limit_a
    open_ = list(admitted)
    while open_:
        share = remaining // len(open_)
        capped = [e for e in open_ if e[1] <= share]
        if not capped:
            for e in open_:
                alloc[e[0]] = share
            remaining -= share * len(open_)
            break
        for e in capped:
            alloc[e[0]] = e[1]
            remaining -= e[1]
            open_.remove(e)
    for e in admitted:
        if remaining <= 0:
            break
        if alloc[e[0]] < e[1]:
            alloc[e[0]] += 1
            remaining -= 1
    return [[k, alloc[k]] for k in sorted(alloc)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [63,
    [['EV4', 24, 3], ['EV5', 8, 1], ['EV2', 6, 0], ['EV3', 5, 1], ['EV1', 5, 3], ['EV0', 24, 3]]],
   [['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [16, [['EV3', 16, 2], ['EV0', 16, 3], ['EV2', 5, 2], ['EV1', 5, 1]]],
   [['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]]],
  ['control 1', [32, [['EV0', 32, 3], ['EV1', 24, 3]]], [['EV0', 16], ['EV1', 16]]],
  ['control 2', [24, [['EV0', 16, 2], ['EV1', 32, 2], ['EV2', 32, 0], ['EV3', 8, 1]]],
   [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [32,
    [['EV2', 32, 1], ['EV4', 32, 0], ['EV3', 6, 2], ['EV1', 32, 2], ['EV5', 24, 1],
     ['EV0', 32, 3]]],
   [['EV0', 7], ['EV1', 7], ['EV2', 6], ['EV3', 6], ['EV4', 0], ['EV5', 6]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [24, [['EV0', 10, 2], ['EV4', 6, 3], ['EV2', 5, 3], ['EV3', 32, 1], ['EV1', 16, 3]]],
   [['EV0', 6], ['EV1', 6], ['EV2', 0], ['EV3', 6], ['EV4', 6]]],
  ['control 1',
   [30,
    [['EV1', 8, 3], ['EV4', 6, 2], ['EV0', 16, 0], ['EV2', 10, 3], ['EV3', 24, 1], ['EV5', 6, 2]]],
   [['EV0', 0], ['EV1', 6], ['EV2', 6], ['EV3', 6], ['EV4', 6], ['EV5', 6]]],
  ['control 2', [40, [['EV1', 5, 1], ['EV0', 32, 2]]], [['EV0', 32], ['EV1', 0]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [16, [['EV0', 6, 1], ['EV2', 5, 1], ['EV1', 24, 3]]], [['EV0', 6], ['EV1', 10], ['EV2', 0]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [10, [['EV0', 5, 3], ['EV1', 10, 2]]], [['EV0', 0], ['EV1', 10]]],
  ['control 1', [18, [['EV2', 32, 0], ['EV0', 5, 2], ['EV1', 24, 3]]],
   [['EV0', 0], ['EV1', 9], ['EV2', 9]]],
  ['control 2', [16, [['EV0', 24, 3], ['EV1', 16, 0], ['EV2', 16, 2]]],
   [['EV0', 8], ['EV1', 0], ['EV2', 8]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [18, [['EV2', 6, 0], ['EV1', 24, 1], ['EV3', 24, 0], ['EV0', 32, 2]]],
   [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 0]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [48, [['EV2', 8, 2], ['EV0', 32, 3], ['EV1', 5, 3]]], [['EV0', 32], ['EV1', 0], ['EV2', 8]]],
  ['control 1', [16, [['EV1', 16, 2], ['EV0', 32, 3]]], [['EV0', 8], ['EV1', 8]]],
  ['control 2',
   [48,
    [['EV3', 8, 0], ['EV1', 16, 0], ['EV4', 5, 0], ['EV2', 8, 0], ['EV5', 10, 0], ['EV0', 10, 3]]],
   [['EV0', 10], ['EV1', 12], ['EV2', 8], ['EV3', 8], ['EV4', 0], ['EV5', 10]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [40, [['EV1', 24, 3], ['EV0', 6, 0], ['EV2', 32, 1], ['EV3', 32, 3]]],
   [['EV0', 6], ['EV1', 12], ['EV2', 11], ['EV3', 11]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [40,
    [['EV0', 5, 0], ['EV2', 24, 3], ['EV1', 32, 0], ['EV5', 8, 2], ['EV3', 10, 2], ['EV4', 8, 1]]],
   [['EV0', 0], ['EV1', 8], ['EV2', 8], ['EV3', 8], ['EV4', 8], ['EV5', 8]]],
  ['control 1', [40, [['EV2', 5, 0], ['EV0', 6, 2], ['EV3', 24, 2], ['EV1', 10, 3]]],
   [['EV0', 6], ['EV1', 10], ['EV2', 0], ['EV3', 24]]],
  ['control 2', [10, [['EV0', 10, 0]]], [['EV0', 10]]]]]
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: exactly one minimum share[['A', 6], ['B', 0]][['A', 6], ['B', 0]]Passed
boundary: EV at 6 A maximum[['A', 0], ['B', 20]][['A', 6], ['B', 14]]Failed
boundary: no EVs[][]Passed
regression: minimum pilot current eligibility[['EV0', 24], ['EV1', 0], ['EV2', 0], ['EV3', 0], ['EV4', 24], ['EV5', 8]][['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]]Failed
regression: minimum pilot current eligibility (partial repair)[['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]][['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]]Passed
control 1[['EV0', 16], ['EV1', 16]][['EV0', 16], ['EV1', 16]]Passed
control 2[['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]][['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]]Passed

SHA-256 / 431df85f8d3788b1872d0e7695c72d31d89ffa2914675bedcead3df3b496549c

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(limit_a, evs):
    elig = [e for e in evs if e[1] >= 5]
    elig.sort(key=lambda e: (-e[2], e[0]))
    admitted = []
    for e in elig:
        if 6 * (len(admitted) + 1) <= limit_a:
            admitted.append(e)
    alloc = {e[0]: 0 for e in evs}
    remaining = limit_a
    open_ = list(admitted)
    while open_:
        share = remaining // len(open_)
        capped = [e for e in open_ if e[1] <= share]
        if not capped:
            for e in open_:
                alloc[e[0]] = share
            remaining -= share * len(open_)
            break
        for e in capped:
            alloc[e[0]] = e[1]
            remaining -= e[1]
            open_.remove(e)
    for e in admitted:
        if remaining <= 0:
            break
        if alloc[e[0]] < e[1]:
            alloc[e[0]] += 1
            remaining -= 1
    return [[k, alloc[k]] for k in sorted(alloc)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [63,
    [['EV4', 24, 3], ['EV5', 8, 1], ['EV2', 6, 0], ['EV3', 5, 1], ['EV1', 5, 3], ['EV0', 24, 3]]],
   [['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [16, [['EV3', 16, 2], ['EV0', 16, 3], ['EV2', 5, 2], ['EV1', 5, 1]]],
   [['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]]],
  ['control 1', [32, [['EV0', 32, 3], ['EV1', 24, 3]]], [['EV0', 16], ['EV1', 16]]],
  ['control 2', [24, [['EV0', 16, 2], ['EV1', 32, 2], ['EV2', 32, 0], ['EV3', 8, 1]]],
   [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [32,
    [['EV2', 32, 1], ['EV4', 32, 0], ['EV3', 6, 2], ['EV1', 32, 2], ['EV5', 24, 1],
     ['EV0', 32, 3]]],
   [['EV0', 7], ['EV1', 7], ['EV2', 6], ['EV3', 6], ['EV4', 0], ['EV5', 6]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [24, [['EV0', 10, 2], ['EV4', 6, 3], ['EV2', 5, 3], ['EV3', 32, 1], ['EV1', 16, 3]]],
   [['EV0', 6], ['EV1', 6], ['EV2', 0], ['EV3', 6], ['EV4', 6]]],
  ['control 1',
   [30,
    [['EV1', 8, 3], ['EV4', 6, 2], ['EV0', 16, 0], ['EV2', 10, 3], ['EV3', 24, 1], ['EV5', 6, 2]]],
   [['EV0', 0], ['EV1', 6], ['EV2', 6], ['EV3', 6], ['EV4', 6], ['EV5', 6]]],
  ['control 2', [40, [['EV1', 5, 1], ['EV0', 32, 2]]], [['EV0', 32], ['EV1', 0]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [16, [['EV0', 6, 1], ['EV2', 5, 1], ['EV1', 24, 3]]], [['EV0', 6], ['EV1', 10], ['EV2', 0]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [10, [['EV0', 5, 3], ['EV1', 10, 2]]], [['EV0', 0], ['EV1', 10]]],
  ['control 1', [18, [['EV2', 32, 0], ['EV0', 5, 2], ['EV1', 24, 3]]],
   [['EV0', 0], ['EV1', 9], ['EV2', 9]]],
  ['control 2', [16, [['EV0', 24, 3], ['EV1', 16, 0], ['EV2', 16, 2]]],
   [['EV0', 8], ['EV1', 0], ['EV2', 8]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [18, [['EV2', 6, 0], ['EV1', 24, 1], ['EV3', 24, 0], ['EV0', 32, 2]]],
   [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 0]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [48, [['EV2', 8, 2], ['EV0', 32, 3], ['EV1', 5, 3]]], [['EV0', 32], ['EV1', 0], ['EV2', 8]]],
  ['control 1', [16, [['EV1', 16, 2], ['EV0', 32, 3]]], [['EV0', 8], ['EV1', 8]]],
  ['control 2',
   [48,
    [['EV3', 8, 0], ['EV1', 16, 0], ['EV4', 5, 0], ['EV2', 8, 0], ['EV5', 10, 0], ['EV0', 10, 3]]],
   [['EV0', 10], ['EV1', 12], ['EV2', 8], ['EV3', 8], ['EV4', 0], ['EV5', 10]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [40, [['EV1', 24, 3], ['EV0', 6, 0], ['EV2', 32, 1], ['EV3', 32, 3]]],
   [['EV0', 6], ['EV1', 12], ['EV2', 11], ['EV3', 11]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [40,
    [['EV0', 5, 0], ['EV2', 24, 3], ['EV1', 32, 0], ['EV5', 8, 2], ['EV3', 10, 2], ['EV4', 8, 1]]],
   [['EV0', 0], ['EV1', 8], ['EV2', 8], ['EV3', 8], ['EV4', 8], ['EV5', 8]]],
  ['control 1', [40, [['EV2', 5, 0], ['EV0', 6, 2], ['EV3', 24, 2], ['EV1', 10, 3]]],
   [['EV0', 6], ['EV1', 10], ['EV2', 0], ['EV3', 24]]],
  ['control 2', [10, [['EV0', 10, 0]]], [['EV0', 10]]]]]
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: exactly one minimum share[['A', 6], ['B', 0]][['A', 6], ['B', 0]]Passed
boundary: EV at 6 A maximum[['A', 6], ['B', 14]][['A', 6], ['B', 14]]Passed
boundary: no EVs[][]Passed
regression: minimum pilot current eligibility[['EV0', 20], ['EV1', 5], ['EV2', 6], ['EV3', 5], ['EV4', 19], ['EV5', 8]][['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]]Failed
regression: minimum pilot current eligibility (partial repair)[['EV0', 11], ['EV1', 0], ['EV2', 5], ['EV3', 0]][['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]]Failed
control 1[['EV0', 16], ['EV1', 16]][['EV0', 16], ['EV1', 16]]Passed
control 2[['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]][['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]]Passed

SHA-256 / 4a06b8e3c9f9238147307b0b30ae4be418f6ae85871ea67a8b2afc9d95f81a03

3 / The verified repair

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

N = 1
observations = []
def solve(limit_a, evs):
    elig = [e for e in evs if e[1] >= 6]
    elig.sort(key=lambda e: (-e[2], e[0]))
    admitted = []
    for e in elig:
        if 6 * (len(admitted) + 1) <= limit_a:
            admitted.append(e)
    alloc = {e[0]: 0 for e in evs}
    remaining = limit_a
    open_ = list(admitted)
    while open_:
        share = remaining // len(open_)
        capped = [e for e in open_ if e[1] <= share]
        if not capped:
            for e in open_:
                alloc[e[0]] = share
            remaining -= share * len(open_)
            break
        for e in capped:
            alloc[e[0]] = e[1]
            remaining -= e[1]
            open_.remove(e)
    for e in admitted:
        if remaining <= 0:
            break
        if alloc[e[0]] < e[1]:
            alloc[e[0]] += 1
            remaining -= 1
    return [[k, alloc[k]] for k in sorted(alloc)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [63,
    [['EV4', 24, 3], ['EV5', 8, 1], ['EV2', 6, 0], ['EV3', 5, 1], ['EV1', 5, 3], ['EV0', 24, 3]]],
   [['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [16, [['EV3', 16, 2], ['EV0', 16, 3], ['EV2', 5, 2], ['EV1', 5, 1]]],
   [['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]]],
  ['control 1', [32, [['EV0', 32, 3], ['EV1', 24, 3]]], [['EV0', 16], ['EV1', 16]]],
  ['control 2', [24, [['EV0', 16, 2], ['EV1', 32, 2], ['EV2', 32, 0], ['EV3', 8, 1]]],
   [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [32,
    [['EV2', 32, 1], ['EV4', 32, 0], ['EV3', 6, 2], ['EV1', 32, 2], ['EV5', 24, 1],
     ['EV0', 32, 3]]],
   [['EV0', 7], ['EV1', 7], ['EV2', 6], ['EV3', 6], ['EV4', 0], ['EV5', 6]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [24, [['EV0', 10, 2], ['EV4', 6, 3], ['EV2', 5, 3], ['EV3', 32, 1], ['EV1', 16, 3]]],
   [['EV0', 6], ['EV1', 6], ['EV2', 0], ['EV3', 6], ['EV4', 6]]],
  ['control 1',
   [30,
    [['EV1', 8, 3], ['EV4', 6, 2], ['EV0', 16, 0], ['EV2', 10, 3], ['EV3', 24, 1], ['EV5', 6, 2]]],
   [['EV0', 0], ['EV1', 6], ['EV2', 6], ['EV3', 6], ['EV4', 6], ['EV5', 6]]],
  ['control 2', [40, [['EV1', 5, 1], ['EV0', 32, 2]]], [['EV0', 32], ['EV1', 0]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [16, [['EV0', 6, 1], ['EV2', 5, 1], ['EV1', 24, 3]]], [['EV0', 6], ['EV1', 10], ['EV2', 0]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [10, [['EV0', 5, 3], ['EV1', 10, 2]]], [['EV0', 0], ['EV1', 10]]],
  ['control 1', [18, [['EV2', 32, 0], ['EV0', 5, 2], ['EV1', 24, 3]]],
   [['EV0', 0], ['EV1', 9], ['EV2', 9]]],
  ['control 2', [16, [['EV0', 24, 3], ['EV1', 16, 0], ['EV2', 16, 2]]],
   [['EV0', 8], ['EV1', 0], ['EV2', 8]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [18, [['EV2', 6, 0], ['EV1', 24, 1], ['EV3', 24, 0], ['EV0', 32, 2]]],
   [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 0]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [48, [['EV2', 8, 2], ['EV0', 32, 3], ['EV1', 5, 3]]], [['EV0', 32], ['EV1', 0], ['EV2', 8]]],
  ['control 1', [16, [['EV1', 16, 2], ['EV0', 32, 3]]], [['EV0', 8], ['EV1', 8]]],
  ['control 2',
   [48,
    [['EV3', 8, 0], ['EV1', 16, 0], ['EV4', 5, 0], ['EV2', 8, 0], ['EV5', 10, 0], ['EV0', 10, 3]]],
   [['EV0', 10], ['EV1', 12], ['EV2', 8], ['EV3', 8], ['EV4', 0], ['EV5', 10]]]],
 [['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
  ['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
  ['boundary: no EVs', [32, []], []],
  ['regression: minimum pilot current eligibility',
   [40, [['EV1', 24, 3], ['EV0', 6, 0], ['EV2', 32, 1], ['EV3', 32, 3]]],
   [['EV0', 6], ['EV1', 12], ['EV2', 11], ['EV3', 11]]],
  ['regression: minimum pilot current eligibility (partial repair)',
   [40,
    [['EV0', 5, 0], ['EV2', 24, 3], ['EV1', 32, 0], ['EV5', 8, 2], ['EV3', 10, 2], ['EV4', 8, 1]]],
   [['EV0', 0], ['EV1', 8], ['EV2', 8], ['EV3', 8], ['EV4', 8], ['EV5', 8]]],
  ['control 1', [40, [['EV2', 5, 0], ['EV0', 6, 2], ['EV3', 24, 2], ['EV1', 10, 3]]],
   [['EV0', 6], ['EV1', 10], ['EV2', 0], ['EV3', 24]]],
  ['control 2', [10, [['EV0', 10, 0]]], [['EV0', 10]]]]]
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: exactly one minimum share[['A', 6], ['B', 0]][['A', 6], ['B', 0]]Passed
boundary: EV at 6 A maximum[['A', 6], ['B', 14]][['A', 6], ['B', 14]]Passed
boundary: no EVs[][]Passed
regression: minimum pilot current eligibility[['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]][['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]]Passed
regression: minimum pilot current eligibility (partial repair)[['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]][['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]]Passed
control 1[['EV0', 16], ['EV1', 16]][['EV0', 16], ['EV1', 16]]Passed
control 2[['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]][['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]]Passed

SHA-256 / fb349bf25b841966db9c1c14734d79a56d0b4f96421aefdd0d0696063dfa72ef

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

Case digest / 2558b09dd3b3a8c963fe40c6ed582fb475a53744149d8f7665f270512f96c6fa