FA-95286 / Warehouse slotting and bin packing / Open access
Face sizing: weekly demand used as daily · case 01
Pick faces are sized seven times too large.
ROOT CAUSE
Weekly demand is multiplied by days of cover without converting to a daily rate.
THE FAILURE
Weekly demand is multiplied by days of cover without converting to a daily rate.
Unsuccessful approach: Dividing by a 5-day work week contradicts the calendar-day cover in the contract.
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) // 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]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 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]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['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 5', [1400, 3, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 600, 60]], ['generated mix 4', [700, 5, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 42, 5]], ['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 11', [350, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 13, 2]], ['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 13', [1, 7, 6, [['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]], ['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 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 16', [1400, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 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 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 49', [84, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 2, 1]]], [['generated mix 28', [120, 3, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]], ['generated mix 22', [700, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 1400, 35]], ['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 |
|---|---|---|---|
| smallest fit tie cost | ['PAL', 41, 2] | ['FLOW', 6, 1] | Failed |
| exact capacity | ['PAL', 28, 1] | ['SHELF', 4, 1] | Failed |
| split | ['PAL', 1634, 41] | ['PAL', 234, 6] | Failed |
| tiny demand one case | ['SHELF', 1, 1] | ['SHELF', 1, 1] | Passed |
| zero demand | ['NONE', 0, 0] | ['NONE', 0, 0] | Passed |
| generated mix 7 | ['M', 70, 12] | ['M', 10, 2] | Failed |
| generated mix 15 | ['B', 1634, 164] | ['B', 234, 24] | Failed |
| generated mix 23 | ['M', 350, 59] | ['M', 50, 9] | Failed |
SHA-256 / 997ddc620d8389e18659ea58d8dab12981e558f9aa96ebca98a94070b72213cb
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) // (5 * 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]], ['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 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]], ['zero demand', [0, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['NONE', 0, 0]], ['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 5', [1400, 3, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 600, 60]], ['generated mix 4', [700, 5, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 42, 5]], ['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 11', [350, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 13, 2]], ['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 13', [1, 7, 6, [['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]], ['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 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 16', [1400, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 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 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 49', [84, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 2, 1]]], [['generated mix 28', [120, 3, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]], ['generated mix 22', [700, 14, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 1400, 35]], ['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 |
|---|---|---|---|
| smallest fit tie cost | ['FLOW', 9, 1] | ['FLOW', 6, 1] | Failed |
| exact capacity | ['FLOW', 6, 1] | ['SHELF', 4, 1] | Failed |
| split | ['PAL', 327, 9] | ['PAL', 234, 6] | Failed |
| tiny demand one case | ['SHELF', 1, 1] | ['SHELF', 1, 1] | Passed |
| zero demand | ['NONE', 0, 0] | ['NONE', 0, 0] | Passed |
| generated mix 7 | ['M', 14, 3] | ['M', 10, 2] | Failed |
| generated mix 15 | ['B', 327, 33] | ['B', 234, 24] | Failed |
| generated mix 23 | ['M', 70, 12] | ['M', 50, 9] | Failed |
SHA-256 / 7b429d0d20de3b9cc6ac69d6dfbc56f241d32fbccb832f7c31815a7a6985f514
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.345732+00:00.
Case digest / e9955feba8f974e73bcb0479afd19fb825b160ba4106a3a96ee023a659a490dd