FAILURE MAP
← Case archive

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

Carton selection: cheapest instead of smallest · case 01

A cheaper but bulkier carton is chosen, increasing dimensional weight charges.

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

ROOT CAUSE

The carton ranking key orders by cost first and ignores inner volume.

VERIFIED REPAIR

Rank fitting cartons by inner volume, then cost, then id.

Unsuccessful approach: Ranking by the longest side is not volume and picks long thin cartons over compact ones.

Case contract

Item dims [a,b,c], weight kg, sioc flag (ships in own container). cartons [[id, L, W, H, max_kg, cost]]. SIOC items return "SIOC". Otherwise add 1 unit of dunnage per side (2 per dimension); the item fits a carton if the sorted padded dims are each <= the sorted inner dims (any orientation) and kg <= max_kg. Choose the smallest inner volume, then cost, then id. None -> "NO_FIT".

Why this case matters

Cartonization picks the shipping box, which drives material cost and dimensional weight.

1 / The failure

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

N = 1
observations = []
def solve(dims, kg, sioc, cartons):
    if sioc:
        return 'SIOC'
    need = sorted(d + 2 for d in dims)
    best = None
    for cid, L, W, H, max_kg, cost in cartons:
        inner = sorted([L, W, H])
        if any(n > c for n, c in zip(need, inner)):
            continue
        if kg > max_kg:
            continue
        key = (cost, cid)
        if best is None or key < best[0]:
            best = (key, cid)
    return best[1] if best else 'NO_FIT'
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['long thin carton', [[3, 3, 3], 1, False, [['LONG', 40, 6, 6, 30, 50], ['CUBE', 12, 12, 12, 30, 60]]], 'LONG'], ['rotated fit', [[4, 10, 8], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['weight at limit', [[3, 3, 3], 10, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['sioc', [[3, 3, 3], 1, True, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'SIOC'], ['volume tie by cost', [[3, 3, 3], 1, False, [['A', 10, 10, 10, 9, 60], ['B', 20, 10, 5, 9, 55]]], 'B'], ['padding pushes to M', [[11, 3, 3], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['generated mix 6', [[13, 6, 9], 19, False, [['C0', 16, 6, 30, 5, 55], ['C1', 6, 12, 6, 5, 70], ['C2', 6, 8, 12, 20, 90], ['C3', 10, 20, 6, 20, 70], ['C4', 24, 8, 30, 10, 70]]], 'NO_FIT']], [['generated mix 30', [[14, 13, 10], 1, False, [['C0', 16, 8, 8, 10, 55], ['C1', 20, 20, 20, 5, 55], ['C2', 32, 20, 20, 20, 40], ['C3', 24, 20, 4, 20, 40], ['C4', 16, 12, 4, 20, 55]]], 'C1'], ['generated mix 19', [[11, 3, 5], 1, False, [['C0', 6, 20, 4, 20, 90], ['C1', 20, 20, 6, 5, 40], ['C2', 32, 6, 4, 20, 55], ['C3', 12, 8, 30, 20, 90], ['C4', 32, 20, 8, 10, 55], ['C5', 20, 6, 12, 20, 40]]], 'C5'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['no fit', [[40, 3, 3], 1, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'NO_FIT'], ['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['rotated fit', [[4, 10, 8], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['generated mix 7', [[7, 9, 14], 5, True, [['C0', 16, 16, 4, 20, 55], ['C1', 20, 16, 8, 10, 70], ['C2', 24, 6, 4, 5, 40], ['C3', 10, 8, 30, 10, 90], ['C4', 20, 8, 30, 5, 90], ['C5', 24, 12, 12, 10, 90]]], 'SIOC'], ['generated mix 15', [[2, 8, 6], 1, False, [['C0', 32, 12, 4, 5, 40], ['C1', 16, 12, 6, 5, 55], ['C2', 16, 12, 20, 20, 40]]], 'C1']], [['generated mix 78', [[3, 7, 14], 5, False, [['C0', 24, 12, 12, 20, 40], ['C1', 20, 16, 8, 30, 40], ['C2', 24, 12, 30, 30, 55], ['C3', 10, 8, 30, 20, 40], ['C4', 16, 6, 6, 10, 40], ['C5', 20, 20, 6, 5, 40]]], 'C3'], ['generated mix 59', [[7, 2, 2], 10.5, False, [['C0', 12, 12, 8, 30, 90], ['C1', 24, 6, 6, 30, 55], ['C2', 20, 12, 8, 5, 55], ['C3', 12, 8, 8, 10, 90], ['C4', 10, 16, 4, 5, 70]]], 'C1'], ['volume tie by cost', [[3, 3, 3], 1, False, [['A', 10, 10, 10, 9, 60], ['B', 20, 10, 5, 9, 55]]], 'B'], ['long thin carton', [[3, 3, 3], 1, False, [['LONG', 40, 6, 6, 30, 50], ['CUBE', 12, 12, 12, 30, 60]]], 'LONG'], ['padding pushes to M', [[11, 3, 3], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['generated mix 18', [[10, 14, 4], 4.5, False, [['C0', 32, 16, 20, 10, 55], ['C1', 32, 6, 8, 30, 90], ['C2', 16, 6, 6, 20, 40], ['C3', 6, 8, 30, 5, 55], ['C4', 10, 6, 20, 20, 40], ['C5', 32, 20, 6, 20, 90]]], 'C5'], ['generated mix 26', [[14, 4, 3], 19, False, [['C0', 32, 12, 8, 10, 70], ['C1', 6, 8, 4, 10, 55], ['C2', 20, 20, 8, 5, 55], ['C3', 12, 6, 12, 20, 55], ['C4', 16, 8, 20, 10, 40], ['C5', 6, 6, 20, 20, 40]]], 'C5']], [['generated mix 20', [[11, 5, 6], 4.5, False, [['C0', 6, 20, 6, 10, 40], ['C1', 16, 20, 20, 5, 55], ['C2', 32, 8, 8, 5, 90], ['C3', 6, 6, 6, 30, 90], ['C4', 16, 16, 20, 20, 40], ['C5', 32, 12, 12, 20, 55]]], 'C2'], ['long thin carton', [[3, 3, 3], 1, False, [['LONG', 40, 6, 6, 30, 50], ['CUBE', 12, 12, 12, 30, 60]]], 'LONG'], ['padding pushes to M', [[11, 3, 3], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['no fit', [[40, 3, 3], 1, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'NO_FIT'], ['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['generated mix 31', [[14, 6, 13], 19, False, [['C0', 16, 6, 20, 5, 40], ['C1', 24, 8, 6, 10, 70], ['C2', 6, 12, 4, 20, 90], ['C3', 10, 8, 4, 20, 55], ['C4', 12, 8, 12, 5, 40]]], 'NO_FIT'], ['generated mix 39', [[13, 2, 3], 9.5, False, [['C0', 24, 12, 6, 5, 90], ['C1', 32, 8, 6, 30, 90]]], 'C1']], [['generated mix 76', [[6, 3, 11], 1, False, [['C0', 16, 20, 30, 10, 40], ['C1', 10, 16, 30, 20, 40]]], 'C1'], ['generated mix 19', [[11, 3, 5], 1, False, [['C0', 6, 20, 4, 20, 90], ['C1', 20, 20, 6, 5, 40], ['C2', 32, 6, 4, 20, 55], ['C3', 12, 8, 30, 20, 90], ['C4', 32, 20, 8, 10, 55], ['C5', 20, 6, 12, 20, 40]]], 'C5'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['no fit', [[40, 3, 3], 1, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'NO_FIT'], ['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['rotated fit', [[4, 10, 8], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['generated mix 41', [[11, 14, 6], 19, False, [['C0', 6, 12, 20, 30, 90], ['C1', 6, 6, 4, 20, 70]]], 'NO_FIT'], ['generated mix 49', [[5, 14, 9], 1, False, [['C0', 32, 20, 8, 5, 70], ['C1', 12, 8, 12, 5, 55], ['C2', 20, 6, 8, 5, 90], ['C3', 12, 20, 20, 30, 40], ['C4', 6, 12, 30, 20, 40], ['C5', 10, 16, 8, 5, 90]]], 'C3']]]
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
cheap but bulkyBIGSMALLFailed
long thin cartonLONGLONGPassed
rotated fitSSPassed
weight at limitSSPassed
siocSIOCSIOCPassed
volume tie by costBBPassed
padding pushes to MMMPassed
generated mix 6NO_FITNO_FITPassed

SHA-256 / 4950ec00f21409ca0df0f6464de5fc446c2dfe43f3d21da51b66c41e3709c418

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(dims, kg, sioc, cartons):
    if sioc:
        return 'SIOC'
    need = sorted(d + 2 for d in dims)
    best = None
    for cid, L, W, H, max_kg, cost in cartons:
        inner = sorted([L, W, H])
        if any(n > c for n, c in zip(need, inner)):
            continue
        if kg > max_kg:
            continue
        key = (max(L, W, H), cost, cid)
        if best is None or key < best[0]:
            best = (key, cid)
    return best[1] if best else 'NO_FIT'
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['long thin carton', [[3, 3, 3], 1, False, [['LONG', 40, 6, 6, 30, 50], ['CUBE', 12, 12, 12, 30, 60]]], 'LONG'], ['rotated fit', [[4, 10, 8], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['weight at limit', [[3, 3, 3], 10, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['sioc', [[3, 3, 3], 1, True, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'SIOC'], ['volume tie by cost', [[3, 3, 3], 1, False, [['A', 10, 10, 10, 9, 60], ['B', 20, 10, 5, 9, 55]]], 'B'], ['padding pushes to M', [[11, 3, 3], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['generated mix 6', [[13, 6, 9], 19, False, [['C0', 16, 6, 30, 5, 55], ['C1', 6, 12, 6, 5, 70], ['C2', 6, 8, 12, 20, 90], ['C3', 10, 20, 6, 20, 70], ['C4', 24, 8, 30, 10, 70]]], 'NO_FIT']], [['generated mix 30', [[14, 13, 10], 1, False, [['C0', 16, 8, 8, 10, 55], ['C1', 20, 20, 20, 5, 55], ['C2', 32, 20, 20, 20, 40], ['C3', 24, 20, 4, 20, 40], ['C4', 16, 12, 4, 20, 55]]], 'C1'], ['generated mix 19', [[11, 3, 5], 1, False, [['C0', 6, 20, 4, 20, 90], ['C1', 20, 20, 6, 5, 40], ['C2', 32, 6, 4, 20, 55], ['C3', 12, 8, 30, 20, 90], ['C4', 32, 20, 8, 10, 55], ['C5', 20, 6, 12, 20, 40]]], 'C5'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['no fit', [[40, 3, 3], 1, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'NO_FIT'], ['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['rotated fit', [[4, 10, 8], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['generated mix 7', [[7, 9, 14], 5, True, [['C0', 16, 16, 4, 20, 55], ['C1', 20, 16, 8, 10, 70], ['C2', 24, 6, 4, 5, 40], ['C3', 10, 8, 30, 10, 90], ['C4', 20, 8, 30, 5, 90], ['C5', 24, 12, 12, 10, 90]]], 'SIOC'], ['generated mix 15', [[2, 8, 6], 1, False, [['C0', 32, 12, 4, 5, 40], ['C1', 16, 12, 6, 5, 55], ['C2', 16, 12, 20, 20, 40]]], 'C1']], [['generated mix 78', [[3, 7, 14], 5, False, [['C0', 24, 12, 12, 20, 40], ['C1', 20, 16, 8, 30, 40], ['C2', 24, 12, 30, 30, 55], ['C3', 10, 8, 30, 20, 40], ['C4', 16, 6, 6, 10, 40], ['C5', 20, 20, 6, 5, 40]]], 'C3'], ['generated mix 59', [[7, 2, 2], 10.5, False, [['C0', 12, 12, 8, 30, 90], ['C1', 24, 6, 6, 30, 55], ['C2', 20, 12, 8, 5, 55], ['C3', 12, 8, 8, 10, 90], ['C4', 10, 16, 4, 5, 70]]], 'C1'], ['volume tie by cost', [[3, 3, 3], 1, False, [['A', 10, 10, 10, 9, 60], ['B', 20, 10, 5, 9, 55]]], 'B'], ['long thin carton', [[3, 3, 3], 1, False, [['LONG', 40, 6, 6, 30, 50], ['CUBE', 12, 12, 12, 30, 60]]], 'LONG'], ['padding pushes to M', [[11, 3, 3], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['generated mix 18', [[10, 14, 4], 4.5, False, [['C0', 32, 16, 20, 10, 55], ['C1', 32, 6, 8, 30, 90], ['C2', 16, 6, 6, 20, 40], ['C3', 6, 8, 30, 5, 55], ['C4', 10, 6, 20, 20, 40], ['C5', 32, 20, 6, 20, 90]]], 'C5'], ['generated mix 26', [[14, 4, 3], 19, False, [['C0', 32, 12, 8, 10, 70], ['C1', 6, 8, 4, 10, 55], ['C2', 20, 20, 8, 5, 55], ['C3', 12, 6, 12, 20, 55], ['C4', 16, 8, 20, 10, 40], ['C5', 6, 6, 20, 20, 40]]], 'C5']], [['generated mix 20', [[11, 5, 6], 4.5, False, [['C0', 6, 20, 6, 10, 40], ['C1', 16, 20, 20, 5, 55], ['C2', 32, 8, 8, 5, 90], ['C3', 6, 6, 6, 30, 90], ['C4', 16, 16, 20, 20, 40], ['C5', 32, 12, 12, 20, 55]]], 'C2'], ['long thin carton', [[3, 3, 3], 1, False, [['LONG', 40, 6, 6, 30, 50], ['CUBE', 12, 12, 12, 30, 60]]], 'LONG'], ['padding pushes to M', [[11, 3, 3], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['no fit', [[40, 3, 3], 1, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'NO_FIT'], ['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['generated mix 31', [[14, 6, 13], 19, False, [['C0', 16, 6, 20, 5, 40], ['C1', 24, 8, 6, 10, 70], ['C2', 6, 12, 4, 20, 90], ['C3', 10, 8, 4, 20, 55], ['C4', 12, 8, 12, 5, 40]]], 'NO_FIT'], ['generated mix 39', [[13, 2, 3], 9.5, False, [['C0', 24, 12, 6, 5, 90], ['C1', 32, 8, 6, 30, 90]]], 'C1']], [['generated mix 76', [[6, 3, 11], 1, False, [['C0', 16, 20, 30, 10, 40], ['C1', 10, 16, 30, 20, 40]]], 'C1'], ['generated mix 19', [[11, 3, 5], 1, False, [['C0', 6, 20, 4, 20, 90], ['C1', 20, 20, 6, 5, 40], ['C2', 32, 6, 4, 20, 55], ['C3', 12, 8, 30, 20, 90], ['C4', 32, 20, 8, 10, 55], ['C5', 20, 6, 12, 20, 40]]], 'C5'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['no fit', [[40, 3, 3], 1, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'NO_FIT'], ['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['rotated fit', [[4, 10, 8], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['generated mix 41', [[11, 14, 6], 19, False, [['C0', 6, 12, 20, 30, 90], ['C1', 6, 6, 4, 20, 70]]], 'NO_FIT'], ['generated mix 49', [[5, 14, 9], 1, False, [['C0', 32, 20, 8, 5, 70], ['C1', 12, 8, 12, 5, 55], ['C2', 20, 6, 8, 5, 90], ['C3', 12, 20, 20, 30, 40], ['C4', 6, 12, 30, 20, 40], ['C5', 10, 16, 8, 5, 90]]], 'C3']]]
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
cheap but bulkySMALLSMALLPassed
long thin cartonCUBELONGFailed
rotated fitSSPassed
weight at limitSSPassed
siocSIOCSIOCPassed
volume tie by costABFailed
padding pushes to MMMPassed
generated mix 6NO_FITNO_FITPassed

SHA-256 / cf332650726389d781bf66cf0a912ac2fd12fe7542f9c7c54b0aeabbc2765f2b

3 / The verified repair

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

N = 1
observations = []
def solve(dims, kg, sioc, cartons):
    if sioc:
        return 'SIOC'
    need = sorted(d + 2 for d in dims)
    best = None
    for cid, L, W, H, max_kg, cost in cartons:
        inner = sorted([L, W, H])
        if any(n > c for n, c in zip(need, inner)):
            continue
        if kg > max_kg:
            continue
        key = (L * W * H, cost, cid)
        if best is None or key < best[0]:
            best = (key, cid)
    return best[1] if best else 'NO_FIT'
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['long thin carton', [[3, 3, 3], 1, False, [['LONG', 40, 6, 6, 30, 50], ['CUBE', 12, 12, 12, 30, 60]]], 'LONG'], ['rotated fit', [[4, 10, 8], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['weight at limit', [[3, 3, 3], 10, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['sioc', [[3, 3, 3], 1, True, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'SIOC'], ['volume tie by cost', [[3, 3, 3], 1, False, [['A', 10, 10, 10, 9, 60], ['B', 20, 10, 5, 9, 55]]], 'B'], ['padding pushes to M', [[11, 3, 3], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['generated mix 6', [[13, 6, 9], 19, False, [['C0', 16, 6, 30, 5, 55], ['C1', 6, 12, 6, 5, 70], ['C2', 6, 8, 12, 20, 90], ['C3', 10, 20, 6, 20, 70], ['C4', 24, 8, 30, 10, 70]]], 'NO_FIT']], [['generated mix 30', [[14, 13, 10], 1, False, [['C0', 16, 8, 8, 10, 55], ['C1', 20, 20, 20, 5, 55], ['C2', 32, 20, 20, 20, 40], ['C3', 24, 20, 4, 20, 40], ['C4', 16, 12, 4, 20, 55]]], 'C1'], ['generated mix 19', [[11, 3, 5], 1, False, [['C0', 6, 20, 4, 20, 90], ['C1', 20, 20, 6, 5, 40], ['C2', 32, 6, 4, 20, 55], ['C3', 12, 8, 30, 20, 90], ['C4', 32, 20, 8, 10, 55], ['C5', 20, 6, 12, 20, 40]]], 'C5'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['no fit', [[40, 3, 3], 1, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'NO_FIT'], ['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['rotated fit', [[4, 10, 8], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['generated mix 7', [[7, 9, 14], 5, True, [['C0', 16, 16, 4, 20, 55], ['C1', 20, 16, 8, 10, 70], ['C2', 24, 6, 4, 5, 40], ['C3', 10, 8, 30, 10, 90], ['C4', 20, 8, 30, 5, 90], ['C5', 24, 12, 12, 10, 90]]], 'SIOC'], ['generated mix 15', [[2, 8, 6], 1, False, [['C0', 32, 12, 4, 5, 40], ['C1', 16, 12, 6, 5, 55], ['C2', 16, 12, 20, 20, 40]]], 'C1']], [['generated mix 78', [[3, 7, 14], 5, False, [['C0', 24, 12, 12, 20, 40], ['C1', 20, 16, 8, 30, 40], ['C2', 24, 12, 30, 30, 55], ['C3', 10, 8, 30, 20, 40], ['C4', 16, 6, 6, 10, 40], ['C5', 20, 20, 6, 5, 40]]], 'C3'], ['generated mix 59', [[7, 2, 2], 10.5, False, [['C0', 12, 12, 8, 30, 90], ['C1', 24, 6, 6, 30, 55], ['C2', 20, 12, 8, 5, 55], ['C3', 12, 8, 8, 10, 90], ['C4', 10, 16, 4, 5, 70]]], 'C1'], ['volume tie by cost', [[3, 3, 3], 1, False, [['A', 10, 10, 10, 9, 60], ['B', 20, 10, 5, 9, 55]]], 'B'], ['long thin carton', [[3, 3, 3], 1, False, [['LONG', 40, 6, 6, 30, 50], ['CUBE', 12, 12, 12, 30, 60]]], 'LONG'], ['padding pushes to M', [[11, 3, 3], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['generated mix 18', [[10, 14, 4], 4.5, False, [['C0', 32, 16, 20, 10, 55], ['C1', 32, 6, 8, 30, 90], ['C2', 16, 6, 6, 20, 40], ['C3', 6, 8, 30, 5, 55], ['C4', 10, 6, 20, 20, 40], ['C5', 32, 20, 6, 20, 90]]], 'C5'], ['generated mix 26', [[14, 4, 3], 19, False, [['C0', 32, 12, 8, 10, 70], ['C1', 6, 8, 4, 10, 55], ['C2', 20, 20, 8, 5, 55], ['C3', 12, 6, 12, 20, 55], ['C4', 16, 8, 20, 10, 40], ['C5', 6, 6, 20, 20, 40]]], 'C5']], [['generated mix 20', [[11, 5, 6], 4.5, False, [['C0', 6, 20, 6, 10, 40], ['C1', 16, 20, 20, 5, 55], ['C2', 32, 8, 8, 5, 90], ['C3', 6, 6, 6, 30, 90], ['C4', 16, 16, 20, 20, 40], ['C5', 32, 12, 12, 20, 55]]], 'C2'], ['long thin carton', [[3, 3, 3], 1, False, [['LONG', 40, 6, 6, 30, 50], ['CUBE', 12, 12, 12, 30, 60]]], 'LONG'], ['padding pushes to M', [[11, 3, 3], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['no fit', [[40, 3, 3], 1, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'NO_FIT'], ['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['generated mix 31', [[14, 6, 13], 19, False, [['C0', 16, 6, 20, 5, 40], ['C1', 24, 8, 6, 10, 70], ['C2', 6, 12, 4, 20, 90], ['C3', 10, 8, 4, 20, 55], ['C4', 12, 8, 12, 5, 40]]], 'NO_FIT'], ['generated mix 39', [[13, 2, 3], 9.5, False, [['C0', 24, 12, 6, 5, 90], ['C1', 32, 8, 6, 30, 90]]], 'C1']], [['generated mix 76', [[6, 3, 11], 1, False, [['C0', 16, 20, 30, 10, 40], ['C1', 10, 16, 30, 20, 40]]], 'C1'], ['generated mix 19', [[11, 3, 5], 1, False, [['C0', 6, 20, 4, 20, 90], ['C1', 20, 20, 6, 5, 40], ['C2', 32, 6, 4, 20, 55], ['C3', 12, 8, 30, 20, 90], ['C4', 32, 20, 8, 10, 55], ['C5', 20, 6, 12, 20, 40]]], 'C5'], ['weight over limit', [[3, 3, 3], 10.5, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'M'], ['no fit', [[40, 3, 3], 1, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'NO_FIT'], ['cheap but bulky', [[3, 3, 3], 1, False, [['BIG', 30, 30, 30, 30, 40], ['SMALL', 10, 10, 10, 30, 60]]], 'SMALL'], ['rotated fit', [[4, 10, 8], 3, False, [['S', 12, 10, 6, 10, 50], ['M', 16, 12, 10, 20, 70], ['L', 24, 18, 14, 30, 95]]], 'S'], ['generated mix 41', [[11, 14, 6], 19, False, [['C0', 6, 12, 20, 30, 90], ['C1', 6, 6, 4, 20, 70]]], 'NO_FIT'], ['generated mix 49', [[5, 14, 9], 1, False, [['C0', 32, 20, 8, 5, 70], ['C1', 12, 8, 12, 5, 55], ['C2', 20, 6, 8, 5, 90], ['C3', 12, 20, 20, 30, 40], ['C4', 6, 12, 30, 20, 40], ['C5', 10, 16, 8, 5, 90]]], 'C3']]]
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
cheap but bulkySMALLSMALLPassed
long thin cartonLONGLONGPassed
rotated fitSSPassed
weight at limitSSPassed
siocSIOCSIOCPassed
volume tie by costBBPassed
padding pushes to MMMPassed
generated mix 6NO_FITNO_FITPassed

SHA-256 / 1ff2b4b80ada7c634b258923e510e4bb6a40bf4360e2b911ac09a790cd48141f

Verification & scope

Stipulated fit rule with uniform dunnage; no void-fill or multi-item cartonization. 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:09.332027+00:00.

Case digest / 022d5df128b72a358efb084c035cbad82badf3fc2cd1d0e59d8126773fa41f0e