FAILURE MAP
← Case archive

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.

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

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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