FA-95091 / Warehouse slotting and bin packing / Open access
Slot fit: zero stack limit means none · case 01
Slots for units with no stacking limit report zero capacity.
ROOT CAUSE
The unlimited sentinel 0 is applied as a real cap of zero layers.
VERIFIED REPAIR
Only cap layers when max_stack is a positive number.
Unsuccessful approach: Treating 0 as a one-layer cap still limits unlimited units to a single layer.
Case contract
slot [width, depth, height], unit [w, d, h]. Upright units may only rotate in the horizontal plane; others may take any of the 6 axis orientations. Vertical layers = height // unit height, capped at max_stack when max_stack > 0 (0 = unlimited). Units = best over orientations of (W//a)*(D//b)*layers. Utilization in basis points = floor(units*unit volume*10000/slot volume).
Why this case matters
Slot sizing converts product cube into units per location for slotting and replenishment.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import itertools
N = 1
observations = []
def solve(slot, unit, max_stack, upright):
SW, SD, SH = slot
uw, ud, uh = unit
if upright:
orients = [(uw, ud, uh), (ud, uw, uh)]
else:
orients = sorted(set(itertools.permutations(unit)))
best = 0
for a, b, c in orients:
layers = SH // c
if max_stack is not None:
layers = min(layers, max_stack)
best = max(best, (SW // a) * (SD // b) * layers)
bp = best * uw * ud * uh * 10000 // (SW * SD * SH)
return [best, bp]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['stack cap', [[48, 40, 30], [12, 10, 10], 2, True], [32, 6666]], ['upright blocked', [[40, 40, 12], [10, 10, 20], 0, True], [0, 0]], ['laydown helps', [[40, 40, 12], [10, 10, 20], 0, False], [8, 8333]], ['generated mix 7', [[48, 40, 60], [12, 15, 12], 5, True], [45, 8437]], ['generated mix 15', [[40, 60, 30], [25, 6, 4], 5, False], [100, 8333]], ['generated mix 23', [[100, 30, 45], [12, 15, 12], 3, True], [48, 7680]]], [['generated mix 22', [[100, 48, 45], [25, 10, 4], 0, True], [176, 8148]], ['upright blocked', [[40, 40, 12], [10, 10, 20], 0, True], [0, 0]], ['fraction bp', [[100, 30, 45], [25, 15, 7], 0, True], [48, 9333]], ['stack cap', [[48, 40, 30], [12, 10, 10], 2, True], [32, 6666]], ['generated mix 9', [[48, 30, 60], [25, 10, 4], 3, False], [72, 8333]], ['generated mix 17', [[100, 60, 45], [10, 6, 35], 2, False], [100, 7777]], ['generated mix 26', [[40, 40, 45], [5, 6, 35], 0, False], [56, 8166]], ['generated mix 34', [[40, 60, 45], [8, 20, 12], 2, True], [30, 5333]]], [['generated mix 62', [[48, 48, 60], [10, 20, 35], 0, False], [12, 6076]], ['generated mix 53', [[40, 60, 20], [8, 6, 7], 0, False], [120, 8400]], ['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['laydown helps', [[40, 40, 12], [10, 10, 20], 0, False], [8, 8333]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['generated mix 20', [[48, 60, 60], [25, 10, 4], 3, True], [24, 1388]], ['generated mix 28', [[48, 40, 20], [25, 15, 35], 3, True], [0, 0]], ['generated mix 36', [[48, 30, 20], [8, 15, 7], 2, False], [24, 7000]]], [['generated mix 10', [[48, 60, 45], [25, 20, 10], 0, True], [16, 6172]], ['fraction bp', [[100, 30, 45], [25, 15, 7], 0, True], [48, 9333]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['stack cap', [[48, 40, 30], [12, 10, 10], 2, True], [32, 6666]], ['upright blocked', [[40, 40, 12], [10, 10, 20], 0, True], [0, 0]], ['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['generated mix 34', [[40, 60, 45], [8, 20, 12], 2, True], [30, 5333]], ['generated mix 42', [[60, 30, 30], [10, 15, 35], 1, False], [3, 2916]]], [['generated mix 44', [[40, 60, 30], [12, 10, 10], 0, True], [60, 10000]], ['generated mix 26', [[40, 40, 45], [5, 6, 35], 0, False], [56, 8166]], ['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['laydown helps', [[40, 40, 12], [10, 10, 20], 0, False], [8, 8333]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['generated mix 43', [[48, 48, 45], [25, 10, 10], 1, False], [16, 3858]], ['generated mix 52', [[40, 48, 45], [10, 20, 35], 2, True], [8, 6481]], ['generated mix 60', [[40, 48, 20], [8, 6, 12], 1, False], [40, 6000]]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| upright plane rotation | [0, 0] | [48, 10000] | Failed |
| unlimited zero | [0, 0] | [16, 10000] | Failed |
| stack cap | [32, 6666] | [32, 6666] | Passed |
| upright blocked | [0, 0] | [0, 0] | Passed |
| laydown helps | [0, 0] | [8, 8333] | Failed |
| generated mix 7 | [45, 8437] | [45, 8437] | Passed |
| generated mix 15 | [100, 8333] | [100, 8333] | Passed |
| generated mix 23 | [48, 7680] | [48, 7680] | Passed |
SHA-256 / 1b69b69b771943772743f2bc26f4a8b8dd42a8a512bfd323de026c5cd44a0d95
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import itertools
N = 1
observations = []
def solve(slot, unit, max_stack, upright):
SW, SD, SH = slot
uw, ud, uh = unit
if upright:
orients = [(uw, ud, uh), (ud, uw, uh)]
else:
orients = sorted(set(itertools.permutations(unit)))
best = 0
for a, b, c in orients:
layers = SH // c
if max_stack or True:
max_stack = max_stack or 1
layers = min(layers, max_stack)
best = max(best, (SW // a) * (SD // b) * layers)
bp = best * uw * ud * uh * 10000 // (SW * SD * SH)
return [best, bp]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['stack cap', [[48, 40, 30], [12, 10, 10], 2, True], [32, 6666]], ['upright blocked', [[40, 40, 12], [10, 10, 20], 0, True], [0, 0]], ['laydown helps', [[40, 40, 12], [10, 10, 20], 0, False], [8, 8333]], ['generated mix 7', [[48, 40, 60], [12, 15, 12], 5, True], [45, 8437]], ['generated mix 15', [[40, 60, 30], [25, 6, 4], 5, False], [100, 8333]], ['generated mix 23', [[100, 30, 45], [12, 15, 12], 3, True], [48, 7680]]], [['generated mix 22', [[100, 48, 45], [25, 10, 4], 0, True], [176, 8148]], ['upright blocked', [[40, 40, 12], [10, 10, 20], 0, True], [0, 0]], ['fraction bp', [[100, 30, 45], [25, 15, 7], 0, True], [48, 9333]], ['stack cap', [[48, 40, 30], [12, 10, 10], 2, True], [32, 6666]], ['generated mix 9', [[48, 30, 60], [25, 10, 4], 3, False], [72, 8333]], ['generated mix 17', [[100, 60, 45], [10, 6, 35], 2, False], [100, 7777]], ['generated mix 26', [[40, 40, 45], [5, 6, 35], 0, False], [56, 8166]], ['generated mix 34', [[40, 60, 45], [8, 20, 12], 2, True], [30, 5333]]], [['generated mix 62', [[48, 48, 60], [10, 20, 35], 0, False], [12, 6076]], ['generated mix 53', [[40, 60, 20], [8, 6, 7], 0, False], [120, 8400]], ['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['laydown helps', [[40, 40, 12], [10, 10, 20], 0, False], [8, 8333]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['generated mix 20', [[48, 60, 60], [25, 10, 4], 3, True], [24, 1388]], ['generated mix 28', [[48, 40, 20], [25, 15, 35], 3, True], [0, 0]], ['generated mix 36', [[48, 30, 20], [8, 15, 7], 2, False], [24, 7000]]], [['generated mix 10', [[48, 60, 45], [25, 20, 10], 0, True], [16, 6172]], ['fraction bp', [[100, 30, 45], [25, 15, 7], 0, True], [48, 9333]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['stack cap', [[48, 40, 30], [12, 10, 10], 2, True], [32, 6666]], ['upright blocked', [[40, 40, 12], [10, 10, 20], 0, True], [0, 0]], ['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['generated mix 34', [[40, 60, 45], [8, 20, 12], 2, True], [30, 5333]], ['generated mix 42', [[60, 30, 30], [10, 15, 35], 1, False], [3, 2916]]], [['generated mix 44', [[40, 60, 30], [12, 10, 10], 0, True], [60, 10000]], ['generated mix 26', [[40, 40, 45], [5, 6, 35], 0, False], [56, 8166]], ['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['laydown helps', [[40, 40, 12], [10, 10, 20], 0, False], [8, 8333]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['generated mix 43', [[48, 48, 45], [25, 10, 10], 1, False], [16, 3858]], ['generated mix 52', [[40, 48, 45], [10, 20, 35], 2, True], [8, 6481]], ['generated mix 60', [[40, 48, 20], [8, 6, 12], 1, False], [40, 6000]]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| upright plane rotation | [16, 3333] | [48, 10000] | Failed |
| unlimited zero | [4, 2500] | [16, 10000] | Failed |
| stack cap | [32, 6666] | [32, 6666] | Passed |
| upright blocked | [0, 0] | [0, 0] | Passed |
| laydown helps | [8, 8333] | [8, 8333] | Passed |
| generated mix 7 | [45, 8437] | [45, 8437] | Passed |
| generated mix 15 | [100, 8333] | [100, 8333] | Passed |
| generated mix 23 | [48, 7680] | [48, 7680] | Passed |
SHA-256 / 213a9283232ffc95f37aa092a83d3b975d94e8e29c24198f5dd99e31add133a9
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import itertools
N = 1
observations = []
def solve(slot, unit, max_stack, upright):
SW, SD, SH = slot
uw, ud, uh = unit
if upright:
orients = [(uw, ud, uh), (ud, uw, uh)]
else:
orients = sorted(set(itertools.permutations(unit)))
best = 0
for a, b, c in orients:
layers = SH // c
if max_stack:
layers = min(layers, max_stack)
best = max(best, (SW // a) * (SD // b) * layers)
bp = best * uw * ud * uh * 10000 // (SW * SD * SH)
return [best, bp]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['stack cap', [[48, 40, 30], [12, 10, 10], 2, True], [32, 6666]], ['upright blocked', [[40, 40, 12], [10, 10, 20], 0, True], [0, 0]], ['laydown helps', [[40, 40, 12], [10, 10, 20], 0, False], [8, 8333]], ['generated mix 7', [[48, 40, 60], [12, 15, 12], 5, True], [45, 8437]], ['generated mix 15', [[40, 60, 30], [25, 6, 4], 5, False], [100, 8333]], ['generated mix 23', [[100, 30, 45], [12, 15, 12], 3, True], [48, 7680]]], [['generated mix 22', [[100, 48, 45], [25, 10, 4], 0, True], [176, 8148]], ['upright blocked', [[40, 40, 12], [10, 10, 20], 0, True], [0, 0]], ['fraction bp', [[100, 30, 45], [25, 15, 7], 0, True], [48, 9333]], ['stack cap', [[48, 40, 30], [12, 10, 10], 2, True], [32, 6666]], ['generated mix 9', [[48, 30, 60], [25, 10, 4], 3, False], [72, 8333]], ['generated mix 17', [[100, 60, 45], [10, 6, 35], 2, False], [100, 7777]], ['generated mix 26', [[40, 40, 45], [5, 6, 35], 0, False], [56, 8166]], ['generated mix 34', [[40, 60, 45], [8, 20, 12], 2, True], [30, 5333]]], [['generated mix 62', [[48, 48, 60], [10, 20, 35], 0, False], [12, 6076]], ['generated mix 53', [[40, 60, 20], [8, 6, 7], 0, False], [120, 8400]], ['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['laydown helps', [[40, 40, 12], [10, 10, 20], 0, False], [8, 8333]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['generated mix 20', [[48, 60, 60], [25, 10, 4], 3, True], [24, 1388]], ['generated mix 28', [[48, 40, 20], [25, 15, 35], 3, True], [0, 0]], ['generated mix 36', [[48, 30, 20], [8, 15, 7], 2, False], [24, 7000]]], [['generated mix 10', [[48, 60, 45], [25, 20, 10], 0, True], [16, 6172]], ['fraction bp', [[100, 30, 45], [25, 15, 7], 0, True], [48, 9333]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['stack cap', [[48, 40, 30], [12, 10, 10], 2, True], [32, 6666]], ['upright blocked', [[40, 40, 12], [10, 10, 20], 0, True], [0, 0]], ['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['generated mix 34', [[40, 60, 45], [8, 20, 12], 2, True], [30, 5333]], ['generated mix 42', [[60, 30, 30], [10, 15, 35], 1, False], [3, 2916]]], [['generated mix 44', [[40, 60, 30], [12, 10, 10], 0, True], [60, 10000]], ['generated mix 26', [[40, 40, 45], [5, 6, 35], 0, False], [56, 8166]], ['upright plane rotation', [[48, 40, 30], [12, 10, 10], 0, True], [48, 10000]], ['laydown helps', [[40, 40, 12], [10, 10, 20], 0, False], [8, 8333]], ['unlimited zero', [[20, 20, 40], [10, 10, 10], 0, True], [16, 10000]], ['generated mix 43', [[48, 48, 45], [25, 10, 10], 1, False], [16, 3858]], ['generated mix 52', [[40, 48, 45], [10, 20, 35], 2, True], [8, 6481]], ['generated mix 60', [[40, 48, 20], [8, 6, 12], 1, False], [40, 6000]]]]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| upright plane rotation | [48, 10000] | [48, 10000] | Passed |
| unlimited zero | [16, 10000] | [16, 10000] | Passed |
| stack cap | [32, 6666] | [32, 6666] | Passed |
| upright blocked | [0, 0] | [0, 0] | Passed |
| laydown helps | [8, 8333] | [8, 8333] | Passed |
| generated mix 7 | [45, 8437] | [45, 8437] | Passed |
| generated mix 15 | [100, 8333] | [100, 8333] | Passed |
| generated mix 23 | [48, 7680] | [48, 7680] | Passed |
SHA-256 / 9367435bfb00bce86a64d9408994d912d1b669f871c88d1f0a8050ed5fdd9fd1
Verification & scope
Uniform unit, single orientation per slot; no mixed orientation packing. 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:10.523969+00:00.
Case digest / 3ea37997044009caa64cea87dfc3e8e20464658a97ddc34f35755f7344006471