FA-94856 / Warehouse slotting and bin packing / Open access
ABC velocity: dead stock hidden in C · case 01
SKUs with zero weekly picks are reported as C instead of D, so dead stock is never flagged for removal.
ROOT CAUSE
The dead-stock test checks for negative picks, which never occur, so zero-pick SKUs fall through to the share bands.
VERIFIED REPAIR
Classify exactly the zero-pick SKUs as D before evaluating share bands.
Unsuccessful approach: Treating one weekly pick as dead stock flags live slow movers for removal.
Case 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.
Why this case matters
Velocity classes drive which SKUs are slotted into forward pick areas.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skus):
total = sum(p for _, p in skus)
order = sorted(skus, key=lambda r: (-r[1], r[0]))
cls = {}
prior = 0
i = 0
while i < len(order):
j = i
while j < len(order) and order[j][1] == order[i][1]:
j += 1
for sku, picks in order[i:j]:
if picks < 0:
cls[sku] = 'D'
elif prior * 100 < 80 * total:
cls[sku] = 'A'
elif prior * 100 < 95 * total:
cls[sku] = 'B'
else:
cls[sku] = 'C'
prior += order[i][1] * (j - i)
i = j
return [[sku, cls[sku]] for sku, _ in skus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 2', [[['S10', 2], ['S19', 1], ['S23', 10]]], [['S10', 'A'], ['S19', 'B'], ['S23', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', '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', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['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 18', [[['S03', 10], ['S14', 10], ['S28', 0], ['S16', 20], ['S23', 60]]], [['S03', 'B'], ['S14', 'B'], ['S28', 'D'], ['S16', 'A'], ['S23', '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']]], ['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 8', [[['S14', 20], ['S06', 5], ['S08', 60], ['S19', 8], ['S29', 5]]], [['S14', 'A'], ['S06', 'B'], ['S08', 'A'], ['S19', 'B'], ['S29', 'B']]], ['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']]]], [['generated mix 37', [[['S01', 8], ['S06', 0], ['S21', 3], ['S18', 0], ['S20', 40]]], [['S01', 'A'], ['S06', 'D'], ['S21', 'B'], ['S18', 'D'], ['S20', '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']]], ['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 19', [[['S08', 8], ['S14', 8]]], [['S08', 'A'], ['S14', 'A']]], ['generated mix 27', [[['S01', 1], ['S27', 5], ['S18', 60], ['S26', 2], ['S24', 1], ['S09', 3], ['S13', 60]]], [['S01', 'C'], ['S27', 'B'], ['S18', 'A'], ['S26', 'C'], ['S24', 'C'], ['S09', 'B'], ['S13', 'A']]]], [['generated mix 49', [[['S15', 3], ['S20', 3], ['S02', 5], ['S19', 40], ['S27', 5], ['S14', 0], ['S21', 10], ['S22', 20]]], [['S15', 'B'], ['S20', 'B'], ['S02', 'B'], ['S19', 'A'], ['S27', 'B'], ['S14', 'D'], ['S21', 'A'], ['S22', 'A']]], ['generated mix 44', [[['S15', 40], ['S04', 1]]], [['S15', 'A'], ['S04', 'C']]], ['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 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 38', [[['S06', 0], ['S04', 8], ['S05', 40], ['S02', 1], ['S26', 20], ['S25', 8], ['S18', 60], ['S22', 1]]], [['S06', 'D'], ['S04', 'B'], ['S05', 'A'], ['S02', 'C'], ['S26', 'A'], ['S25', 'B'], ['S18', 'A'], ['S22', 'C']]]], [['generated mix 73', [[['S28', 20], ['S08', 5], ['S27', 60], ['S04', 10], ['S10', 8], ['S24', 0], ['S11', 60], ['S19', 5]]], [['S28', 'A'], ['S08', 'B'], ['S27', 'A'], ['S04', 'B'], ['S10', 'B'], ['S24', 'D'], ['S11', 'A'], ['S19', 'B']]], ['generated mix 67', [[['S23', 10], ['S06', 20], ['S21', 1], ['S26', 1], ['S03', 0]]], [['S23', 'A'], ['S06', 'A'], ['S21', 'B'], ['S26', 'B'], ['S03', 'D']]], ['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 41', [[['S08', 5], ['S11', 10], ['S03', 60], ['S05', 8], ['S13', 8], ['S27', 0]]], [['S08', 'B'], ['S11', 'A'], ['S03', 'A'], ['S05', 'A'], ['S13', 'A'], ['S27', 'D']]], ['generated mix 49', [[['S15', 3], ['S20', 3], ['S02', 5], ['S19', 40], ['S27', 5], ['S14', 0], ['S21', 10], ['S22', 20]]], [['S15', 'B'], ['S20', 'B'], ['S02', 'B'], ['S19', 'A'], ['S27', 'B'], ['S14', 'D'], ['S21', 'A'], ['S22', 'A']]]]]
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 |
|---|---|---|---|
| dead stock | [['a', 'A'], ['b', 'C']] | [['a', 'A'], ['b', 'D']] | Failed |
| generated mix 2 | [['S10', 'A'], ['S19', 'B'], ['S23', 'A']] | [['S10', 'A'], ['S19', 'B'], ['S23', 'A']] | Passed |
| crossing sku is A | [['a', 'A'], ['b', 'A'], ['c', 'B']] | [['a', 'A'], ['b', 'A'], ['c', 'B']] | Passed |
| all zero | [['a', 'C'], ['b', 'C']] | [['a', 'D'], ['b', 'D']] | Failed |
| input order kept | [['m', 'C'], ['k', 'B'], ['a', 'A']] | [['m', 'C'], ['k', 'B'], ['a', 'A']] | Passed |
| empty | [] | [] | Passed |
| tie group straddles 80% | [['x', 'A'], ['y', 'A'], ['z', 'B']] | [['x', 'A'], ['y', 'A'], ['z', 'B']] | Passed |
| generated mix 7 | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'C'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | Failed |
SHA-256 / 1f0adc53e53fe37317a0f343e8beb9755615cfa786db5fb57fdd8f2bcc9fbc02
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skus):
total = sum(p for _, p in skus)
order = sorted(skus, key=lambda r: (-r[1], r[0]))
cls = {}
prior = 0
i = 0
while i < len(order):
j = i
while j < len(order) and order[j][1] == order[i][1]:
j += 1
for sku, picks in order[i:j]:
if picks <= 1:
cls[sku] = 'D'
elif prior * 100 < 80 * total:
cls[sku] = 'A'
elif prior * 100 < 95 * total:
cls[sku] = 'B'
else:
cls[sku] = 'C'
prior += order[i][1] * (j - i)
i = j
return [[sku, cls[sku]] for sku, _ in skus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 2', [[['S10', 2], ['S19', 1], ['S23', 10]]], [['S10', 'A'], ['S19', 'B'], ['S23', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', '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', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['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 18', [[['S03', 10], ['S14', 10], ['S28', 0], ['S16', 20], ['S23', 60]]], [['S03', 'B'], ['S14', 'B'], ['S28', 'D'], ['S16', 'A'], ['S23', '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']]], ['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 8', [[['S14', 20], ['S06', 5], ['S08', 60], ['S19', 8], ['S29', 5]]], [['S14', 'A'], ['S06', 'B'], ['S08', 'A'], ['S19', 'B'], ['S29', 'B']]], ['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']]]], [['generated mix 37', [[['S01', 8], ['S06', 0], ['S21', 3], ['S18', 0], ['S20', 40]]], [['S01', 'A'], ['S06', 'D'], ['S21', 'B'], ['S18', 'D'], ['S20', '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']]], ['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 19', [[['S08', 8], ['S14', 8]]], [['S08', 'A'], ['S14', 'A']]], ['generated mix 27', [[['S01', 1], ['S27', 5], ['S18', 60], ['S26', 2], ['S24', 1], ['S09', 3], ['S13', 60]]], [['S01', 'C'], ['S27', 'B'], ['S18', 'A'], ['S26', 'C'], ['S24', 'C'], ['S09', 'B'], ['S13', 'A']]]], [['generated mix 49', [[['S15', 3], ['S20', 3], ['S02', 5], ['S19', 40], ['S27', 5], ['S14', 0], ['S21', 10], ['S22', 20]]], [['S15', 'B'], ['S20', 'B'], ['S02', 'B'], ['S19', 'A'], ['S27', 'B'], ['S14', 'D'], ['S21', 'A'], ['S22', 'A']]], ['generated mix 44', [[['S15', 40], ['S04', 1]]], [['S15', 'A'], ['S04', 'C']]], ['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 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 38', [[['S06', 0], ['S04', 8], ['S05', 40], ['S02', 1], ['S26', 20], ['S25', 8], ['S18', 60], ['S22', 1]]], [['S06', 'D'], ['S04', 'B'], ['S05', 'A'], ['S02', 'C'], ['S26', 'A'], ['S25', 'B'], ['S18', 'A'], ['S22', 'C']]]], [['generated mix 73', [[['S28', 20], ['S08', 5], ['S27', 60], ['S04', 10], ['S10', 8], ['S24', 0], ['S11', 60], ['S19', 5]]], [['S28', 'A'], ['S08', 'B'], ['S27', 'A'], ['S04', 'B'], ['S10', 'B'], ['S24', 'D'], ['S11', 'A'], ['S19', 'B']]], ['generated mix 67', [[['S23', 10], ['S06', 20], ['S21', 1], ['S26', 1], ['S03', 0]]], [['S23', 'A'], ['S06', 'A'], ['S21', 'B'], ['S26', 'B'], ['S03', 'D']]], ['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 41', [[['S08', 5], ['S11', 10], ['S03', 60], ['S05', 8], ['S13', 8], ['S27', 0]]], [['S08', 'B'], ['S11', 'A'], ['S03', 'A'], ['S05', 'A'], ['S13', 'A'], ['S27', 'D']]], ['generated mix 49', [[['S15', 3], ['S20', 3], ['S02', 5], ['S19', 40], ['S27', 5], ['S14', 0], ['S21', 10], ['S22', 20]]], [['S15', 'B'], ['S20', 'B'], ['S02', 'B'], ['S19', 'A'], ['S27', 'B'], ['S14', 'D'], ['S21', 'A'], ['S22', 'A']]]]]
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 |
|---|---|---|---|
| dead stock | [['a', 'A'], ['b', 'D']] | [['a', 'A'], ['b', 'D']] | Passed |
| generated mix 2 | [['S10', 'A'], ['S19', 'D'], ['S23', 'A']] | [['S10', 'A'], ['S19', 'B'], ['S23', 'A']] | Failed |
| crossing sku is A | [['a', 'A'], ['b', 'A'], ['c', 'B']] | [['a', 'A'], ['b', 'A'], ['c', 'B']] | Passed |
| all zero | [['a', 'D'], ['b', 'D']] | [['a', 'D'], ['b', 'D']] | Passed |
| input order kept | [['m', 'D'], ['k', 'B'], ['a', 'A']] | [['m', 'C'], ['k', 'B'], ['a', 'A']] | Failed |
| empty | [] | [] | Passed |
| tie group straddles 80% | [['x', 'A'], ['y', 'A'], ['z', 'B']] | [['x', 'A'], ['y', 'A'], ['z', 'B']] | Passed |
| generated mix 7 | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'D'], ['S10', 'D'], ['S19', 'D'], ['S17', 'A'], ['S16', 'B']] | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | Failed |
SHA-256 / bbece1ef136f34f149f5db2b40ad32a3286c0927eced908300a4eb1b112290f4
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skus):
total = sum(p for _, p in skus)
order = sorted(skus, key=lambda r: (-r[1], r[0]))
cls = {}
prior = 0
i = 0
while i < len(order):
j = i
while j < len(order) and order[j][1] == order[i][1]:
j += 1
for sku, picks in order[i:j]:
if picks == 0:
cls[sku] = 'D'
elif prior * 100 < 80 * total:
cls[sku] = 'A'
elif prior * 100 < 95 * total:
cls[sku] = 'B'
else:
cls[sku] = 'C'
prior += order[i][1] * (j - i)
i = j
return [[sku, cls[sku]] for sku, _ in skus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 2', [[['S10', 2], ['S19', 1], ['S23', 10]]], [['S10', 'A'], ['S19', 'B'], ['S23', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', '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', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['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 18', [[['S03', 10], ['S14', 10], ['S28', 0], ['S16', 20], ['S23', 60]]], [['S03', 'B'], ['S14', 'B'], ['S28', 'D'], ['S16', 'A'], ['S23', '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']]], ['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 8', [[['S14', 20], ['S06', 5], ['S08', 60], ['S19', 8], ['S29', 5]]], [['S14', 'A'], ['S06', 'B'], ['S08', 'A'], ['S19', 'B'], ['S29', 'B']]], ['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']]]], [['generated mix 37', [[['S01', 8], ['S06', 0], ['S21', 3], ['S18', 0], ['S20', 40]]], [['S01', 'A'], ['S06', 'D'], ['S21', 'B'], ['S18', 'D'], ['S20', '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']]], ['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 19', [[['S08', 8], ['S14', 8]]], [['S08', 'A'], ['S14', 'A']]], ['generated mix 27', [[['S01', 1], ['S27', 5], ['S18', 60], ['S26', 2], ['S24', 1], ['S09', 3], ['S13', 60]]], [['S01', 'C'], ['S27', 'B'], ['S18', 'A'], ['S26', 'C'], ['S24', 'C'], ['S09', 'B'], ['S13', 'A']]]], [['generated mix 49', [[['S15', 3], ['S20', 3], ['S02', 5], ['S19', 40], ['S27', 5], ['S14', 0], ['S21', 10], ['S22', 20]]], [['S15', 'B'], ['S20', 'B'], ['S02', 'B'], ['S19', 'A'], ['S27', 'B'], ['S14', 'D'], ['S21', 'A'], ['S22', 'A']]], ['generated mix 44', [[['S15', 40], ['S04', 1]]], [['S15', 'A'], ['S04', 'C']]], ['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 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 38', [[['S06', 0], ['S04', 8], ['S05', 40], ['S02', 1], ['S26', 20], ['S25', 8], ['S18', 60], ['S22', 1]]], [['S06', 'D'], ['S04', 'B'], ['S05', 'A'], ['S02', 'C'], ['S26', 'A'], ['S25', 'B'], ['S18', 'A'], ['S22', 'C']]]], [['generated mix 73', [[['S28', 20], ['S08', 5], ['S27', 60], ['S04', 10], ['S10', 8], ['S24', 0], ['S11', 60], ['S19', 5]]], [['S28', 'A'], ['S08', 'B'], ['S27', 'A'], ['S04', 'B'], ['S10', 'B'], ['S24', 'D'], ['S11', 'A'], ['S19', 'B']]], ['generated mix 67', [[['S23', 10], ['S06', 20], ['S21', 1], ['S26', 1], ['S03', 0]]], [['S23', 'A'], ['S06', 'A'], ['S21', 'B'], ['S26', 'B'], ['S03', 'D']]], ['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 41', [[['S08', 5], ['S11', 10], ['S03', 60], ['S05', 8], ['S13', 8], ['S27', 0]]], [['S08', 'B'], ['S11', 'A'], ['S03', 'A'], ['S05', 'A'], ['S13', 'A'], ['S27', 'D']]], ['generated mix 49', [[['S15', 3], ['S20', 3], ['S02', 5], ['S19', 40], ['S27', 5], ['S14', 0], ['S21', 10], ['S22', 20]]], [['S15', 'B'], ['S20', 'B'], ['S02', 'B'], ['S19', 'A'], ['S27', 'B'], ['S14', 'D'], ['S21', 'A'], ['S22', 'A']]]]]
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 |
|---|---|---|---|
| dead stock | [['a', 'A'], ['b', 'D']] | [['a', 'A'], ['b', 'D']] | Passed |
| generated mix 2 | [['S10', 'A'], ['S19', 'B'], ['S23', 'A']] | [['S10', 'A'], ['S19', 'B'], ['S23', 'A']] | Passed |
| crossing sku is A | [['a', 'A'], ['b', 'A'], ['c', 'B']] | [['a', 'A'], ['b', 'A'], ['c', 'B']] | Passed |
| all zero | [['a', 'D'], ['b', 'D']] | [['a', 'D'], ['b', 'D']] | Passed |
| input order kept | [['m', 'C'], ['k', 'B'], ['a', 'A']] | [['m', 'C'], ['k', 'B'], ['a', 'A']] | Passed |
| empty | [] | [] | Passed |
| tie group straddles 80% | [['x', 'A'], ['y', 'A'], ['z', 'B']] | [['x', 'A'], ['y', 'A'], ['z', 'B']] | Passed |
| generated mix 7 | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | Passed |
SHA-256 / 7ed6c9baeaadcba9c6c043cfb253831e14c81075522e874b874ebb90a103aad6
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:08.294449+00:00.
Case digest / 3fdef6ca845a994e161c51bba8ed0445e027f4ba5e2c7c39cec3d7f5840386ba