{"abstract":"Slow SKUs receive class A and the top movers fall into C.","category":"Warehouse slotting and bin packing","checks":8,"contract":"Input [[sku, weekly_picks]]. Rank by picks descending then sku ascending. SKUs with equal picks form a tie group whose cumulative prior share is the picks of strictly faster groups. picks 0 -> D (dead stock); prior share < 80% -> A; < 95% -> B; else C. Return [[sku, class]] in input order.","evaluation_group":"w2-warehouse-slotting-abc-velocity","failed_approach":"Sorting by sku code alone makes the class depend on the alphabet rather than velocity.","family":"w2-warehouse-slotting-abc-velocity-rank-direction","id":"FA-94851","implementations":{"attempt":{"sha256":"b3e88460cd2eb347ade87366e360e9ad3860c8d3dece9ed3c73c0e29b4daef84","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(skus):\n    total = sum(p for _, p in skus)\n    order = sorted(skus, key=lambda r: r[0])\n    cls = {}\n    prior = 0\n    i = 0\n    while i < len(order):\n        j = i\n        while j < len(order) and order[j][1] == order[i][1]:\n            j += 1\n        for sku, picks in order[i:j]:\n            if picks == 0:\n                cls[sku] = 'D'\n            elif prior * 100 < 80 * total:\n                cls[sku] = 'A'\n            elif prior * 100 < 95 * total:\n                cls[sku] = 'B'\n            else:\n                cls[sku] = 'C'\n        prior += order[i][1] * (j - i)\n        i = j\n    return [[sku, cls[sku]] for sku, _ in skus]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['generated mix 3', [[['S24', 20], ['S10', 2], ['S13', 20], ['S21', 40], ['S27', 3], ['S15', 60], ['S26', 5], ['S09', 40]]], [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 7', [[['S28', 5], ['S25', 20], ['S14', 5], ['S01', 1], ['S10', 0], ['S19', 1], ['S17', 5], ['S16', 3]]], [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']]]], [['generated mix 5', [[['S20', 60], ['S04', 20], ['S16', 3], ['S05', 8]]], [['S20', 'A'], ['S04', 'A'], ['S16', 'C'], ['S05', 'B']]], ['generated mix 9', [[['S08', 5], ['S03', 3], ['S12', 5], ['S18', 2], ['S23', 5]]], [['S08', 'A'], ['S03', 'A'], ['S12', 'A'], ['S18', 'B'], ['S23', 'A']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 10', [[['S07', 20], ['S27', 60], ['S28', 8]]], [['S07', 'A'], ['S27', 'A'], ['S28', 'B']]], ['generated mix 18', [[['S03', 10], ['S14', 10], ['S28', 0], ['S16', 20], ['S23', 60]]], [['S03', 'B'], ['S14', 'B'], ['S28', 'D'], ['S16', 'A'], ['S23', 'A']]]], [['generated mix 12', [[['S16', 2], ['S19', 5], ['S27', 1], ['S01', 20], ['S29', 0]]], [['S16', 'B'], ['S19', 'A'], ['S27', 'C'], ['S01', 'A'], ['S29', 'D']]], ['generated mix 16', [[['S23', 60], ['S12', 0], ['S11', 8], ['S14', 8], ['S06', 20], ['S04', 40], ['S08', 5], ['S22', 5]]], [['S23', 'A'], ['S12', 'D'], ['S11', 'B'], ['S14', 'B'], ['S06', 'A'], ['S04', 'A'], ['S08', 'B'], ['S22', 'B']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['generated mix 21', [[['S23', 1], ['S07', 1], ['S04', 0], ['S22', 60], ['S03', 60], ['S21', 1]]], [['S23', 'C'], ['S07', 'C'], ['S04', 'D'], ['S22', 'A'], ['S03', 'A'], ['S21', 'C']]], ['generated mix 29', [[['S28', 5], ['S11', 60]]], [['S28', 'B'], ['S11', 'A']]]], [['generated mix 23', [[['S06', 0], ['S18', 0], ['S20', 1], ['S21', 10], ['S16', 2], ['S10', 10], ['S24', 3], ['S29', 40]]], [['S06', 'D'], ['S18', 'D'], ['S20', 'C'], ['S21', 'A'], ['S16', 'C'], ['S10', 'A'], ['S24', 'B'], ['S29', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['generated mix 31', [[['S14', 20], ['S12', 8], ['S16', 3], ['S01', 0], ['S09', 20]]], [['S14', 'A'], ['S12', 'A'], ['S16', 'B'], ['S01', 'D'], ['S09', 'A']]], ['generated mix 39', [[['S09', 40], ['S22', 20], ['S23', 10], ['S15', 5], ['S18', 20], ['S07', 20], ['S02', 2]]], [['S09', 'A'], ['S22', 'A'], ['S23', 'B'], ['S15', 'B'], ['S18', 'A'], ['S07', 'A'], ['S02', 'C']]], ['generated mix 47', [[['S11', 0], ['S08', 20], ['S05', 3], ['S29', 0], ['S24', 2], ['S03', 20]]], [['S11', 'D'], ['S08', 'A'], ['S05', 'B'], ['S29', 'D'], ['S24', 'C'], ['S03', 'A']]]], [['generated mix 30', [[['S27', 3], ['S03', 10], ['S25', 20], ['S08', 1], ['S09', 3], ['S01', 10], ['S20', 60]]], [['S27', 'B'], ['S03', 'A'], ['S25', 'A'], ['S08', 'C'], ['S09', 'B'], ['S01', 'A'], ['S20', 'A']]], ['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 43', [[['S18', 60], ['S28', 60], ['S01', 3], ['S15', 5]]], [['S18', 'A'], ['S28', 'A'], ['S01', 'C'], ['S15', 'B']]], ['generated mix 51', [[['S24', 3], ['S13', 5], ['S29', 60], ['S16', 0], ['S22', 2], ['S05', 8], ['S14', 5], ['S04', 40]]], [['S24', 'C'], ['S13', 'B'], ['S29', 'A'], ['S16', 'D'], ['S22', 'C'], ['S05', 'B'], ['S14', 'B'], ['S04', 'A']]]]]\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":"89d43f5c45662f6b953c4c400f27ad6301a02e10f455381c1ef4eb39c8ab3841","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(skus):\n    total = sum(p for _, p in skus)\n    order = sorted(skus, key=lambda r: (r[1], r[0]))\n    cls = {}\n    prior = 0\n    i = 0\n    while i < len(order):\n        j = i\n        while j < len(order) and order[j][1] == order[i][1]:\n            j += 1\n        for sku, picks in order[i:j]:\n            if picks == 0:\n                cls[sku] = 'D'\n            elif prior * 100 < 80 * total:\n                cls[sku] = 'A'\n            elif prior * 100 < 95 * total:\n                cls[sku] = 'B'\n            else:\n                cls[sku] = 'C'\n        prior += order[i][1] * (j - i)\n        i = j\n    return [[sku, cls[sku]] for sku, _ in skus]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['generated mix 3', [[['S24', 20], ['S10', 2], ['S13', 20], ['S21', 40], ['S27', 3], ['S15', 60], ['S26', 5], ['S09', 40]]], [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 7', [[['S28', 5], ['S25', 20], ['S14', 5], ['S01', 1], ['S10', 0], ['S19', 1], ['S17', 5], ['S16', 3]]], [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']]]], [['generated mix 5', [[['S20', 60], ['S04', 20], ['S16', 3], ['S05', 8]]], [['S20', 'A'], ['S04', 'A'], ['S16', 'C'], ['S05', 'B']]], ['generated mix 9', [[['S08', 5], ['S03', 3], ['S12', 5], ['S18', 2], ['S23', 5]]], [['S08', 'A'], ['S03', 'A'], ['S12', 'A'], ['S18', 'B'], ['S23', 'A']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 10', [[['S07', 20], ['S27', 60], ['S28', 8]]], [['S07', 'A'], ['S27', 'A'], ['S28', 'B']]], ['generated mix 18', [[['S03', 10], ['S14', 10], ['S28', 0], ['S16', 20], ['S23', 60]]], [['S03', 'B'], ['S14', 'B'], ['S28', 'D'], ['S16', 'A'], ['S23', 'A']]]], [['generated mix 12', [[['S16', 2], ['S19', 5], ['S27', 1], ['S01', 20], ['S29', 0]]], [['S16', 'B'], ['S19', 'A'], ['S27', 'C'], ['S01', 'A'], ['S29', 'D']]], ['generated mix 16', [[['S23', 60], ['S12', 0], ['S11', 8], ['S14', 8], ['S06', 20], ['S04', 40], ['S08', 5], ['S22', 5]]], [['S23', 'A'], ['S12', 'D'], ['S11', 'B'], ['S14', 'B'], ['S06', 'A'], ['S04', 'A'], ['S08', 'B'], ['S22', 'B']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['generated mix 21', [[['S23', 1], ['S07', 1], ['S04', 0], ['S22', 60], ['S03', 60], ['S21', 1]]], [['S23', 'C'], ['S07', 'C'], ['S04', 'D'], ['S22', 'A'], ['S03', 'A'], ['S21', 'C']]], ['generated mix 29', [[['S28', 5], ['S11', 60]]], [['S28', 'B'], ['S11', 'A']]]], [['generated mix 23', [[['S06', 0], ['S18', 0], ['S20', 1], ['S21', 10], ['S16', 2], ['S10', 10], ['S24', 3], ['S29', 40]]], [['S06', 'D'], ['S18', 'D'], ['S20', 'C'], ['S21', 'A'], ['S16', 'C'], ['S10', 'A'], ['S24', 'B'], ['S29', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['generated mix 31', [[['S14', 20], ['S12', 8], ['S16', 3], ['S01', 0], ['S09', 20]]], [['S14', 'A'], ['S12', 'A'], ['S16', 'B'], ['S01', 'D'], ['S09', 'A']]], ['generated mix 39', [[['S09', 40], ['S22', 20], ['S23', 10], ['S15', 5], ['S18', 20], ['S07', 20], ['S02', 2]]], [['S09', 'A'], ['S22', 'A'], ['S23', 'B'], ['S15', 'B'], ['S18', 'A'], ['S07', 'A'], ['S02', 'C']]], ['generated mix 47', [[['S11', 0], ['S08', 20], ['S05', 3], ['S29', 0], ['S24', 2], ['S03', 20]]], [['S11', 'D'], ['S08', 'A'], ['S05', 'B'], ['S29', 'D'], ['S24', 'C'], ['S03', 'A']]]], [['generated mix 30', [[['S27', 3], ['S03', 10], ['S25', 20], ['S08', 1], ['S09', 3], ['S01', 10], ['S20', 60]]], [['S27', 'B'], ['S03', 'A'], ['S25', 'A'], ['S08', 'C'], ['S09', 'B'], ['S01', 'A'], ['S20', 'A']]], ['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 43', [[['S18', 60], ['S28', 60], ['S01', 3], ['S15', 5]]], [['S18', 'A'], ['S28', 'A'], ['S01', 'C'], ['S15', 'B']]], ['generated mix 51', [[['S24', 3], ['S13', 5], ['S29', 60], ['S16', 0], ['S22', 2], ['S05', 8], ['S14', 5], ['S04', 40]]], [['S24', 'C'], ['S13', 'B'], ['S29', 'A'], ['S16', 'D'], ['S22', 'C'], ['S05', 'B'], ['S14', 'B'], ['S04', 'A']]]]]\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":"e8b821592259700d23f0279569864e0a37bdeedde9064d5f2d8fc337a424137d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(skus):\n    total = sum(p for _, p in skus)\n    order = sorted(skus, key=lambda r: (-r[1], r[0]))\n    cls = {}\n    prior = 0\n    i = 0\n    while i < len(order):\n        j = i\n        while j < len(order) and order[j][1] == order[i][1]:\n            j += 1\n        for sku, picks in order[i:j]:\n            if picks == 0:\n                cls[sku] = 'D'\n            elif prior * 100 < 80 * total:\n                cls[sku] = 'A'\n            elif prior * 100 < 95 * total:\n                cls[sku] = 'B'\n            else:\n                cls[sku] = 'C'\n        prior += order[i][1] * (j - i)\n        i = j\n    return [[sku, cls[sku]] for sku, _ in skus]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['generated mix 3', [[['S24', 20], ['S10', 2], ['S13', 20], ['S21', 40], ['S27', 3], ['S15', 60], ['S26', 5], ['S09', 40]]], [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 7', [[['S28', 5], ['S25', 20], ['S14', 5], ['S01', 1], ['S10', 0], ['S19', 1], ['S17', 5], ['S16', 3]]], [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']]]], [['generated mix 5', [[['S20', 60], ['S04', 20], ['S16', 3], ['S05', 8]]], [['S20', 'A'], ['S04', 'A'], ['S16', 'C'], ['S05', 'B']]], ['generated mix 9', [[['S08', 5], ['S03', 3], ['S12', 5], ['S18', 2], ['S23', 5]]], [['S08', 'A'], ['S03', 'A'], ['S12', 'A'], ['S18', 'B'], ['S23', 'A']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 10', [[['S07', 20], ['S27', 60], ['S28', 8]]], [['S07', 'A'], ['S27', 'A'], ['S28', 'B']]], ['generated mix 18', [[['S03', 10], ['S14', 10], ['S28', 0], ['S16', 20], ['S23', 60]]], [['S03', 'B'], ['S14', 'B'], ['S28', 'D'], ['S16', 'A'], ['S23', 'A']]]], [['generated mix 12', [[['S16', 2], ['S19', 5], ['S27', 1], ['S01', 20], ['S29', 0]]], [['S16', 'B'], ['S19', 'A'], ['S27', 'C'], ['S01', 'A'], ['S29', 'D']]], ['generated mix 16', [[['S23', 60], ['S12', 0], ['S11', 8], ['S14', 8], ['S06', 20], ['S04', 40], ['S08', 5], ['S22', 5]]], [['S23', 'A'], ['S12', 'D'], ['S11', 'B'], ['S14', 'B'], ['S06', 'A'], ['S04', 'A'], ['S08', 'B'], ['S22', 'B']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['generated mix 21', [[['S23', 1], ['S07', 1], ['S04', 0], ['S22', 60], ['S03', 60], ['S21', 1]]], [['S23', 'C'], ['S07', 'C'], ['S04', 'D'], ['S22', 'A'], ['S03', 'A'], ['S21', 'C']]], ['generated mix 29', [[['S28', 5], ['S11', 60]]], [['S28', 'B'], ['S11', 'A']]]], [['generated mix 23', [[['S06', 0], ['S18', 0], ['S20', 1], ['S21', 10], ['S16', 2], ['S10', 10], ['S24', 3], ['S29', 40]]], [['S06', 'D'], ['S18', 'D'], ['S20', 'C'], ['S21', 'A'], ['S16', 'C'], ['S10', 'A'], ['S24', 'B'], ['S29', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['generated mix 31', [[['S14', 20], ['S12', 8], ['S16', 3], ['S01', 0], ['S09', 20]]], [['S14', 'A'], ['S12', 'A'], ['S16', 'B'], ['S01', 'D'], ['S09', 'A']]], ['generated mix 39', [[['S09', 40], ['S22', 20], ['S23', 10], ['S15', 5], ['S18', 20], ['S07', 20], ['S02', 2]]], [['S09', 'A'], ['S22', 'A'], ['S23', 'B'], ['S15', 'B'], ['S18', 'A'], ['S07', 'A'], ['S02', 'C']]], ['generated mix 47', [[['S11', 0], ['S08', 20], ['S05', 3], ['S29', 0], ['S24', 2], ['S03', 20]]], [['S11', 'D'], ['S08', 'A'], ['S05', 'B'], ['S29', 'D'], ['S24', 'C'], ['S03', 'A']]]], [['generated mix 30', [[['S27', 3], ['S03', 10], ['S25', 20], ['S08', 1], ['S09', 3], ['S01', 10], ['S20', 60]]], [['S27', 'B'], ['S03', 'A'], ['S25', 'A'], ['S08', 'C'], ['S09', 'B'], ['S01', 'A'], ['S20', 'A']]], ['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 43', [[['S18', 60], ['S28', 60], ['S01', 3], ['S15', 5]]], [['S18', 'A'], ['S28', 'A'], ['S01', 'C'], ['S15', 'B']]], ['generated mix 51', [[['S24', 3], ['S13', 5], ['S29', 60], ['S16', 0], ['S22', 2], ['S05', 8], ['S14', 5], ['S04', 40]]], [['S24', 'C'], ['S13', 'B'], ['S29', 'A'], ['S16', 'D'], ['S22', 'C'], ['S05', 'B'], ['S14', 'B'], ['S04', 'A']]]]]\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 toy ABC policy with fixed 80/95 bands; not a vendor WMS rule set. 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-abc-velocity-rank-direction","generated_at":"2026-09-29T14:52:08.289921+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Velocity classes drive which SKUs are slotted into forward pick areas.","repair":"Rank by picks descending with the sku code as tie-break.","root_cause":"The ranking sorts weekly picks ascending, so cumulative share starts from the slowest movers.","sha256":"21d202aa12b7063934a96dd743560586b2fc0db38600cd78cda12451f5cbed07","title":"ABC velocity: slowest movers ranked first · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":46.216,"exit_code":1,"observations":[{"actual":[["a","A"],["b","A"],["c","B"]],"check":"crossing sku is A","expected":[["a","A"],["b","A"],["c","B"]],"passed":true},{"actual":[["S24","B"],["S10","A"],["S13","A"],["S21","A"],["S27","C"],["S15","A"],["S26","C"],["S09","A"]],"check":"generated mix 3","expected":[["S24","A"],["S10","C"],["S13","A"],["S21","A"],["S27","C"],["S15","A"],["S26","B"],["S09","A"]],"passed":false},{"actual":[["x","A"],["y","A"],["z","B"]],"check":"tie group straddles 80%","expected":[["x","A"],["y","A"],["z","B"]],"passed":true},{"actual":[["a","D"],["b","D"]],"check":"all zero","expected":[["a","D"],["b","D"]],"passed":true},{"actual":[["m","C"],["k","B"],["a","A"]],"check":"input order kept","expected":[["m","C"],["k","B"],["a","A"]],"passed":true},{"actual":[],"check":"empty","expected":[],"passed":true},{"actual":[["a","A"],["b","D"]],"check":"dead stock","expected":[["a","A"],["b","D"]],"passed":true},{"actual":[["S28","B"],["S25","A"],["S14","A"],["S01","A"],["S10","D"],["S19","A"],["S17","A"],["S16","A"]],"check":"generated mix 7","expected":[["S28","A"],["S25","A"],["S14","A"],["S01","C"],["S10","D"],["S19","C"],["S17","A"],["S16","B"]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"crossing sku is A\", \"actual\": [[\"a\", \"A\"], [\"b\", \"A\"], [\"c\", \"B\"]], \"expected\": [[\"a\", \"A\"], [\"b\", \"A\"], [\"c\", \"B\"]], \"passed\": true}, {\"check\": \"generated mix 3\", \"actual\": [[\"S24\", \"B\"], [\"S10\", \"A\"], [\"S13\", \"A\"], [\"S21\", \"A\"], [\"S27\", \"C\"], [\"S15\", \"A\"], [\"S26\", \"C\"], [\"S09\", \"A\"]], \"expected\": [[\"S24\", \"A\"], [\"S10\", \"C\"], [\"S13\", \"A\"], [\"S21\", \"A\"], [\"S27\", \"C\"], [\"S15\", \"A\"], [\"S26\", \"B\"], [\"S09\", \"A\"]], \"passed\": false}, {\"check\": \"tie group straddles 80%\", \"actual\": [[\"x\", \"A\"], [\"y\", \"A\"], [\"z\", \"B\"]], \"expected\": [[\"x\", \"A\"], [\"y\", \"A\"], [\"z\", \"B\"]], \"passed\": true}, {\"check\": \"all zero\", \"actual\": [[\"a\", \"D\"], [\"b\", \"D\"]], \"expected\": [[\"a\", \"D\"], [\"b\", \"D\"]], \"passed\": true}, {\"check\": \"input order kept\", \"actual\": [[\"m\", \"C\"], [\"k\", \"B\"], [\"a\", \"A\"]], \"expected\": [[\"m\", \"C\"], [\"k\", \"B\"], [\"a\", \"A\"]], \"passed\": true}, {\"check\": \"empty\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"dead stock\", \"actual\": [[\"a\", \"A\"], [\"b\", \"D\"]], \"expected\": [[\"a\", \"A\"], [\"b\", \"D\"]], \"passed\": true}, {\"check\": \"generated mix 7\", \"actual\": [[\"S28\", \"B\"], [\"S25\", \"A\"], [\"S14\", \"A\"], [\"S01\", \"A\"], [\"S10\", \"D\"], [\"S19\", \"A\"], [\"S17\", \"A\"], [\"S16\", \"A\"]], \"expected\": [[\"S28\", \"A\"], [\"S25\", \"A\"], [\"S14\", \"A\"], [\"S01\", \"C\"], [\"S10\", \"D\"], [\"S19\", \"C\"], [\"S17\", \"A\"], [\"S16\", \"B\"]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.521,"exit_code":1,"observations":[{"actual":[["a","A"],["b","A"],["c","A"]],"check":"crossing sku is A","expected":[["a","A"],["b","A"],["c","B"]],"passed":false},{"actual":[["S24","A"],["S10","A"],["S13","A"],["S21","A"],["S27","A"],["S15","A"],["S26","A"],["S09","A"]],"check":"generated mix 3","expected":[["S24","A"],["S10","C"],["S13","A"],["S21","A"],["S27","C"],["S15","A"],["S26","B"],["S09","A"]],"passed":false},{"actual":[["x","A"],["y","A"],["z","A"]],"check":"tie group straddles 80%","expected":[["x","A"],["y","A"],["z","B"]],"passed":false},{"actual":[["a","D"],["b","D"]],"check":"all zero","expected":[["a","D"],["b","D"]],"passed":true},{"actual":[["m","A"],["k","A"],["a","A"]],"check":"input order kept","expected":[["m","C"],["k","B"],["a","A"]],"passed":false},{"actual":[],"check":"empty","expected":[],"passed":true},{"actual":[["a","A"],["b","D"]],"check":"dead stock","expected":[["a","A"],["b","D"]],"passed":true},{"actual":[["S28","A"],["S25","A"],["S14","A"],["S01","A"],["S10","D"],["S19","A"],["S17","A"],["S16","A"]],"check":"generated mix 7","expected":[["S28","A"],["S25","A"],["S14","A"],["S01","C"],["S10","D"],["S19","C"],["S17","A"],["S16","B"]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"crossing sku is A\", \"actual\": [[\"a\", \"A\"], [\"b\", \"A\"], [\"c\", \"A\"]], \"expected\": [[\"a\", \"A\"], [\"b\", \"A\"], [\"c\", \"B\"]], \"passed\": false}, {\"check\": \"generated mix 3\", \"actual\": [[\"S24\", \"A\"], [\"S10\", \"A\"], [\"S13\", \"A\"], [\"S21\", \"A\"], [\"S27\", \"A\"], [\"S15\", \"A\"], [\"S26\", \"A\"], [\"S09\", \"A\"]], \"expected\": [[\"S24\", \"A\"], [\"S10\", \"C\"], [\"S13\", \"A\"], [\"S21\", \"A\"], [\"S27\", \"C\"], [\"S15\", \"A\"], [\"S26\", \"B\"], [\"S09\", \"A\"]], \"passed\": false}, {\"check\": \"tie group straddles 80%\", \"actual\": [[\"x\", \"A\"], [\"y\", \"A\"], [\"z\", \"A\"]], \"expected\": [[\"x\", \"A\"], [\"y\", \"A\"], [\"z\", \"B\"]], \"passed\": false}, {\"check\": \"all zero\", \"actual\": [[\"a\", \"D\"], [\"b\", \"D\"]], \"expected\": [[\"a\", \"D\"], [\"b\", \"D\"]], \"passed\": true}, {\"check\": \"input order kept\", \"actual\": [[\"m\", \"A\"], [\"k\", \"A\"], [\"a\", \"A\"]], \"expected\": [[\"m\", \"C\"], [\"k\", \"B\"], [\"a\", \"A\"]], \"passed\": false}, {\"check\": \"empty\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"dead stock\", \"actual\": [[\"a\", \"A\"], [\"b\", \"D\"]], \"expected\": [[\"a\", \"A\"], [\"b\", \"D\"]], \"passed\": true}, {\"check\": \"generated mix 7\", \"actual\": [[\"S28\", \"A\"], [\"S25\", \"A\"], [\"S14\", \"A\"], [\"S01\", \"A\"], [\"S10\", \"D\"], [\"S19\", \"A\"], [\"S17\", \"A\"], [\"S16\", \"A\"]], \"expected\": [[\"S28\", \"A\"], [\"S25\", \"A\"], [\"S14\", \"A\"], [\"S01\", \"C\"], [\"S10\", \"D\"], [\"S19\", \"C\"], [\"S17\", \"A\"], [\"S16\", \"B\"]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.743,"exit_code":0,"observations":[{"actual":[["a","A"],["b","A"],["c","B"]],"check":"crossing sku is A","expected":[["a","A"],["b","A"],["c","B"]],"passed":true},{"actual":[["S24","A"],["S10","C"],["S13","A"],["S21","A"],["S27","C"],["S15","A"],["S26","B"],["S09","A"]],"check":"generated mix 3","expected":[["S24","A"],["S10","C"],["S13","A"],["S21","A"],["S27","C"],["S15","A"],["S26","B"],["S09","A"]],"passed":true},{"actual":[["x","A"],["y","A"],["z","B"]],"check":"tie group straddles 80%","expected":[["x","A"],["y","A"],["z","B"]],"passed":true},{"actual":[["a","D"],["b","D"]],"check":"all zero","expected":[["a","D"],["b","D"]],"passed":true},{"actual":[["m","C"],["k","B"],["a","A"]],"check":"input order kept","expected":[["m","C"],["k","B"],["a","A"]],"passed":true},{"actual":[],"check":"empty","expected":[],"passed":true},{"actual":[["a","A"],["b","D"]],"check":"dead stock","expected":[["a","A"],["b","D"]],"passed":true},{"actual":[["S28","A"],["S25","A"],["S14","A"],["S01","C"],["S10","D"],["S19","C"],["S17","A"],["S16","B"]],"check":"generated mix 7","expected":[["S28","A"],["S25","A"],["S14","A"],["S01","C"],["S10","D"],["S19","C"],["S17","A"],["S16","B"]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"crossing sku is A\", \"actual\": [[\"a\", \"A\"], [\"b\", \"A\"], [\"c\", \"B\"]], \"expected\": [[\"a\", \"A\"], [\"b\", \"A\"], [\"c\", \"B\"]], \"passed\": true}, {\"check\": \"generated mix 3\", \"actual\": [[\"S24\", \"A\"], [\"S10\", \"C\"], [\"S13\", \"A\"], [\"S21\", \"A\"], [\"S27\", \"C\"], [\"S15\", \"A\"], [\"S26\", \"B\"], [\"S09\", \"A\"]], \"expected\": [[\"S24\", \"A\"], [\"S10\", \"C\"], [\"S13\", \"A\"], [\"S21\", \"A\"], [\"S27\", \"C\"], [\"S15\", \"A\"], [\"S26\", \"B\"], [\"S09\", \"A\"]], \"passed\": true}, {\"check\": \"tie group straddles 80%\", \"actual\": [[\"x\", \"A\"], [\"y\", \"A\"], [\"z\", \"B\"]], \"expected\": [[\"x\", \"A\"], [\"y\", \"A\"], [\"z\", \"B\"]], \"passed\": true}, {\"check\": \"all zero\", \"actual\": [[\"a\", \"D\"], [\"b\", \"D\"]], \"expected\": [[\"a\", \"D\"], [\"b\", \"D\"]], \"passed\": true}, {\"check\": \"input order kept\", \"actual\": [[\"m\", \"C\"], [\"k\", \"B\"], [\"a\", \"A\"]], \"expected\": [[\"m\", \"C\"], [\"k\", \"B\"], [\"a\", \"A\"]], \"passed\": true}, {\"check\": \"empty\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"dead stock\", \"actual\": [[\"a\", \"A\"], [\"b\", \"D\"]], \"expected\": [[\"a\", \"A\"], [\"b\", \"D\"]], \"passed\": true}, {\"check\": \"generated mix 7\", \"actual\": [[\"S28\", \"A\"], [\"S25\", \"A\"], [\"S14\", \"A\"], [\"S01\", \"C\"], [\"S10\", \"D\"], [\"S19\", \"C\"], [\"S17\", \"A\"], [\"S16\", \"B\"]], \"expected\": [[\"S28\", \"A\"], [\"S25\", \"A\"], [\"S14\", \"A\"], [\"S01\", \"C\"], [\"S10\", \"D\"], [\"S19\", \"C\"], [\"S17\", \"A\"], [\"S16\", \"B\"]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}