{"abstract":"When an order has two lines for the same SKU only the last line quantity is placed.","category":"Warehouse slotting and bin packing","checks":8,"contract":"lines [[sku, qty, unit_volume, nest_increment]]. Lines for the same SKU are merged. A nesting SKU (increment > 0) occupies unit_volume + (qty-1)*increment; others qty*unit_volume; qty 0 contributes nothing and is not counted. Bin fits when total <= bin_vol and distinct stocked SKUs <= max_skus. Return [total, fits].","contract_signature":"lines, bin_vol, max_skus","evaluation_group":"w2-warehouse-slotting-nesting-bin","failed_approach":"Keeping the larger line quantity still loses the smaller line.","family":"w2-warehouse-slotting-nesting-bin-merge-duplicates","id":"FA-95161","implementations":{"attempt":{"sha256":"cb46be7ed22ac94367b6822ecd0e6fe87cff09a7ed42454fb9f117ba509e736f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(lines, bin_vol, max_skus):\n    merged = {}\n    for sku, qty, uv, nv in lines:\n        if sku in merged:\n            merged[sku][0] = max(merged[sku][0], qty)\n        else:\n            merged[sku] = [qty, uv, nv]\n    total = 0\n    count = 0\n    for sku, (qty, uv, nv) in merged.items():\n        if qty <= 0:\n            continue\n        count += 1\n        if nv > 0:\n            total += uv + (qty - 1) * nv\n        else:\n            total += qty * uv\n    return [total, total <= bin_vol and count <= max_skus]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['merged lines nest together', [[['CUP', 5, 10, 2], ['CUP', 5, 10, 2]], 30, 1], [28, True]], ['generated mix 1', [[['LID', 0, 4, 0], ['TRY', 10, 25, 5], ['TRY', 5, 25, 5], ['CUP', 2, 10, 2], ['BWL', 10, 30, 6]], 120, 2], [191, False]], ['nesting', [[['CUP', 10, 10, 2]], 30, 1], [28, True]], ['zero line', [[['CUP', 1, 10, 2], ['BOX', 0, 40, 0]], 30, 1], [10, True]], ['sku limit', [[['CUP', 1, 10, 2], ['LID', 1, 4, 0]], 100, 1], [14, False]], ['capacity equal', [[['CUP', 11, 10, 2]], 30, 1], [30, True]], ['non nesting', [[['BOX', 2, 40, 0]], 80, 1], [80, True]], ['generated mix 9', [[['CUP', 10, 10, 2], ['TRY', 10, 25, 5], ['BOX', 5, 40, 0], ['LID', 10, 4, 0], ['BWL', 2, 30, 6]], 80, 1], [374, False]]], [['generated mix 23', [[['TRY', 2, 25, 5], ['CUP', 10, 10, 2], ['TRY', 0, 25, 5]], 150, 2], [58, True]], ['generated mix 22', [[['BOX', 2, 40, 0], ['BOX', 10, 40, 0], ['BOX', 0, 40, 0], ['BOX', 2, 40, 0], ['LID', 1, 4, 0]], 50, 2], [564, False]], ['zero line', [[['CUP', 1, 10, 2], ['BOX', 0, 40, 0]], 30, 1], [10, True]], ['sku limit', [[['CUP', 1, 10, 2], ['LID', 1, 4, 0]], 100, 1], [14, False]], ['capacity equal', [[['CUP', 11, 10, 2]], 30, 1], [30, True]], ['generated mix 9', [[['CUP', 10, 10, 2], ['TRY', 10, 25, 5], ['BOX', 5, 40, 0], ['LID', 10, 4, 0], ['BWL', 2, 30, 6]], 80, 1], [374, False]], ['generated mix 17', [[['CUP', 5, 10, 2]], 50, 2], [18, True]], ['generated mix 27', [[['CUP', 2, 10, 2]], 100, 1], [12, True]]], [['generated mix 42', [[['LID', 5, 4, 0], ['BWL', 1, 30, 6], ['BWL', 1, 30, 6]], 100, 2], [56, True]], ['generated mix 40', [[['BOX', 10, 40, 0], ['CUP', 5, 10, 2], ['CUP', 1, 10, 2], ['BWL', 5, 30, 6], ['BWL', 0, 30, 6]], 100, 2], [474, False]], ['nesting', [[['CUP', 10, 10, 2]], 30, 1], [28, True]], ['merged lines nest together', [[['CUP', 5, 10, 2], ['CUP', 5, 10, 2]], 30, 1], [28, True]], ['non nesting', [[['BOX', 2, 40, 0]], 80, 1], [80, True]], ['generated mix 20', [[['BOX', 5, 40, 0]], 120, 1], [200, False]], ['generated mix 28', [[['TRY', 0, 25, 5]], 120, 1], [0, True]], ['generated mix 36', [[['CUP', 0, 10, 2], ['TRY', 1, 25, 5], ['BOX', 1, 40, 0], ['BWL', 5, 30, 6]], 100, 3], [119, False]]], [['generated mix 67', [[['TRY', 2, 25, 5], ['BOX', 10, 40, 0], ['LID', 0, 4, 0], ['TRY', 0, 25, 5]], 100, 1], [430, False]], ['generated mix 61', [[['TRY', 1, 25, 5], ['TRY', 5, 25, 5], ['TRY', 2, 25, 5]], 100, 1], [60, True]], ['zero line', [[['CUP', 1, 10, 2], ['BOX', 0, 40, 0]], 30, 1], [10, True]], ['sku limit', [[['CUP', 1, 10, 2], ['LID', 1, 4, 0]], 100, 1], [14, False]], ['capacity equal', [[['CUP', 11, 10, 2]], 30, 1], [30, True]], ['generated mix 31', [[['BOX', 2, 40, 0], ['BOX', 5, 40, 0], ['LID', 10, 4, 0], ['LID', 0, 4, 0]], 80, 3], [320, False]], ['generated mix 39', [[['BOX', 10, 40, 0], ['LID', 0, 4, 0]], 120, 3], [400, False]], ['generated mix 47', [[['TRY', 10, 25, 5]], 80, 1], [70, True]]], [['generated mix 1', [[['LID', 0, 4, 0], ['TRY', 10, 25, 5], ['TRY', 5, 25, 5], ['CUP', 2, 10, 2], ['BWL', 10, 30, 6]], 120, 2], [191, False]], ['generated mix 73', [[['LID', 10, 4, 0], ['CUP', 5, 10, 2], ['BOX', 1, 40, 0], ['CUP', 10, 10, 2], ['LID', 10, 4, 0]], 100, 3], [158, False]], ['nesting', [[['CUP', 10, 10, 2]], 30, 1], [28, True]], ['merged lines nest together', [[['CUP', 5, 10, 2], ['CUP', 5, 10, 2]], 30, 1], [28, True]], ['non nesting', [[['BOX', 2, 40, 0]], 80, 1], [80, True]], ['generated mix 43', [[['LID', 2, 4, 0], ['TRY', 5, 25, 5]], 100, 2], [53, True]], ['generated mix 51', [[['LID', 10, 4, 0], ['TRY', 0, 25, 5], ['BWL', 10, 30, 6]], 150, 2], [124, True]], ['generated mix 59', [[['LID', 0, 4, 0], ['BOX', 2, 40, 0], ['LID', 10, 4, 0], ['BWL', 5, 30, 6]], 50, 3], [174, False]]]]\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":"0bd5d3e25250398df5d55b4c299bb45a88b20079e93be5706b11f6094c720e4c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(lines, bin_vol, max_skus):\n    merged = {}\n    for sku, qty, uv, nv in lines:\n        if sku in merged:\n            merged[sku] = [qty, uv, nv]\n        else:\n            merged[sku] = [qty, uv, nv]\n    total = 0\n    count = 0\n    for sku, (qty, uv, nv) in merged.items():\n        if qty <= 0:\n            continue\n        count += 1\n        if nv > 0:\n            total += uv + (qty - 1) * nv\n        else:\n            total += qty * uv\n    return [total, total <= bin_vol and count <= max_skus]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['merged lines nest together', [[['CUP', 5, 10, 2], ['CUP', 5, 10, 2]], 30, 1], [28, True]], ['generated mix 1', [[['LID', 0, 4, 0], ['TRY', 10, 25, 5], ['TRY', 5, 25, 5], ['CUP', 2, 10, 2], ['BWL', 10, 30, 6]], 120, 2], [191, False]], ['nesting', [[['CUP', 10, 10, 2]], 30, 1], [28, True]], ['zero line', [[['CUP', 1, 10, 2], ['BOX', 0, 40, 0]], 30, 1], [10, True]], ['sku limit', [[['CUP', 1, 10, 2], ['LID', 1, 4, 0]], 100, 1], [14, False]], ['capacity equal', [[['CUP', 11, 10, 2]], 30, 1], [30, True]], ['non nesting', [[['BOX', 2, 40, 0]], 80, 1], [80, True]], ['generated mix 9', [[['CUP', 10, 10, 2], ['TRY', 10, 25, 5], ['BOX', 5, 40, 0], ['LID', 10, 4, 0], ['BWL', 2, 30, 6]], 80, 1], [374, False]]], [['generated mix 23', [[['TRY', 2, 25, 5], ['CUP', 10, 10, 2], ['TRY', 0, 25, 5]], 150, 2], [58, True]], ['generated mix 22', [[['BOX', 2, 40, 0], ['BOX', 10, 40, 0], ['BOX', 0, 40, 0], ['BOX', 2, 40, 0], ['LID', 1, 4, 0]], 50, 2], [564, False]], ['zero line', [[['CUP', 1, 10, 2], ['BOX', 0, 40, 0]], 30, 1], [10, True]], ['sku limit', [[['CUP', 1, 10, 2], ['LID', 1, 4, 0]], 100, 1], [14, False]], ['capacity equal', [[['CUP', 11, 10, 2]], 30, 1], [30, True]], ['generated mix 9', [[['CUP', 10, 10, 2], ['TRY', 10, 25, 5], ['BOX', 5, 40, 0], ['LID', 10, 4, 0], ['BWL', 2, 30, 6]], 80, 1], [374, False]], ['generated mix 17', [[['CUP', 5, 10, 2]], 50, 2], [18, True]], ['generated mix 27', [[['CUP', 2, 10, 2]], 100, 1], [12, True]]], [['generated mix 42', [[['LID', 5, 4, 0], ['BWL', 1, 30, 6], ['BWL', 1, 30, 6]], 100, 2], [56, True]], ['generated mix 40', [[['BOX', 10, 40, 0], ['CUP', 5, 10, 2], ['CUP', 1, 10, 2], ['BWL', 5, 30, 6], ['BWL', 0, 30, 6]], 100, 2], [474, False]], ['nesting', [[['CUP', 10, 10, 2]], 30, 1], [28, True]], ['merged lines nest together', [[['CUP', 5, 10, 2], ['CUP', 5, 10, 2]], 30, 1], [28, True]], ['non nesting', [[['BOX', 2, 40, 0]], 80, 1], [80, True]], ['generated mix 20', [[['BOX', 5, 40, 0]], 120, 1], [200, False]], ['generated mix 28', [[['TRY', 0, 25, 5]], 120, 1], [0, True]], ['generated mix 36', [[['CUP', 0, 10, 2], ['TRY', 1, 25, 5], ['BOX', 1, 40, 0], ['BWL', 5, 30, 6]], 100, 3], [119, False]]], [['generated mix 67', [[['TRY', 2, 25, 5], ['BOX', 10, 40, 0], ['LID', 0, 4, 0], ['TRY', 0, 25, 5]], 100, 1], [430, False]], ['generated mix 61', [[['TRY', 1, 25, 5], ['TRY', 5, 25, 5], ['TRY', 2, 25, 5]], 100, 1], [60, True]], ['zero line', [[['CUP', 1, 10, 2], ['BOX', 0, 40, 0]], 30, 1], [10, True]], ['sku limit', [[['CUP', 1, 10, 2], ['LID', 1, 4, 0]], 100, 1], [14, False]], ['capacity equal', [[['CUP', 11, 10, 2]], 30, 1], [30, True]], ['generated mix 31', [[['BOX', 2, 40, 0], ['BOX', 5, 40, 0], ['LID', 10, 4, 0], ['LID', 0, 4, 0]], 80, 3], [320, False]], ['generated mix 39', [[['BOX', 10, 40, 0], ['LID', 0, 4, 0]], 120, 3], [400, False]], ['generated mix 47', [[['TRY', 10, 25, 5]], 80, 1], [70, True]]], [['generated mix 1', [[['LID', 0, 4, 0], ['TRY', 10, 25, 5], ['TRY', 5, 25, 5], ['CUP', 2, 10, 2], ['BWL', 10, 30, 6]], 120, 2], [191, False]], ['generated mix 73', [[['LID', 10, 4, 0], ['CUP', 5, 10, 2], ['BOX', 1, 40, 0], ['CUP', 10, 10, 2], ['LID', 10, 4, 0]], 100, 3], [158, False]], ['nesting', [[['CUP', 10, 10, 2]], 30, 1], [28, True]], ['merged lines nest together', [[['CUP', 5, 10, 2], ['CUP', 5, 10, 2]], 30, 1], [28, True]], ['non nesting', [[['BOX', 2, 40, 0]], 80, 1], [80, True]], ['generated mix 43', [[['LID', 2, 4, 0], ['TRY', 5, 25, 5]], 100, 2], [53, True]], ['generated mix 51', [[['LID', 10, 4, 0], ['TRY', 0, 25, 5], ['BWL', 10, 30, 6]], 150, 2], [124, True]], ['generated mix 59', [[['LID', 0, 4, 0], ['BOX', 2, 40, 0], ['LID', 10, 4, 0], ['BWL', 5, 30, 6]], 50, 3], [174, False]]]]\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 linear nesting model; no orientation or partial stacks. 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-nesting-bin-merge-duplicates","generated_at":"2026-09-29T14:52:11.169229+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Nesting products such as cups and trays occupy far less space than unit cube suggests.","root_cause":"Duplicate SKU lines replace the earlier quantity instead of adding to it.","sha256":"633298aa119cbdf818363a120402588e2fdc614d465a58469300063806603bb5","title":"Nested bin fill: repeated SKU line overwrites · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":39.943,"exit_code":1,"observations":[{"actual":[18,true],"check":"merged lines nest together","expected":[28,true],"passed":false},{"actual":[166,false],"check":"generated mix 1","expected":[191,false],"passed":false},{"actual":[28,true],"check":"nesting","expected":[28,true],"passed":true},{"actual":[10,true],"check":"zero line","expected":[10,true],"passed":true},{"actual":[14,false],"check":"sku limit","expected":[14,false],"passed":true},{"actual":[30,true],"check":"capacity equal","expected":[30,true],"passed":true},{"actual":[80,true],"check":"non nesting","expected":[80,true],"passed":true},{"actual":[374,false],"check":"generated mix 9","expected":[374,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"merged lines nest together\", \"actual\": [18, true], \"expected\": [28, true], \"passed\": false}, {\"check\": \"generated mix 1\", \"actual\": [166, false], \"expected\": [191, false], \"passed\": false}, {\"check\": \"nesting\", \"actual\": [28, true], \"expected\": [28, true], \"passed\": true}, {\"check\": \"zero line\", \"actual\": [10, true], \"expected\": [10, true], \"passed\": true}, {\"check\": \"sku limit\", \"actual\": [14, false], \"expected\": [14, false], \"passed\": true}, {\"check\": \"capacity equal\", \"actual\": [30, true], \"expected\": [30, true], \"passed\": true}, {\"check\": \"non nesting\", \"actual\": [80, true], \"expected\": [80, true], \"passed\": true}, {\"check\": \"generated mix 9\", \"actual\": [374, false], \"expected\": [374, false], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.822,"exit_code":1,"observations":[{"actual":[18,true],"check":"merged lines nest together","expected":[28,true],"passed":false},{"actual":[141,false],"check":"generated mix 1","expected":[191,false],"passed":false},{"actual":[28,true],"check":"nesting","expected":[28,true],"passed":true},{"actual":[10,true],"check":"zero line","expected":[10,true],"passed":true},{"actual":[14,false],"check":"sku limit","expected":[14,false],"passed":true},{"actual":[30,true],"check":"capacity equal","expected":[30,true],"passed":true},{"actual":[80,true],"check":"non nesting","expected":[80,true],"passed":true},{"actual":[374,false],"check":"generated mix 9","expected":[374,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"merged lines nest together\", \"actual\": [18, true], \"expected\": [28, true], \"passed\": false}, {\"check\": \"generated mix 1\", \"actual\": [141, false], \"expected\": [191, false], \"passed\": false}, {\"check\": \"nesting\", \"actual\": [28, true], \"expected\": [28, true], \"passed\": true}, {\"check\": \"zero line\", \"actual\": [10, true], \"expected\": [10, true], \"passed\": true}, {\"check\": \"sku limit\", \"actual\": [14, false], \"expected\": [14, false], \"passed\": true}, {\"check\": \"capacity equal\", \"actual\": [30, true], \"expected\": [30, true], \"passed\": true}, {\"check\": \"non nesting\", \"actual\": [80, true], \"expected\": [80, true], \"passed\": true}, {\"check\": \"generated mix 9\", \"actual\": [374, false], \"expected\": [374, false], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}