FA-95301 / Warehouse slotting and bin packing / Open access
Face sizing: split slot count floored · case 01
Items that need several slots are given one slot too few.
ROOT CAUSE
The number of slots for oversized demand is floor-divided.
THE FAILURE
The number of slots for oversized demand is floor-divided.
Unsuccessful approach: Adding one after floor division overcounts exact multiples.
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 = [[['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 5', [1400, 3, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 600, 60]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 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]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]]], [['generated mix 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 33', [700, 14, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 234, 39]], ['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 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 1]], ['generated mix 26', [1400, 5, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 167, 17]]], [['generated mix 45', [84, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 10, 2]], ['generated mix 63', [1400, 3, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 600, 15]], ['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 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 28', [120, 3, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]], ['generated mix 36', [700, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 117, 3]]], [['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 80', [70, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 70, 7]], ['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]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['generated mix 33', [700, 14, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 234, 39]], ['generated mix 41', [1, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 1, 1]]], [['generated mix 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 30', [1400, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 50, 5]], ['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 44', [350, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 5, 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| split | ['PAL', 234, 5] | ['PAL', 234, 6] | Failed |
| generated mix 5 | ['FLOW', 600, 60] | ['FLOW', 600, 60] | Passed |
| smallest fit tie cost | ['FLOW', 6, 1] | ['FLOW', 6, 1] | Passed |
| zero demand | ['NONE', 0, 0] | ['NONE', 0, 0] | Passed |
| split tie | ['B', 700, 70] | ['B', 700, 70] | Passed |
| exact capacity | ['SHELF', 4, 1] | ['SHELF', 4, 1] | Passed |
| tiny demand one case | ['SHELF', 1, 1] | ['SHELF', 1, 1] | Passed |
| generated mix 9 | ['PAL', 13, 1] | ['PAL', 13, 1] | Passed |
SHA-256 / 7ada17ce570d0c263344ca958657c37d7da72e97256eabb8bd1946981ddd0bc0
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 = -(-(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] + 1]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 5', [1400, 3, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 600, 60]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 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]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]]], [['generated mix 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 33', [700, 14, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 234, 39]], ['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 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 1]], ['generated mix 26', [1400, 5, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 167, 17]]], [['generated mix 45', [84, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 10, 2]], ['generated mix 63', [1400, 3, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 600, 15]], ['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 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 28', [120, 3, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]], ['generated mix 36', [700, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 117, 3]]], [['split', [700, 14, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 234, 6]], ['generated mix 80', [70, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 70, 7]], ['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]], ['tiny demand one case', [1, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['generated mix 33', [700, 14, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 234, 39]], ['generated mix 41', [1, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 1, 1]]], [['generated mix 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 30', [1400, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 50, 5]], ['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 44', [350, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 5, 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| split | ['PAL', 234, 6] | ['PAL', 234, 6] | Passed |
| generated mix 5 | ['FLOW', 600, 61] | ['FLOW', 600, 60] | Failed |
| smallest fit tie cost | ['FLOW', 6, 1] | ['FLOW', 6, 1] | Passed |
| zero demand | ['NONE', 0, 0] | ['NONE', 0, 0] | Passed |
| split tie | ['B', 700, 71] | ['B', 700, 70] | Failed |
| exact capacity | ['SHELF', 4, 1] | ['SHELF', 4, 1] | Passed |
| tiny demand one case | ['SHELF', 1, 1] | ['SHELF', 1, 1] | Passed |
| generated mix 9 | ['PAL', 13, 1] | ['PAL', 13, 1] | Passed |
SHA-256 / df304cbd6f1a791abac1de516aa4994eaf391ec64fb49d73a11233c64d8e846f
HELD IN THE MEMBER ARCHIVE
The verified repair and its recorded checks are member-only.
This mechanism has 8 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.
Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.
Member access is invitation-based. Sign in with your invited account to inspect the repair.
Sign in to the archive ↗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.432715+00:00.
Case digest / a01f16572c89914d2b732401508c42683d9eeca96d0f68e2431319ad20422818