{"abstract":"Slow items are assigned to large, cheap-ranked slot types.","category":"Warehouse slotting and bin packing","checks":8,"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].","evaluation_group":"w2-warehouse-slotting-face-sizing","failed_approach":"Choosing the largest fitting capacity wastes forward space.","family":"w2-warehouse-slotting-face-sizing-fit-preference","id":"FA-95296","implementations":{"attempt":{"sha256":"b1941ec2fc08f607e76419b79b029d83111927bc0cc471c2c2836efe7cf50976","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(weekly, days, cp, slot_types):\n    if weekly <= 0:\n        return ['NONE', 0, 0]\n    need = -(-(weekly * days) // (7 * cp))\n    fits = [s for s in slot_types if s[1] >= need]\n    if fits:\n        t = min(fits, key=lambda s: (-s[1], s[2], s[0]))\n        return [t[0], need, 1]\n    t = min(slot_types, key=lambda s: (-s[1], s[2], s[0]))\n    return [t[0], need, -(-need // t[1])]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 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]], ['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 8', [120, 5, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 8, 1]], ['generated mix 16', [1400, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]]], [['generated mix 31', [84, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 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 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['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 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]], ['generated mix 41', [1, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['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]], ['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 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 28', [120, 3, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]], ['generated mix 36', [700, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 117, 3]]], [['generated mix 13', [1, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 56', [1, 5, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 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 32', [1400, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 40', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 50, 2]], ['generated mix 48', [700, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 84, 14]]], [['generated mix 49', [84, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 2, 1]], ['generated mix 77', [20, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['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]], ['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 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"0a7b9d500212b467fc7318143f321a483253cff0e0e5ce8e90e4ed986a84ffa5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(weekly, days, cp, slot_types):\n    if weekly <= 0:\n        return ['NONE', 0, 0]\n    need = -(-(weekly * days) // (7 * cp))\n    fits = [s for s in slot_types if s[1] >= need]\n    if fits:\n        t = min(fits, key=lambda s: (s[2], s[0]))\n        return [t[0], need, 1]\n    t = min(slot_types, key=lambda s: (-s[1], s[2], s[0]))\n    return [t[0], need, -(-need // t[1])]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 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]], ['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 8', [120, 5, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 8, 1]], ['generated mix 16', [1400, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]]], [['generated mix 31', [84, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 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 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['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 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]], ['generated mix 41', [1, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['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]], ['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 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 28', [120, 3, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]], ['generated mix 36', [700, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 117, 3]]], [['generated mix 13', [1, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 56', [1, 5, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 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 32', [1400, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 40', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 50, 2]], ['generated mix 48', [700, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 84, 14]]], [['generated mix 49', [84, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 2, 1]], ['generated mix 77', [20, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['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]], ['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 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"45d4823b03693c72d9bfd4512ad3e840e33adc93c8f93d5017ad65c9f8538b4b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(weekly, days, cp, slot_types):\n    if weekly <= 0:\n        return ['NONE', 0, 0]\n    need = -(-(weekly * days) // (7 * cp))\n    fits = [s for s in slot_types if s[1] >= need]\n    if fits:\n        t = min(fits, key=lambda s: (s[1], s[2], s[0]))\n        return [t[0], need, 1]\n    t = min(slot_types, key=lambda s: (-s[1], s[2], s[0]))\n    return [t[0], need, -(-need // t[1])]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['exact capacity', [84, 4, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 4, 1]], ['smallest fit tie cost', [70, 7, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 6, 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]], ['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 8', [120, 5, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['FLOW', 8, 1]], ['generated mix 16', [1400, 1, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]]], [['generated mix 31', [84, 1, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 17', [70, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 3, 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 9', [350, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 13, 1]], ['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 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]], ['generated mix 41', [1, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['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]], ['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 20', [700, 1, 12, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 9, 2]], ['generated mix 28', [120, 3, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 9, 1]], ['generated mix 36', [700, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 117, 3]]], [['generated mix 13', [1, 7, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['SHELF', 1, 1]], ['generated mix 56', [1, 5, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 1, 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 32', [1400, 3, 12, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['FLOW', 50, 5]], ['generated mix 40', [70, 5, 1, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1], ['PAL', 40, 3]]], ['PAL', 50, 2]], ['generated mix 48', [700, 5, 6, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['M', 84, 14]]], [['generated mix 49', [84, 1, 6, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['SHELF', 2, 1]], ['generated mix 77', [20, 5, 24, [['SHELF', 4, 1], ['CART', 10, 2], ['FLOW', 10, 1]]], ['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]], ['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 59', [84, 3, 24, [['S', 2, 1], ['M', 6, 1], ['X', 6, 1]]], ['S', 2, 1]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-warehouse-slotting-face-sizing-fit-preference","generated_at":"2026-09-29T14:52:12.349359+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Forward pick faces are sized to hold a target number of days of demand.","repair":"Choose the smallest fitting capacity first, then cost rank, then type.","root_cause":"Fitting slot types are ranked by cost rank only.","sha256":"141581646ed4f99849f95d4ababcf1b066d29633e752c5bbcb34784c029b351e","title":"Face sizing: cheapest rather than smallest slot · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.365,"exit_code":1,"observations":[{"actual":["PAL",4,1],"check":"exact capacity","expected":["SHELF",4,1],"passed":false},{"actual":["PAL",6,1],"check":"smallest fit tie cost","expected":["FLOW",6,1],"passed":false},{"actual":["NONE",0,0],"check":"zero demand","expected":["NONE",0,0],"passed":true},{"actual":["B",700,70],"check":"split tie","expected":["B",700,70],"passed":true},{"actual":["PAL",234,6],"check":"split","expected":["PAL",234,6],"passed":true},{"actual":["PAL",1,1],"check":"tiny demand one case","expected":["SHELF",1,1],"passed":false},{"actual":["PAL",8,1],"check":"generated mix 8","expected":["FLOW",8,1],"passed":false},{"actual":["FLOW",9,1],"check":"generated mix 16","expected":["FLOW",9,1],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"exact capacity\", \"actual\": [\"PAL\", 4, 1], \"expected\": [\"SHELF\", 4, 1], \"passed\": false}, {\"check\": \"smallest fit tie cost\", \"actual\": [\"PAL\", 6, 1], \"expected\": [\"FLOW\", 6, 1], \"passed\": false}, {\"check\": \"zero demand\", \"actual\": [\"NONE\", 0, 0], \"expected\": [\"NONE\", 0, 0], \"passed\": true}, {\"check\": \"split tie\", \"actual\": [\"B\", 700, 70], \"expected\": [\"B\", 700, 70], \"passed\": true}, {\"check\": \"split\", \"actual\": [\"PAL\", 234, 6], \"expected\": [\"PAL\", 234, 6], \"passed\": true}, {\"check\": \"tiny demand one case\", \"actual\": [\"PAL\", 1, 1], \"expected\": [\"SHELF\", 1, 1], \"passed\": false}, {\"check\": \"generated mix 8\", \"actual\": [\"PAL\", 8, 1], \"expected\": [\"FLOW\", 8, 1], \"passed\": false}, {\"check\": \"generated mix 16\", \"actual\": [\"FLOW\", 9, 1], \"expected\": [\"FLOW\", 9, 1], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.754,"exit_code":1,"observations":[{"actual":["FLOW",4,1],"check":"exact capacity","expected":["SHELF",4,1],"passed":false},{"actual":["FLOW",6,1],"check":"smallest fit tie cost","expected":["FLOW",6,1],"passed":true},{"actual":["NONE",0,0],"check":"zero demand","expected":["NONE",0,0],"passed":true},{"actual":["B",700,70],"check":"split tie","expected":["B",700,70],"passed":true},{"actual":["PAL",234,6],"check":"split","expected":["PAL",234,6],"passed":true},{"actual":["FLOW",1,1],"check":"tiny demand one case","expected":["SHELF",1,1],"passed":false},{"actual":["FLOW",8,1],"check":"generated mix 8","expected":["FLOW",8,1],"passed":true},{"actual":["FLOW",9,1],"check":"generated mix 16","expected":["FLOW",9,1],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"exact capacity\", \"actual\": [\"FLOW\", 4, 1], \"expected\": [\"SHELF\", 4, 1], \"passed\": false}, {\"check\": \"smallest fit tie cost\", \"actual\": [\"FLOW\", 6, 1], \"expected\": [\"FLOW\", 6, 1], \"passed\": true}, {\"check\": \"zero demand\", \"actual\": [\"NONE\", 0, 0], \"expected\": [\"NONE\", 0, 0], \"passed\": true}, {\"check\": \"split tie\", \"actual\": [\"B\", 700, 70], \"expected\": [\"B\", 700, 70], \"passed\": true}, {\"check\": \"split\", \"actual\": [\"PAL\", 234, 6], \"expected\": [\"PAL\", 234, 6], \"passed\": true}, {\"check\": \"tiny demand one case\", \"actual\": [\"FLOW\", 1, 1], \"expected\": [\"SHELF\", 1, 1], \"passed\": false}, {\"check\": \"generated mix 8\", \"actual\": [\"FLOW\", 8, 1], \"expected\": [\"FLOW\", 8, 1], \"passed\": true}, {\"check\": \"generated mix 16\", \"actual\": [\"FLOW\", 9, 1], \"expected\": [\"FLOW\", 9, 1], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.238,"exit_code":0,"observations":[{"actual":["SHELF",4,1],"check":"exact capacity","expected":["SHELF",4,1],"passed":true},{"actual":["FLOW",6,1],"check":"smallest fit tie cost","expected":["FLOW",6,1],"passed":true},{"actual":["NONE",0,0],"check":"zero demand","expected":["NONE",0,0],"passed":true},{"actual":["B",700,70],"check":"split tie","expected":["B",700,70],"passed":true},{"actual":["PAL",234,6],"check":"split","expected":["PAL",234,6],"passed":true},{"actual":["SHELF",1,1],"check":"tiny demand one case","expected":["SHELF",1,1],"passed":true},{"actual":["FLOW",8,1],"check":"generated mix 8","expected":["FLOW",8,1],"passed":true},{"actual":["FLOW",9,1],"check":"generated mix 16","expected":["FLOW",9,1],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"exact capacity\", \"actual\": [\"SHELF\", 4, 1], \"expected\": [\"SHELF\", 4, 1], \"passed\": true}, {\"check\": \"smallest fit tie cost\", \"actual\": [\"FLOW\", 6, 1], \"expected\": [\"FLOW\", 6, 1], \"passed\": true}, {\"check\": \"zero demand\", \"actual\": [\"NONE\", 0, 0], \"expected\": [\"NONE\", 0, 0], \"passed\": true}, {\"check\": \"split tie\", \"actual\": [\"B\", 700, 70], \"expected\": [\"B\", 700, 70], \"passed\": true}, {\"check\": \"split\", \"actual\": [\"PAL\", 234, 6], \"expected\": [\"PAL\", 234, 6], \"passed\": true}, {\"check\": \"tiny demand one case\", \"actual\": [\"SHELF\", 1, 1], \"expected\": [\"SHELF\", 1, 1], \"passed\": true}, {\"check\": \"generated mix 8\", \"actual\": [\"FLOW\", 8, 1], \"expected\": [\"FLOW\", 8, 1], \"passed\": true}, {\"check\": \"generated mix 16\", \"actual\": [\"FLOW\", 9, 1], \"expected\": [\"FLOW\", 9, 1], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}