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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| full zone | A | B | Failed |
| generated mix 10 | Z1 | REJECT | Failed |
| exact match | C | C | Passed |
| narrowest | B | B | Passed |
| frozen | F | F | Passed |
| zone too wide | REJECT | REJECT | Passed |
| tie most free | B | B | Passed |
| generated mix 8 | REJECT | REJECT | Passed |
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| full zone | A | B | Failed |
| generated mix 10 | Z1 | REJECT | Failed |
| exact match | C | C | Passed |
| narrowest | B | B | Passed |
| frozen | F | F | Passed |
| zone too wide | REJECT | REJECT | Passed |
| tie most free | B | B | Passed |
| generated mix 8 | REJECT | REJECT | Passed |
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