FAILURE MAP
← Case archive

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

Face sizing: exact-capacity slot skipped · case 01

A slot that holds exactly the needed cases is passed over for a larger slot.

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

ROOT CAUSE

Slot fit requires capacity strictly greater than need.

THE FAILURE

Slot fit requires capacity strictly greater than need.

Unsuccessful approach: Multiplying capacity by case pack compares eaches with cases.

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 = [[['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]], ['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]], ['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 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]], ['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 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 18', [1400, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 34, 1]], ['generated mix 26', [1400, 5, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 167, 17]]], [['generated mix 75', [20, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 19', [20, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 3, 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 21', [70, 1, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 10, 1]], ['generated mix 29', [1, 5, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 37', [70, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 2, 1]]], [['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]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['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]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['generated mix 34', [70, 7, 24, [['A', 10, 2], ['B', 10, 1]]], ['B', 3, 1]], ['generated mix 42', [120, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 5, 1]]], [['generated mix 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]], ['generated mix 47', [700, 1, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 17, 3]], ['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 42', [120, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 5, 1]], ['generated mix 51', [1, 14, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 1]], ['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
exact capacity['FLOW', 4, 1]['SHELF', 4, 1]Failed
split['PAL', 234, 6]['PAL', 234, 6]Passed
smallest fit tie cost['FLOW', 6, 1]['FLOW', 6, 1]Passed
tiny demand one case['SHELF', 1, 1]['SHELF', 1, 1]Passed
zero demand['NONE', 0, 0]['NONE', 0, 0]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 / 1e80d7c03b52ec45be831638adb859bfbfc8dcb55d3d5987190933a728b7f533

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] * cp >= 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 = [[['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]], ['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]], ['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 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]], ['generated mix 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 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 18', [1400, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 34, 1]], ['generated mix 26', [1400, 5, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 167, 17]]], [['generated mix 75', [20, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['generated mix 19', [20, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 3, 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 21', [70, 1, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 10, 1]], ['generated mix 29', [1, 5, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 37', [70, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 2, 1]]], [['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]], ['split tie', [700, 7, 1, [['A', 10, 2], ['B', 10, 1]]], ['B', 700, 70]], ['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]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 1]], ['generated mix 34', [70, 7, 24, [['A', 10, 2], ['B', 10, 1]]], ['B', 3, 1]], ['generated mix 42', [120, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 5, 1]]], [['generated mix 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]], ['generated mix 47', [700, 1, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 17, 3]], ['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 42', [120, 3, 12, [['A', 10, 2], ['B', 10, 1]]], ['B', 5, 1]], ['generated mix 51', [1, 14, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 1]], ['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
exact capacity['SHELF', 4, 1]['SHELF', 4, 1]Passed
split['PAL', 234, 1]['PAL', 234, 6]Failed
smallest fit tie cost['SHELF', 6, 1]['FLOW', 6, 1]Failed
tiny demand one case['SHELF', 1, 1]['SHELF', 1, 1]Passed
zero demand['NONE', 0, 0]['NONE', 0, 0]Passed
generated mix 7['S', 10, 1]['M', 10, 2]Failed
generated mix 15['B', 234, 24]['B', 234, 24]Passed
generated mix 23['M', 50, 9]['M', 50, 9]Passed

SHA-256 / 0a4ba5c24a92f59894464d13fd55b2a71a3505aec0233531c7d7a056a2858330

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.345308+00:00.

Case digest / 2a9edea4b804a52518aab4fa59acbfcc8c19a9434f79c2131de3e3cc61724558