FAILURE MAP
← Case archive

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

Temperature putaway: full zone selected · case 01

Putaway is directed to a zone with no free positions.

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

ROOT CAUSE

The capacity guard only rejects negative free counts.

THE FAILURE

The capacity guard only rejects negative free counts.

Unsuccessful approach: Removing the guard entirely has the same effect as the original defect.

Case contract

zones [[zone, min_c, max_c, free_positions]], product [min_c, max_c]. A zone is eligible when its whole range lies inside the product range (inclusive) and it has free positions. Prefer the narrowest zone range, then most free positions, then zone id. None -> "REJECT".

Why this case matters

Cold chain putaway must keep product within its storage temperature range.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(zones, product):
    pmin, pmax = product
    best = None
    for zid, zmin, zmax, free in zones:
        if zmin < pmin or zmax > pmax:
            continue
        if free < 0:
            continue
        key = (zmax - zmin, -free, zid)
        if best is None or key < best:
            best = key
    return best[2] if best else 'REJECT'
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['generated mix 10', [[['Z0', 15, 25, 5], ['Z1', 2, 8, 0], ['Z2', 0, 8, 0]], [0, 8]], 'REJECT'], ['exact match', [[['C', 2, 8, 3]], [2, 8]], 'C'], ['narrowest', [[['A', 0, 8, 5], ['B', 2, 6, 1]], [0, 8]], 'B'], ['frozen', [[['F', -25, -18, 2], ['C', 0, 4, 9]], [-30, -15]], 'F'], ['zone too wide', [[['C', 0, 8, 3]], [2, 8]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['generated mix 8', [[['Z0', -25, -18, 5]], [0, 4]], 'REJECT']], [['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['generated mix 77', [[['Z0', 15, 25, 0], ['Z1', 10, 30, 1]], [15, 25]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['exact match', [[['C', 2, 8, 3]], [2, 8]], 'C'], ['narrowest', [[['A', 0, 8, 5], ['B', 2, 6, 1]], [0, 8]], 'B'], ['frozen', [[['F', -25, -18, 2], ['C', 0, 4, 9]], [-30, -15]], 'F'], ['generated mix 11', [[['Z0', 15, 25, 1], ['Z1', -25, -18, 5], ['Z2', 15, 25, 5]], [10, 30]], 'Z2'], ['generated mix 19', [[['Z0', -25, -18, 12]], [0, 8]], 'REJECT']], [['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['generated mix 72', [[['Z0', 0, 4, 0], ['Z1', 15, 25, 0]], [0, 8]], 'REJECT'], ['zone too wide', [[['C', 0, 8, 3]], [2, 8]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['exact match', [[['C', 2, 8, 3]], [2, 8]], 'C'], ['narrowest', [[['A', 0, 8, 5], ['B', 2, 6, 1]], [0, 8]], 'B'], ['generated mix 22', [[['Z0', -25, -18, 5], ['Z1', 2, 8, 0], ['Z2', 0, 4, 12], ['Z3', 0, 8, 12]], [-25, -15]], 'Z0'], ['generated mix 30', [[['Z0', 15, 25, 0], ['Z1', 0, 4, 5], ['Z2', -30, -15, 0]], [15, 25]], 'REJECT']], [['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['generated mix 30', [[['Z0', 15, 25, 0], ['Z1', 0, 4, 5], ['Z2', -30, -15, 0]], [15, 25]], 'REJECT'], ['frozen', [[['F', -25, -18, 2], ['C', 0, 4, 9]], [-30, -15]], 'F'], ['zone too wide', [[['C', 0, 8, 3]], [2, 8]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['exact match', [[['C', 2, 8, 3]], [2, 8]], 'C'], ['generated mix 34', [[['Z0', 0, 8, 0], ['Z1', 0, 4, 5], ['Z2', 2, 8, 5], ['Z3', 0, 4, 1], ['Z4', 0, 8, 1]], [-30, -18]], 'REJECT'], ['generated mix 42', [[['Z0', 2, 8, 1], ['Z1', -30, -15, 12]], [-5, 10]], 'Z0']], [['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['narrowest', [[['A', 0, 8, 5], ['B', 2, 6, 1]], [0, 8]], 'B'], ['frozen', [[['F', -25, -18, 2], ['C', 0, 4, 9]], [-30, -15]], 'F'], ['zone too wide', [[['C', 0, 8, 3]], [2, 8]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['generated mix 44', [[['Z0', 0, 8, 12], ['Z1', 0, 4, 12]], [-25, -15]], 'REJECT'], ['generated mix 52', [[['Z0', 10, 30, 0], ['Z1', 0, 4, 0]], [-25, -15]], 'REJECT'], ['generated mix 60', [[['Z0', 15, 25, 0], ['Z1', -25, -18, 12]], [2, 8]], 'REJECT']]]
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
full zoneABFailed
generated mix 10Z1REJECTFailed
exact matchCCPassed
narrowestBBPassed
frozenFFPassed
zone too wideREJECTREJECTPassed
tie most freeBBPassed
generated mix 8REJECTREJECTPassed

SHA-256 / 1096909e388815a9386f2a38d5cf87ff5a528244cfebf3ff7dcad8901360c358

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(zones, product):
    pmin, pmax = product
    best = None
    for zid, zmin, zmax, free in zones:
        if zmin < pmin or zmax > pmax:
            continue
        key = (zmax - zmin, -free, zid)
        if best is None or key < best:
            best = key
    return best[2] if best else 'REJECT'
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['generated mix 10', [[['Z0', 15, 25, 5], ['Z1', 2, 8, 0], ['Z2', 0, 8, 0]], [0, 8]], 'REJECT'], ['exact match', [[['C', 2, 8, 3]], [2, 8]], 'C'], ['narrowest', [[['A', 0, 8, 5], ['B', 2, 6, 1]], [0, 8]], 'B'], ['frozen', [[['F', -25, -18, 2], ['C', 0, 4, 9]], [-30, -15]], 'F'], ['zone too wide', [[['C', 0, 8, 3]], [2, 8]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['generated mix 8', [[['Z0', -25, -18, 5]], [0, 4]], 'REJECT']], [['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['generated mix 77', [[['Z0', 15, 25, 0], ['Z1', 10, 30, 1]], [15, 25]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['exact match', [[['C', 2, 8, 3]], [2, 8]], 'C'], ['narrowest', [[['A', 0, 8, 5], ['B', 2, 6, 1]], [0, 8]], 'B'], ['frozen', [[['F', -25, -18, 2], ['C', 0, 4, 9]], [-30, -15]], 'F'], ['generated mix 11', [[['Z0', 15, 25, 1], ['Z1', -25, -18, 5], ['Z2', 15, 25, 5]], [10, 30]], 'Z2'], ['generated mix 19', [[['Z0', -25, -18, 12]], [0, 8]], 'REJECT']], [['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['generated mix 72', [[['Z0', 0, 4, 0], ['Z1', 15, 25, 0]], [0, 8]], 'REJECT'], ['zone too wide', [[['C', 0, 8, 3]], [2, 8]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['exact match', [[['C', 2, 8, 3]], [2, 8]], 'C'], ['narrowest', [[['A', 0, 8, 5], ['B', 2, 6, 1]], [0, 8]], 'B'], ['generated mix 22', [[['Z0', -25, -18, 5], ['Z1', 2, 8, 0], ['Z2', 0, 4, 12], ['Z3', 0, 8, 12]], [-25, -15]], 'Z0'], ['generated mix 30', [[['Z0', 15, 25, 0], ['Z1', 0, 4, 5], ['Z2', -30, -15, 0]], [15, 25]], 'REJECT']], [['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['generated mix 30', [[['Z0', 15, 25, 0], ['Z1', 0, 4, 5], ['Z2', -30, -15, 0]], [15, 25]], 'REJECT'], ['frozen', [[['F', -25, -18, 2], ['C', 0, 4, 9]], [-30, -15]], 'F'], ['zone too wide', [[['C', 0, 8, 3]], [2, 8]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['exact match', [[['C', 2, 8, 3]], [2, 8]], 'C'], ['generated mix 34', [[['Z0', 0, 8, 0], ['Z1', 0, 4, 5], ['Z2', 2, 8, 5], ['Z3', 0, 4, 1], ['Z4', 0, 8, 1]], [-30, -18]], 'REJECT'], ['generated mix 42', [[['Z0', 2, 8, 1], ['Z1', -30, -15, 12]], [-5, 10]], 'Z0']], [['full zone', [[['A', 2, 8, 0], ['B', 0, 8, 1]], [0, 8]], 'B'], ['narrowest', [[['A', 0, 8, 5], ['B', 2, 6, 1]], [0, 8]], 'B'], ['frozen', [[['F', -25, -18, 2], ['C', 0, 4, 9]], [-30, -15]], 'F'], ['zone too wide', [[['C', 0, 8, 3]], [2, 8]], 'REJECT'], ['tie most free', [[['A', 2, 8, 1], ['B', 2, 8, 4]], [0, 10]], 'B'], ['generated mix 44', [[['Z0', 0, 8, 12], ['Z1', 0, 4, 12]], [-25, -15]], 'REJECT'], ['generated mix 52', [[['Z0', 10, 30, 0], ['Z1', 0, 4, 0]], [-25, -15]], 'REJECT'], ['generated mix 60', [[['Z0', 15, 25, 0], ['Z1', -25, -18, 12]], [2, 8]], 'REJECT']]]
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
full zoneABFailed
generated mix 10Z1REJECTFailed
exact matchCCPassed
narrowestBBPassed
frozenFFPassed
zone too wideREJECTREJECTPassed
tie most freeBBPassed
generated mix 8REJECTREJECTPassed

SHA-256 / 01290c214e87ddb42d4e1f273214dda4e74d5c9d94e7d9c6b02807516765494a

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 integer temperature ranges; no excursion or dwell time logic. 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:11.677957+00:00.

Case digest / 0dcbebd2111f4e726750d827b0afff978d428e795c9a53d6ef176d25f4ed0bed