FAILURE MAP
← Case archive

FA-95281 / Warehouse slotting and bin packing / Open access

Face sizing: needed cases floored · case 01

Faces are sized a case short and run out before the replenishment cycle.

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

ROOT CAUSE

Needed cases are floor-divided, dropping the partial case of demand.

VERIFIED REPAIR

Round needed cases up.

Unsuccessful approach: Rounding to nearest still drops partial cases below one half.

Case contract

weekly eaches demand, days of cover, case pack cp, slot_types [[type, capacity_cases, cost_rank]]. Needed cases = ceil(weekly*days / (7*cp)). Choose the smallest capacity that holds it (then cost_rank, type) using 1 slot. If none holds it, use the largest capacity type (then cost_rank, type) and ceil(need/capacity) slots. Zero demand -> ["NONE", 0, 0].

Why this case matters

Forward pick faces are sized to hold a target number of days of demand.

1 / The failure

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

N = 1
observations = []
def solve(weekly, days, cp, slot_types):
    if weekly <= 0:
        return ['NONE', 0, 0]
    need = (weekly * days) // (7 * cp)
    fits = [s for s in slot_types if s[1] >= need]
    if fits:
        t = min(fits, key=lambda s: (s[1], s[2], s[0]))
        return [t[0], need, 1]
    t = min(slot_types, key=lambda s: (-s[1], s[2], s[0]))
    return [t[0], need, -(-need // t[1])]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 7', [84, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 10, 2]], ['generated mix 15', [1400, 14, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 234, 24]], ['generated mix 23', [70, 5, 1, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 50, 9]]], [['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['generated mix 13', [1, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 10', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 19', [20, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 3, 1]], ['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]]], [['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 1]], ['generated mix 18', [1400, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 34, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 22', [700, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 1400, 35]], ['generated mix 30', [1400, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 50, 5]], ['generated mix 38', [0, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['NONE', 0, 0]]], [['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 32', [1400, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 40', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 50, 2]], ['generated mix 48', [700, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 84, 14]], ['generated mix 56', [1, 5, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 1]]], [['generated mix 39', [1400, 7, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 117, 20]], ['generated mix 44', [350, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 5, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 43', [20, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 7, 1]], ['generated mix 52', [0, 14, 24, [['A', 10, 2], ['B', 10, 1]]], ['NONE', 0, 0]], ['generated mix 60', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]]]]
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
smallest fit tie cost['FLOW', 5, 1]['FLOW', 6, 1]Failed
tiny demand one case['SHELF', 0, 1]['SHELF', 1, 1]Failed
exact capacity['SHELF', 4, 1]['SHELF', 4, 1]Passed
zero demand['NONE', 0, 0]['NONE', 0, 0]Passed
split['PAL', 233, 6]['PAL', 234, 6]Failed
generated mix 7['M', 10, 2]['M', 10, 2]Passed
generated mix 15['B', 233, 24]['B', 234, 24]Failed
generated mix 23['M', 50, 9]['M', 50, 9]Passed

SHA-256 / a33de4ed122ec15dcc2efae35ea1bac1e280b3fe6979138358f136f992e3f2fb

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(weekly, days, cp, slot_types):
    if weekly <= 0:
        return ['NONE', 0, 0]
    need = round(weekly * days / (7 * cp))
    fits = [s for s in slot_types if s[1] >= need]
    if fits:
        t = min(fits, key=lambda s: (s[1], s[2], s[0]))
        return [t[0], need, 1]
    t = min(slot_types, key=lambda s: (-s[1], s[2], s[0]))
    return [t[0], need, -(-need // t[1])]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 7', [84, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 10, 2]], ['generated mix 15', [1400, 14, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 234, 24]], ['generated mix 23', [70, 5, 1, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 50, 9]]], [['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['generated mix 13', [1, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 10', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 19', [20, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 3, 1]], ['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]]], [['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 1]], ['generated mix 18', [1400, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 34, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 22', [700, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 1400, 35]], ['generated mix 30', [1400, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 50, 5]], ['generated mix 38', [0, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['NONE', 0, 0]]], [['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 32', [1400, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 40', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 50, 2]], ['generated mix 48', [700, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 84, 14]], ['generated mix 56', [1, 5, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 1]]], [['generated mix 39', [1400, 7, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 117, 20]], ['generated mix 44', [350, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 5, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 43', [20, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 7, 1]], ['generated mix 52', [0, 14, 24, [['A', 10, 2], ['B', 10, 1]]], ['NONE', 0, 0]], ['generated mix 60', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]]]]
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
smallest fit tie cost['FLOW', 6, 1]['FLOW', 6, 1]Passed
tiny demand one case['SHELF', 0, 1]['SHELF', 1, 1]Failed
exact capacity['SHELF', 4, 1]['SHELF', 4, 1]Passed
zero demand['NONE', 0, 0]['NONE', 0, 0]Passed
split['PAL', 233, 6]['PAL', 234, 6]Failed
generated mix 7['M', 10, 2]['M', 10, 2]Passed
generated mix 15['B', 233, 24]['B', 234, 24]Failed
generated mix 23['M', 50, 9]['M', 50, 9]Passed

SHA-256 / 97fb41d1aa553fced7685bcd4d080c9c21dbd6de83a34d9580e11f0a71020e8d

3 / The verified repair

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

N = 1
observations = []
def solve(weekly, days, cp, slot_types):
    if weekly <= 0:
        return ['NONE', 0, 0]
    need = -(-(weekly * days) // (7 * cp))
    fits = [s for s in slot_types if s[1] >= need]
    if fits:
        t = min(fits, key=lambda s: (s[1], s[2], s[0]))
        return [t[0], need, 1]
    t = min(slot_types, key=lambda s: (-s[1], s[2], s[0]))
    return [t[0], need, -(-need // t[1])]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 7', [84, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 10, 2]], ['generated mix 15', [1400, 14, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 234, 24]], ['generated mix 23', [70, 5, 1, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 50, 9]]], [['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['generated mix 13', [1, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 10', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 19', [20, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 3, 1]], ['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]]], [['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 1]], ['generated mix 18', [1400, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 34, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 22', [700, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 1400, 35]], ['generated mix 30', [1400, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 50, 5]], ['generated mix 38', [0, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['NONE', 0, 0]]], [['generated mix 27', [1, 3, 6, [['A', 10, 2], ['B', 10, 1]]], ['B', 1, 1]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 32', [1400, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 40', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 50, 2]], ['generated mix 48', [700, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 84, 14]], ['generated mix 56', [1, 5, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 1]]], [['generated mix 39', [1400, 7, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 117, 20]], ['generated mix 44', [350, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 5, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 43', [20, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 7, 1]], ['generated mix 52', [0, 14, 24, [['A', 10, 2], ['B', 10, 1]]], ['NONE', 0, 0]], ['generated mix 60', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]]]]
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
smallest fit tie cost['FLOW', 6, 1]['FLOW', 6, 1]Passed
tiny demand one case['SHELF', 1, 1]['SHELF', 1, 1]Passed
exact capacity['SHELF', 4, 1]['SHELF', 4, 1]Passed
zero demand['NONE', 0, 0]['NONE', 0, 0]Passed
split['PAL', 234, 6]['PAL', 234, 6]Passed
generated mix 7['M', 10, 2]['M', 10, 2]Passed
generated mix 15['B', 234, 24]['B', 234, 24]Passed
generated mix 23['M', 50, 9]['M', 50, 9]Passed

SHA-256 / 3358ad2cf7a3545720700f5c5d9726ae0da0dd33cb2a08a04af55b66f705d396

Verification & scope

Stipulated days-of-supply sizing with whole 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:52:12.305143+00:00.

Case digest / c7d8dea23c4d9f9217604fa39b4c6cea123f4478f71d743f9983e45848f42137