{"abstract":"The reported shortfall equals the quantity actually allocated, so fully covered demand shows a shortage.","category":"Warehouse slotting and bin packing","checks":8,"contract":"pallets [[license_plate, received_day, qty]]; need units. Order pallets by received_day then plate. Pass 1 takes whole pallets (qty > 0) whose qty fits the remaining need, oldest first, skipping ones that are too large. Pass 2 takes partial quantity from remaining pallets oldest first. Return [[[plate, qty] in pick order], shortfall].","evaluation_group":"w2-warehouse-slotting-reserve-allocation","failed_approach":"Subtracting total stock from need goes negative when stock exceeds demand.","family":"w2-warehouse-slotting-reserve-allocation-shortfall-report","id":"FA-95106","implementations":{"attempt":{"sha256":"f9cf45880be651b8ed823574607d4e3e21f5e7fef042463bb6eae7aa63fcd951","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(pallets, need):\n    order = sorted(pallets, key=lambda p: (p[1], p[0]))\n    rem = need\n    alloc = []\n    taken = set()\n    for lp, day, q in order:\n        if 0 < q <= rem:\n            alloc.append([lp, q])\n            taken.add(lp)\n            rem -= q\n    for lp, day, q in order:\n        if rem == 0:\n            break\n        if lp in taken:\n            continue\n        t = min(q, rem)\n        if t > 0:\n            alloc.append([lp, t])\n            rem -= t\n    return [alloc, need - sum(q for _, _, q in pallets)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['clean-out skip big', [[['A', 1, 50], ['B', 2, 20], ['C', 3, 10]], 30], [[['B', 20], ['C', 10]], 0]], ['partial oldest', [[['A', 1, 50], ['B', 2, 60]], 30], [[['A', 30]], 0]], ['exact whole', [[['A', 1, 30]], 30], [[['A', 30]], 0]], ['equal qty pallets', [[['A', 1, 20], ['B', 2, 20], ['C', 3, 40]], 50], [[['A', 20], ['B', 20], ['C', 10]], 0]], ['shortfall', [[['A', 1, 10]], 25], [[['A', 10]], 15]], ['generated mix 7', [[['P0', 8, 20], ['P1', 8, 30], ['P2', 3, 10], ['P3', 5, 20]], 60], [[['P2', 10], ['P3', 20], ['P0', 20], ['P1', 10]], 0]], ['generated mix 15', [[['P0', 5, 48], ['P1', 3, 48], ['P2', 1, 20], ['P3', 5, 40]], 20], [[['P2', 20]], 0]], ['generated mix 23', [[['P0', 3, 40], ['P1', 2, 20], ['P2', 3, 10], ['P3', 5, 0]], 10], [[['P2', 10]], 0]]], [['generated mix 3', [[['P0', 1, 48], ['P1', 1, 48], ['P2', 1, 40], ['P3', 1, 20]], 40], [[['P2', 40]], 0]], ['generated mix 4', [[['P0', 3, 0], ['P1', 3, 20], ['P2', 5, 40], ['P3', 8, 30]], 20], [[['P1', 20]], 0]], ['shortfall', [[['A', 1, 10]], 25], [[['A', 10]], 15]], ['zero need', [[['A', 1, 10]], 0], [[], 0]], ['exact whole', [[['A', 1, 30]], 30], [[['A', 30]], 0]], ['generated mix 11', [[['P0', 5, 20], ['P1', 3, 40], ['P2', 3, 0], ['P3', 3, 20], ['P4', 3, 0], ['P5', 1, 20]], 20], [[['P5', 20]], 0]], ['generated mix 19', [[['P0', 5, 10], ['P1', 3, 40], ['P2', 1, 30], ['P3', 3, 30]], 60], [[['P2', 30], ['P3', 30]], 0]], ['generated mix 27', [[['P0', 8, 20], ['P1', 5, 48], ['P2', 5, 20]], 90], [[['P1', 48], ['P2', 20], ['P0', 20]], 2]]], [['generated mix 10', [[['P0', 3, 10], ['P1', 2, 10], ['P2', 1, 30], ['P3', 3, 30]], 60], [[['P2', 30], ['P1', 10], ['P0', 10], ['P3', 10]], 0]], ['generated mix 9', [[['P0', 1, 20], ['P1', 2, 48], ['P2', 2, 20]], 20], [[['P0', 20]], 0]], ['clean-out skip big', [[['A', 1, 50], ['B', 2, 20], ['C', 3, 10]], 30], [[['B', 20], ['C', 10]], 0]], ['partial oldest', [[['A', 1, 50], ['B', 2, 60]], 30], [[['A', 30]], 0]], ['equal qty pallets', [[['A', 1, 20], ['B', 2, 20], ['C', 3, 40]], 50], [[['A', 20], ['B', 20], ['C', 10]], 0]], ['generated mix 22', [[['P0', 3, 0], ['P1', 3, 40], ['P2', 3, 20]], 10], [[['P1', 10]], 0]], ['generated mix 30', [[['P0', 1, 20], ['P1', 5, 40], ['P2', 3, 48], ['P3', 2, 10], ['P4', 1, 48], ['P5', 2, 20]], 90], [[['P0', 20], ['P4', 48], ['P3', 10], ['P5', 12]], 0]], ['generated mix 38', [[['P0', 3, 40], ['P1', 3, 20], ['P2', 2, 20], ['P3', 5, 10], ['P4', 2, 20]], 60], [[['P2', 20], ['P4', 20], ['P1', 20]], 0]]], [['generated mix 17', [[['P0', 3, 0]], 50], [[], 50]], ['generated mix 15', [[['P0', 5, 48], ['P1', 3, 48], ['P2', 1, 20], ['P3', 5, 40]], 20], [[['P2', 20]], 0]], ['shortfall', [[['A', 1, 10]], 25], [[['A', 10]], 15]], ['zero need', [[['A', 1, 10]], 0], [[], 0]], ['exact whole', [[['A', 1, 30]], 30], [[['A', 30]], 0]], ['generated mix 33', [[['P0', 3, 48]], 10], [[['P0', 10]], 0]], ['generated mix 41', [[['P0', 3, 0], ['P1', 3, 30], ['P2', 1, 48], ['P3', 3, 30], ['P4', 3, 20]], 20], [[['P4', 20]], 0]], ['generated mix 49', [[['P0', 3, 20], ['P1', 1, 0], ['P2', 8, 40], ['P3', 5, 20], ['P4', 5, 30], ['P5', 3, 40]], 25], [[['P0', 20], ['P5', 5]], 0]]], [['generated mix 24', [[['P0', 3, 20], ['P1', 3, 20], ['P2', 2, 20], ['P3', 5, 20], ['P4', 3, 30]], 10], [[['P2', 10]], 0]], ['generated mix 22', [[['P0', 3, 0], ['P1', 3, 40], ['P2', 3, 20]], 10], [[['P1', 10]], 0]], ['clean-out skip big', [[['A', 1, 50], ['B', 2, 20], ['C', 3, 10]], 30], [[['B', 20], ['C', 10]], 0]], ['partial oldest', [[['A', 1, 50], ['B', 2, 60]], 30], [[['A', 30]], 0]], ['equal qty pallets', [[['A', 1, 20], ['B', 2, 20], ['C', 3, 40]], 50], [[['A', 20], ['B', 20], ['C', 10]], 0]], ['generated mix 44', [[['P0', 3, 20]], 10], [[['P0', 10]], 0]], ['generated mix 52', [[['P0', 3, 30], ['P1', 3, 10], ['P2', 3, 0], ['P3', 8, 10], ['P4', 3, 20]], 30], [[['P0', 30]], 0]], ['generated mix 60', [[['P0', 3, 20], ['P1', 5, 20], ['P2', 3, 20], ['P3', 3, 30]], 30], [[['P0', 20], ['P2', 10]], 0]]]]\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":"bb1fb1bdb99c760204c403baeb326133f5d5cd8d6b3c7579310012c3d4709175","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(pallets, need):\n    order = sorted(pallets, key=lambda p: (p[1], p[0]))\n    rem = need\n    alloc = []\n    taken = set()\n    for lp, day, q in order:\n        if 0 < q <= rem:\n            alloc.append([lp, q])\n            taken.add(lp)\n            rem -= q\n    for lp, day, q in order:\n        if rem == 0:\n            break\n        if lp in taken:\n            continue\n        t = min(q, rem)\n        if t > 0:\n            alloc.append([lp, t])\n            rem -= t\n    return [alloc, need - rem]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['clean-out skip big', [[['A', 1, 50], ['B', 2, 20], ['C', 3, 10]], 30], [[['B', 20], ['C', 10]], 0]], ['partial oldest', [[['A', 1, 50], ['B', 2, 60]], 30], [[['A', 30]], 0]], ['exact whole', [[['A', 1, 30]], 30], [[['A', 30]], 0]], ['equal qty pallets', [[['A', 1, 20], ['B', 2, 20], ['C', 3, 40]], 50], [[['A', 20], ['B', 20], ['C', 10]], 0]], ['shortfall', [[['A', 1, 10]], 25], [[['A', 10]], 15]], ['generated mix 7', [[['P0', 8, 20], ['P1', 8, 30], ['P2', 3, 10], ['P3', 5, 20]], 60], [[['P2', 10], ['P3', 20], ['P0', 20], ['P1', 10]], 0]], ['generated mix 15', [[['P0', 5, 48], ['P1', 3, 48], ['P2', 1, 20], ['P3', 5, 40]], 20], [[['P2', 20]], 0]], ['generated mix 23', [[['P0', 3, 40], ['P1', 2, 20], ['P2', 3, 10], ['P3', 5, 0]], 10], [[['P2', 10]], 0]]], [['generated mix 3', [[['P0', 1, 48], ['P1', 1, 48], ['P2', 1, 40], ['P3', 1, 20]], 40], [[['P2', 40]], 0]], ['generated mix 4', [[['P0', 3, 0], ['P1', 3, 20], ['P2', 5, 40], ['P3', 8, 30]], 20], [[['P1', 20]], 0]], ['shortfall', [[['A', 1, 10]], 25], [[['A', 10]], 15]], ['zero need', [[['A', 1, 10]], 0], [[], 0]], ['exact whole', [[['A', 1, 30]], 30], [[['A', 30]], 0]], ['generated mix 11', [[['P0', 5, 20], ['P1', 3, 40], ['P2', 3, 0], ['P3', 3, 20], ['P4', 3, 0], ['P5', 1, 20]], 20], [[['P5', 20]], 0]], ['generated mix 19', [[['P0', 5, 10], ['P1', 3, 40], ['P2', 1, 30], ['P3', 3, 30]], 60], [[['P2', 30], ['P3', 30]], 0]], ['generated mix 27', [[['P0', 8, 20], ['P1', 5, 48], ['P2', 5, 20]], 90], [[['P1', 48], ['P2', 20], ['P0', 20]], 2]]], [['generated mix 10', [[['P0', 3, 10], ['P1', 2, 10], ['P2', 1, 30], ['P3', 3, 30]], 60], [[['P2', 30], ['P1', 10], ['P0', 10], ['P3', 10]], 0]], ['generated mix 9', [[['P0', 1, 20], ['P1', 2, 48], ['P2', 2, 20]], 20], [[['P0', 20]], 0]], ['clean-out skip big', [[['A', 1, 50], ['B', 2, 20], ['C', 3, 10]], 30], [[['B', 20], ['C', 10]], 0]], ['partial oldest', [[['A', 1, 50], ['B', 2, 60]], 30], [[['A', 30]], 0]], ['equal qty pallets', [[['A', 1, 20], ['B', 2, 20], ['C', 3, 40]], 50], [[['A', 20], ['B', 20], ['C', 10]], 0]], ['generated mix 22', [[['P0', 3, 0], ['P1', 3, 40], ['P2', 3, 20]], 10], [[['P1', 10]], 0]], ['generated mix 30', [[['P0', 1, 20], ['P1', 5, 40], ['P2', 3, 48], ['P3', 2, 10], ['P4', 1, 48], ['P5', 2, 20]], 90], [[['P0', 20], ['P4', 48], ['P3', 10], ['P5', 12]], 0]], ['generated mix 38', [[['P0', 3, 40], ['P1', 3, 20], ['P2', 2, 20], ['P3', 5, 10], ['P4', 2, 20]], 60], [[['P2', 20], ['P4', 20], ['P1', 20]], 0]]], [['generated mix 17', [[['P0', 3, 0]], 50], [[], 50]], ['generated mix 15', [[['P0', 5, 48], ['P1', 3, 48], ['P2', 1, 20], ['P3', 5, 40]], 20], [[['P2', 20]], 0]], ['shortfall', [[['A', 1, 10]], 25], [[['A', 10]], 15]], ['zero need', [[['A', 1, 10]], 0], [[], 0]], ['exact whole', [[['A', 1, 30]], 30], [[['A', 30]], 0]], ['generated mix 33', [[['P0', 3, 48]], 10], [[['P0', 10]], 0]], ['generated mix 41', [[['P0', 3, 0], ['P1', 3, 30], ['P2', 1, 48], ['P3', 3, 30], ['P4', 3, 20]], 20], [[['P4', 20]], 0]], ['generated mix 49', [[['P0', 3, 20], ['P1', 1, 0], ['P2', 8, 40], ['P3', 5, 20], ['P4', 5, 30], ['P5', 3, 40]], 25], [[['P0', 20], ['P5', 5]], 0]]], [['generated mix 24', [[['P0', 3, 20], ['P1', 3, 20], ['P2', 2, 20], ['P3', 5, 20], ['P4', 3, 30]], 10], [[['P2', 10]], 0]], ['generated mix 22', [[['P0', 3, 0], ['P1', 3, 40], ['P2', 3, 20]], 10], [[['P1', 10]], 0]], ['clean-out skip big', [[['A', 1, 50], ['B', 2, 20], ['C', 3, 10]], 30], [[['B', 20], ['C', 10]], 0]], ['partial oldest', [[['A', 1, 50], ['B', 2, 60]], 30], [[['A', 30]], 0]], ['equal qty pallets', [[['A', 1, 20], ['B', 2, 20], ['C', 3, 40]], 50], [[['A', 20], ['B', 20], ['C', 10]], 0]], ['generated mix 44', [[['P0', 3, 20]], 10], [[['P0', 10]], 0]], ['generated mix 52', [[['P0', 3, 30], ['P1', 3, 10], ['P2', 3, 0], ['P3', 8, 10], ['P4', 3, 20]], 30], [[['P0', 30]], 0]], ['generated mix 60', [[['P0', 3, 20], ['P1', 5, 20], ['P2', 3, 20], ['P3', 3, 30]], 30], [[['P0', 20], ['P2', 10]], 0]]]]\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":"d4c9379b316303ab861094f5abdac945a6ed982eaabbc3970781dadc1cd90fd1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(pallets, need):\n    order = sorted(pallets, key=lambda p: (p[1], p[0]))\n    rem = need\n    alloc = []\n    taken = set()\n    for lp, day, q in order:\n        if 0 < q <= rem:\n            alloc.append([lp, q])\n            taken.add(lp)\n            rem -= q\n    for lp, day, q in order:\n        if rem == 0:\n            break\n        if lp in taken:\n            continue\n        t = min(q, rem)\n        if t > 0:\n            alloc.append([lp, t])\n            rem -= t\n    return [alloc, rem]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['clean-out skip big', [[['A', 1, 50], ['B', 2, 20], ['C', 3, 10]], 30], [[['B', 20], ['C', 10]], 0]], ['partial oldest', [[['A', 1, 50], ['B', 2, 60]], 30], [[['A', 30]], 0]], ['exact whole', [[['A', 1, 30]], 30], [[['A', 30]], 0]], ['equal qty pallets', [[['A', 1, 20], ['B', 2, 20], ['C', 3, 40]], 50], [[['A', 20], ['B', 20], ['C', 10]], 0]], ['shortfall', [[['A', 1, 10]], 25], [[['A', 10]], 15]], ['generated mix 7', [[['P0', 8, 20], ['P1', 8, 30], ['P2', 3, 10], ['P3', 5, 20]], 60], [[['P2', 10], ['P3', 20], ['P0', 20], ['P1', 10]], 0]], ['generated mix 15', [[['P0', 5, 48], ['P1', 3, 48], ['P2', 1, 20], ['P3', 5, 40]], 20], [[['P2', 20]], 0]], ['generated mix 23', [[['P0', 3, 40], ['P1', 2, 20], ['P2', 3, 10], ['P3', 5, 0]], 10], [[['P2', 10]], 0]]], [['generated mix 3', [[['P0', 1, 48], ['P1', 1, 48], ['P2', 1, 40], ['P3', 1, 20]], 40], [[['P2', 40]], 0]], ['generated mix 4', [[['P0', 3, 0], ['P1', 3, 20], ['P2', 5, 40], ['P3', 8, 30]], 20], [[['P1', 20]], 0]], ['shortfall', [[['A', 1, 10]], 25], [[['A', 10]], 15]], ['zero need', [[['A', 1, 10]], 0], [[], 0]], ['exact whole', [[['A', 1, 30]], 30], [[['A', 30]], 0]], ['generated mix 11', [[['P0', 5, 20], ['P1', 3, 40], ['P2', 3, 0], ['P3', 3, 20], ['P4', 3, 0], ['P5', 1, 20]], 20], [[['P5', 20]], 0]], ['generated mix 19', [[['P0', 5, 10], ['P1', 3, 40], ['P2', 1, 30], ['P3', 3, 30]], 60], [[['P2', 30], ['P3', 30]], 0]], ['generated mix 27', [[['P0', 8, 20], ['P1', 5, 48], ['P2', 5, 20]], 90], [[['P1', 48], ['P2', 20], ['P0', 20]], 2]]], [['generated mix 10', [[['P0', 3, 10], ['P1', 2, 10], ['P2', 1, 30], ['P3', 3, 30]], 60], [[['P2', 30], ['P1', 10], ['P0', 10], ['P3', 10]], 0]], ['generated mix 9', [[['P0', 1, 20], ['P1', 2, 48], ['P2', 2, 20]], 20], [[['P0', 20]], 0]], ['clean-out skip big', [[['A', 1, 50], ['B', 2, 20], ['C', 3, 10]], 30], [[['B', 20], ['C', 10]], 0]], ['partial oldest', [[['A', 1, 50], ['B', 2, 60]], 30], [[['A', 30]], 0]], ['equal qty pallets', [[['A', 1, 20], ['B', 2, 20], ['C', 3, 40]], 50], [[['A', 20], ['B', 20], ['C', 10]], 0]], ['generated mix 22', [[['P0', 3, 0], ['P1', 3, 40], ['P2', 3, 20]], 10], [[['P1', 10]], 0]], ['generated mix 30', [[['P0', 1, 20], ['P1', 5, 40], ['P2', 3, 48], ['P3', 2, 10], ['P4', 1, 48], ['P5', 2, 20]], 90], [[['P0', 20], ['P4', 48], ['P3', 10], ['P5', 12]], 0]], ['generated mix 38', [[['P0', 3, 40], ['P1', 3, 20], ['P2', 2, 20], ['P3', 5, 10], ['P4', 2, 20]], 60], [[['P2', 20], ['P4', 20], ['P1', 20]], 0]]], [['generated mix 17', [[['P0', 3, 0]], 50], [[], 50]], ['generated mix 15', [[['P0', 5, 48], ['P1', 3, 48], ['P2', 1, 20], ['P3', 5, 40]], 20], [[['P2', 20]], 0]], ['shortfall', [[['A', 1, 10]], 25], [[['A', 10]], 15]], ['zero need', [[['A', 1, 10]], 0], [[], 0]], ['exact whole', [[['A', 1, 30]], 30], [[['A', 30]], 0]], ['generated mix 33', [[['P0', 3, 48]], 10], [[['P0', 10]], 0]], ['generated mix 41', [[['P0', 3, 0], ['P1', 3, 30], ['P2', 1, 48], ['P3', 3, 30], ['P4', 3, 20]], 20], [[['P4', 20]], 0]], ['generated mix 49', [[['P0', 3, 20], ['P1', 1, 0], ['P2', 8, 40], ['P3', 5, 20], ['P4', 5, 30], ['P5', 3, 40]], 25], [[['P0', 20], ['P5', 5]], 0]]], [['generated mix 24', [[['P0', 3, 20], ['P1', 3, 20], ['P2', 2, 20], ['P3', 5, 20], ['P4', 3, 30]], 10], [[['P2', 10]], 0]], ['generated mix 22', [[['P0', 3, 0], ['P1', 3, 40], ['P2', 3, 20]], 10], [[['P1', 10]], 0]], ['clean-out skip big', [[['A', 1, 50], ['B', 2, 20], ['C', 3, 10]], 30], [[['B', 20], ['C', 10]], 0]], ['partial oldest', [[['A', 1, 50], ['B', 2, 60]], 30], [[['A', 30]], 0]], ['equal qty pallets', [[['A', 1, 20], ['B', 2, 20], ['C', 3, 40]], 50], [[['A', 20], ['B', 20], ['C', 10]], 0]], ['generated mix 44', [[['P0', 3, 20]], 10], [[['P0', 10]], 0]], ['generated mix 52', [[['P0', 3, 30], ['P1', 3, 10], ['P2', 3, 0], ['P3', 8, 10], ['P4', 3, 20]], 30], [[['P0', 30]], 0]], ['generated mix 60', [[['P0', 3, 20], ['P1', 5, 20], ['P2', 3, 20], ['P3', 3, 30]], 30], [[['P0', 20], ['P2', 10]], 0]]]]\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 clean-out policy; no lot, expiry, or location travel considerations. 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-reserve-allocation-shortfall-report","generated_at":"2026-09-29T14:52:10.615321+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Reserve allocation decides which pallets feed replenishment and order picks.","repair":"Report the need still unallocated after both passes.","root_cause":"The shortfall expression subtracts the remaining need from the original need, yielding the allocated amount.","sha256":"7e69c18f3ca73fa8db9881deeee2d20104803fea2b1756c14f8acada437aa7ba","title":"Reserve allocation: shortfall from wrong basis · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":37.971,"exit_code":1,"observations":[{"actual":[[["B",20],["C",10]],-50],"check":"clean-out skip big","expected":[[["B",20],["C",10]],0],"passed":false},{"actual":[[["A",30]],-80],"check":"partial oldest","expected":[[["A",30]],0],"passed":false},{"actual":[[["A",30]],0],"check":"exact whole","expected":[[["A",30]],0],"passed":true},{"actual":[[["A",20],["B",20],["C",10]],-30],"check":"equal qty pallets","expected":[[["A",20],["B",20],["C",10]],0],"passed":false},{"actual":[[["A",10]],15],"check":"shortfall","expected":[[["A",10]],15],"passed":true},{"actual":[[["P2",10],["P3",20],["P0",20],["P1",10]],-20],"check":"generated mix 7","expected":[[["P2",10],["P3",20],["P0",20],["P1",10]],0],"passed":false},{"actual":[[["P2",20]],-136],"check":"generated mix 15","expected":[[["P2",20]],0],"passed":false},{"actual":[[["P2",10]],-60],"check":"generated mix 23","expected":[[["P2",10]],0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"clean-out skip big\", \"actual\": [[[\"B\", 20], [\"C\", 10]], -50], \"expected\": [[[\"B\", 20], [\"C\", 10]], 0], \"passed\": false}, {\"check\": \"partial oldest\", \"actual\": [[[\"A\", 30]], -80], \"expected\": [[[\"A\", 30]], 0], \"passed\": false}, {\"check\": \"exact whole\", \"actual\": [[[\"A\", 30]], 0], \"expected\": [[[\"A\", 30]], 0], \"passed\": true}, {\"check\": \"equal qty pallets\", \"actual\": [[[\"A\", 20], [\"B\", 20], [\"C\", 10]], -30], \"expected\": [[[\"A\", 20], [\"B\", 20], [\"C\", 10]], 0], \"passed\": false}, {\"check\": \"shortfall\", \"actual\": [[[\"A\", 10]], 15], \"expected\": [[[\"A\", 10]], 15], \"passed\": true}, {\"check\": \"generated mix 7\", \"actual\": [[[\"P2\", 10], [\"P3\", 20], [\"P0\", 20], [\"P1\", 10]], -20], \"expected\": [[[\"P2\", 10], [\"P3\", 20], [\"P0\", 20], [\"P1\", 10]], 0], \"passed\": false}, {\"check\": \"generated mix 15\", \"actual\": [[[\"P2\", 20]], -136], \"expected\": [[[\"P2\", 20]], 0], \"passed\": false}, {\"check\": \"generated mix 23\", \"actual\": [[[\"P2\", 10]], -60], \"expected\": [[[\"P2\", 10]], 0], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.468,"exit_code":1,"observations":[{"actual":[[["B",20],["C",10]],30],"check":"clean-out skip big","expected":[[["B",20],["C",10]],0],"passed":false},{"actual":[[["A",30]],30],"check":"partial oldest","expected":[[["A",30]],0],"passed":false},{"actual":[[["A",30]],30],"check":"exact whole","expected":[[["A",30]],0],"passed":false},{"actual":[[["A",20],["B",20],["C",10]],50],"check":"equal qty pallets","expected":[[["A",20],["B",20],["C",10]],0],"passed":false},{"actual":[[["A",10]],10],"check":"shortfall","expected":[[["A",10]],15],"passed":false},{"actual":[[["P2",10],["P3",20],["P0",20],["P1",10]],60],"check":"generated mix 7","expected":[[["P2",10],["P3",20],["P0",20],["P1",10]],0],"passed":false},{"actual":[[["P2",20]],20],"check":"generated mix 15","expected":[[["P2",20]],0],"passed":false},{"actual":[[["P2",10]],10],"check":"generated mix 23","expected":[[["P2",10]],0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"clean-out skip big\", \"actual\": [[[\"B\", 20], [\"C\", 10]], 30], \"expected\": [[[\"B\", 20], [\"C\", 10]], 0], \"passed\": false}, {\"check\": \"partial oldest\", \"actual\": [[[\"A\", 30]], 30], \"expected\": [[[\"A\", 30]], 0], \"passed\": false}, {\"check\": \"exact whole\", \"actual\": [[[\"A\", 30]], 30], \"expected\": [[[\"A\", 30]], 0], \"passed\": false}, {\"check\": \"equal qty pallets\", \"actual\": [[[\"A\", 20], [\"B\", 20], [\"C\", 10]], 50], \"expected\": [[[\"A\", 20], [\"B\", 20], [\"C\", 10]], 0], \"passed\": false}, {\"check\": \"shortfall\", \"actual\": [[[\"A\", 10]], 10], \"expected\": [[[\"A\", 10]], 15], \"passed\": false}, {\"check\": \"generated mix 7\", \"actual\": [[[\"P2\", 10], [\"P3\", 20], [\"P0\", 20], [\"P1\", 10]], 60], \"expected\": [[[\"P2\", 10], [\"P3\", 20], [\"P0\", 20], [\"P1\", 10]], 0], \"passed\": false}, {\"check\": \"generated mix 15\", \"actual\": [[[\"P2\", 20]], 20], \"expected\": [[[\"P2\", 20]], 0], \"passed\": false}, {\"check\": \"generated mix 23\", \"actual\": [[[\"P2\", 10]], 10], \"expected\": [[[\"P2\", 10]], 0], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.506,"exit_code":0,"observations":[{"actual":[[["B",20],["C",10]],0],"check":"clean-out skip big","expected":[[["B",20],["C",10]],0],"passed":true},{"actual":[[["A",30]],0],"check":"partial oldest","expected":[[["A",30]],0],"passed":true},{"actual":[[["A",30]],0],"check":"exact whole","expected":[[["A",30]],0],"passed":true},{"actual":[[["A",20],["B",20],["C",10]],0],"check":"equal qty pallets","expected":[[["A",20],["B",20],["C",10]],0],"passed":true},{"actual":[[["A",10]],15],"check":"shortfall","expected":[[["A",10]],15],"passed":true},{"actual":[[["P2",10],["P3",20],["P0",20],["P1",10]],0],"check":"generated mix 7","expected":[[["P2",10],["P3",20],["P0",20],["P1",10]],0],"passed":true},{"actual":[[["P2",20]],0],"check":"generated mix 15","expected":[[["P2",20]],0],"passed":true},{"actual":[[["P2",10]],0],"check":"generated mix 23","expected":[[["P2",10]],0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"clean-out skip big\", \"actual\": [[[\"B\", 20], [\"C\", 10]], 0], \"expected\": [[[\"B\", 20], [\"C\", 10]], 0], \"passed\": true}, {\"check\": \"partial oldest\", \"actual\": [[[\"A\", 30]], 0], \"expected\": [[[\"A\", 30]], 0], \"passed\": true}, {\"check\": \"exact whole\", \"actual\": [[[\"A\", 30]], 0], \"expected\": [[[\"A\", 30]], 0], \"passed\": true}, {\"check\": \"equal qty pallets\", \"actual\": [[[\"A\", 20], [\"B\", 20], [\"C\", 10]], 0], \"expected\": [[[\"A\", 20], [\"B\", 20], [\"C\", 10]], 0], \"passed\": true}, {\"check\": \"shortfall\", \"actual\": [[[\"A\", 10]], 15], \"expected\": [[[\"A\", 10]], 15], \"passed\": true}, {\"check\": \"generated mix 7\", \"actual\": [[[\"P2\", 10], [\"P3\", 20], [\"P0\", 20], [\"P1\", 10]], 0], \"expected\": [[[\"P2\", 10], [\"P3\", 20], [\"P0\", 20], [\"P1\", 10]], 0], \"passed\": true}, {\"check\": \"generated mix 15\", \"actual\": [[[\"P2\", 20]], 0], \"expected\": [[[\"P2\", 20]], 0], \"passed\": true}, {\"check\": \"generated mix 23\", \"actual\": [[[\"P2\", 10]], 0], \"expected\": [[[\"P2\", 10]], 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}