{"abstract":"Fully consumed layers remain in the layer list with zero quantity.","category":"Inventory cost layering","checks":9,"contract":"Input {layers:[[qty,unit_cost]] oldest first, events:[[\"recv\",qty,unit_cost]|[\"issue\",qty]]}. Issues consume the oldest layer first; an issue larger than on-hand is rejected whole and reported as \"short\"; a receipt at exactly the newest layer cost merges into it; receipts of zero or negative quantity are ignored. Return {cogs:[per-issue cost or \"short\"], layers}.","evaluation_group":"w2-inventory-cost-layering-fifo-perpetual","failed_approach":"Removing emptied layers only at the end of the event loop still leaves empty layers when later events inspect the tail for merging.","family":"w2-inventory-cost-layering-fifo-perpetual-depleted-layer-removal","id":"FA-59866","implementations":{"attempt":{"sha256":"31a7562be54f6ec3d2e2bda70462ef28b2ac1bb96b72653092c62a9d28288d67","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    layers = [list(l) for l in x['layers']]\n    out = []\n    for ev in x['events']:\n        if ev[0] == 'recv':\n            q, c = ev[1], ev[2]\n            if q <= 0:\n                continue\n            if layers and layers[-1][1] == c:\n                layers[-1][0] += q\n            else:\n                layers.append([q, c])\n            continue\n        need = ev[1]\n        onhand = sum(l[0] for l in layers)\n        if need > onhand:\n            out.append('short')\n            continue\n        cost = 0\n        while need > 0:\n            idx = 0\n            take = min(need, layers[idx][0])\n            cost += take * layers[idx][1]\n            layers[idx][0] -= take\n            need -= take\n            if layers[idx][0] == 0 and need > 0:\n                layers.pop(idx)\n            elif layers[idx][0] == 0:\n                layers.append(layers.pop(idx))\n        out.append(cost)\n    return {'cogs': out, 'layers': layers}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 8]]}, {'cogs': [860], 'layers': [[7, 120]]}], ['exact depletion', {'layers': [[4, 50], [1, 70]], 'events': [['issue', 5]]}, {'cogs': [270], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 4], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 13], ['issue', 4], ['recv', 1, 13]]}, {'cogs': [46], 'layers': [[4, 13]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 1, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[2, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 31], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [2, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': []}], ['price decline', {'layers': [[2, 61], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [122], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 1, 10]]}, {'cogs': [20], 'layers': [[3, 20], [1, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 9]]}, {'cogs': [980], 'layers': [[6, 120]]}], ['exact depletion', {'layers': [[4, 50], [2, 70]], 'events': [['issue', 6]]}, {'cogs': [340], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 5], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 14], ['issue', 4], ['recv', 1, 14]]}, {'cogs': [48], 'layers': [[4, 14]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 2, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[3, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 32], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [3, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[1, 9]]}], ['price decline', {'layers': [[2, 62], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [124], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 2, 10]]}, {'cogs': [20], 'layers': [[3, 20], [2, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 7]]}, {'cogs': [740], 'layers': [[8, 120]]}], ['exact depletion', {'layers': [[4, 50], [3, 70]], 'events': [['issue', 7]]}, {'cogs': [410], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 6], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 15], ['issue', 4], ['recv', 1, 15]]}, {'cogs': [50], 'layers': [[4, 15]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 3, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[4, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 33], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [4, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[2, 9]]}], ['price decline', {'layers': [[2, 63], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [126], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 3, 10]]}, {'cogs': [20], 'layers': [[3, 20], [3, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 8]]}, {'cogs': [860], 'layers': [[7, 120]]}], ['exact depletion', {'layers': [[4, 50], [4, 70]], 'events': [['issue', 8]]}, {'cogs': [480], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 7], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 16], ['issue', 4], ['recv', 1, 16]]}, {'cogs': [52], 'layers': [[4, 16]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 4, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[5, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 34], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [5, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[3, 9]]}], ['price decline', {'layers': [[2, 64], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [128], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 4, 10]]}, {'cogs': [20], 'layers': [[3, 20], [4, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 9]]}, {'cogs': [980], 'layers': [[6, 120]]}], ['exact depletion', {'layers': [[4, 50], [5, 70]], 'events': [['issue', 9]]}, {'cogs': [550], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 8], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 17], ['issue', 4], ['recv', 1, 17]]}, {'cogs': [54], 'layers': [[4, 17]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 5, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[6, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 35], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [6, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[4, 9]]}], ['price decline', {'layers': [[2, 65], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [130], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 5, 10]]}, {'cogs': [20], 'layers': [[3, 20], [5, 10]]}]]]\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":"051e0b7e4b20e1a55efd273fefc09dec01a565726baf36e51a8ea00cace5e520","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    layers = [list(l) for l in x['layers']]\n    out = []\n    for ev in x['events']:\n        if ev[0] == 'recv':\n            q, c = ev[1], ev[2]\n            if q <= 0:\n                continue\n            if layers and layers[-1][1] == c:\n                layers[-1][0] += q\n            else:\n                layers.append([q, c])\n            continue\n        need = ev[1]\n        onhand = sum(l[0] for l in layers)\n        if need > onhand:\n            out.append('short')\n            continue\n        cost = 0\n        while need > 0:\n            idx = 0\n            take = min(need, layers[idx][0])\n            cost += take * layers[idx][1]\n            layers[idx][0] -= take\n            need -= take\n            if layers[idx][0] == 0 and need == 0:\n                layers.pop(idx)\n            elif layers[idx][0] == 0:\n                layers.append(layers.pop(idx))\n        out.append(cost)\n    return {'cogs': out, 'layers': layers}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 8]]}, {'cogs': [860], 'layers': [[7, 120]]}], ['exact depletion', {'layers': [[4, 50], [1, 70]], 'events': [['issue', 5]]}, {'cogs': [270], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 4], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 13], ['issue', 4], ['recv', 1, 13]]}, {'cogs': [46], 'layers': [[4, 13]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 1, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[2, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 31], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [2, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': []}], ['price decline', {'layers': [[2, 61], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [122], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 1, 10]]}, {'cogs': [20], 'layers': [[3, 20], [1, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 9]]}, {'cogs': [980], 'layers': [[6, 120]]}], ['exact depletion', {'layers': [[4, 50], [2, 70]], 'events': [['issue', 6]]}, {'cogs': [340], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 5], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 14], ['issue', 4], ['recv', 1, 14]]}, {'cogs': [48], 'layers': [[4, 14]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 2, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[3, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 32], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [3, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[1, 9]]}], ['price decline', {'layers': [[2, 62], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [124], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 2, 10]]}, {'cogs': [20], 'layers': [[3, 20], [2, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 7]]}, {'cogs': [740], 'layers': [[8, 120]]}], ['exact depletion', {'layers': [[4, 50], [3, 70]], 'events': [['issue', 7]]}, {'cogs': [410], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 6], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 15], ['issue', 4], ['recv', 1, 15]]}, {'cogs': [50], 'layers': [[4, 15]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 3, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[4, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 33], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [4, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[2, 9]]}], ['price decline', {'layers': [[2, 63], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [126], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 3, 10]]}, {'cogs': [20], 'layers': [[3, 20], [3, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 8]]}, {'cogs': [860], 'layers': [[7, 120]]}], ['exact depletion', {'layers': [[4, 50], [4, 70]], 'events': [['issue', 8]]}, {'cogs': [480], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 7], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 16], ['issue', 4], ['recv', 1, 16]]}, {'cogs': [52], 'layers': [[4, 16]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 4, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[5, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 34], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [5, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[3, 9]]}], ['price decline', {'layers': [[2, 64], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [128], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 4, 10]]}, {'cogs': [20], 'layers': [[3, 20], [4, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 9]]}, {'cogs': [980], 'layers': [[6, 120]]}], ['exact depletion', {'layers': [[4, 50], [5, 70]], 'events': [['issue', 9]]}, {'cogs': [550], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 8], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 17], ['issue', 4], ['recv', 1, 17]]}, {'cogs': [54], 'layers': [[4, 17]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 5, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[6, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 35], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [6, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[4, 9]]}], ['price decline', {'layers': [[2, 65], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [130], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 5, 10]]}, {'cogs': [20], 'layers': [[3, 20], [5, 10]]}]]]\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":"5d2f5fa819b4b35b211e93e57fdeabccbc2c003be867d96b702f10267eb1ff6f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    layers = [list(l) for l in x['layers']]\n    out = []\n    for ev in x['events']:\n        if ev[0] == 'recv':\n            q, c = ev[1], ev[2]\n            if q <= 0:\n                continue\n            if layers and layers[-1][1] == c:\n                layers[-1][0] += q\n            else:\n                layers.append([q, c])\n            continue\n        need = ev[1]\n        onhand = sum(l[0] for l in layers)\n        if need > onhand:\n            out.append('short')\n            continue\n        cost = 0\n        while need > 0:\n            idx = 0\n            take = min(need, layers[idx][0])\n            cost += take * layers[idx][1]\n            layers[idx][0] -= take\n            need -= take\n            if layers[idx][0] == 0:\n                layers.pop(idx)\n        out.append(cost)\n    return {'cogs': out, 'layers': layers}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 8]]}, {'cogs': [860], 'layers': [[7, 120]]}], ['exact depletion', {'layers': [[4, 50], [1, 70]], 'events': [['issue', 5]]}, {'cogs': [270], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 4], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 13], ['issue', 4], ['recv', 1, 13]]}, {'cogs': [46], 'layers': [[4, 13]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 1, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[2, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 31], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [2, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': []}], ['price decline', {'layers': [[2, 61], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [122], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 1, 10]]}, {'cogs': [20], 'layers': [[3, 20], [1, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 9]]}, {'cogs': [980], 'layers': [[6, 120]]}], ['exact depletion', {'layers': [[4, 50], [2, 70]], 'events': [['issue', 6]]}, {'cogs': [340], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 5], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 14], ['issue', 4], ['recv', 1, 14]]}, {'cogs': [48], 'layers': [[4, 14]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 2, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[3, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 32], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [3, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[1, 9]]}], ['price decline', {'layers': [[2, 62], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [124], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 2, 10]]}, {'cogs': [20], 'layers': [[3, 20], [2, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 7]]}, {'cogs': [740], 'layers': [[8, 120]]}], ['exact depletion', {'layers': [[4, 50], [3, 70]], 'events': [['issue', 7]]}, {'cogs': [410], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 6], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 15], ['issue', 4], ['recv', 1, 15]]}, {'cogs': [50], 'layers': [[4, 15]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 3, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[4, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 33], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [4, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[2, 9]]}], ['price decline', {'layers': [[2, 63], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [126], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 3, 10]]}, {'cogs': [20], 'layers': [[3, 20], [3, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 8]]}, {'cogs': [860], 'layers': [[7, 120]]}], ['exact depletion', {'layers': [[4, 50], [4, 70]], 'events': [['issue', 8]]}, {'cogs': [480], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 7], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 16], ['issue', 4], ['recv', 1, 16]]}, {'cogs': [52], 'layers': [[4, 16]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 4, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[5, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 34], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [5, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[3, 9]]}], ['price decline', {'layers': [[2, 64], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [128], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 4, 10]]}, {'cogs': [20], 'layers': [[3, 20], [4, 10]]}]], [['span two layers', {'layers': [[5, 100], [10, 120]], 'events': [['issue', 9]]}, {'cogs': [980], 'layers': [[6, 120]]}], ['exact depletion', {'layers': [[4, 50], [5, 70]], 'events': [['issue', 9]]}, {'cogs': [550], 'layers': []}], ['short rejected', {'layers': [[3, 90]], 'events': [['issue', 8], ['issue', 2]]}, {'cogs': ['short', 180], 'layers': [[1, 90]]}], ['receipt then issue', {'layers': [[2, 10]], 'events': [['recv', 5, 17], ['issue', 4], ['recv', 1, 17]]}, {'cogs': [54], 'layers': [[4, 17]]}], ['same cost merge', {'layers': [[2, 40]], 'events': [['recv', 5, 40], ['recv', 3, 41], ['issue', 1]]}, {'cogs': [40], 'layers': [[6, 40], [3, 41]]}], ['zero receipt', {'layers': [[6, 25]], 'events': [['recv', 0, 35], ['issue', 2]]}, {'cogs': [50], 'layers': [[4, 25]]}], ['multi issue', {'layers': [[1, 5], [1, 7], [6, 9]], 'events': [['issue', 1], ['issue', 2], ['issue', 1]]}, {'cogs': [5, 16, 9], 'layers': [[4, 9]]}], ['price decline', {'layers': [[2, 65], [3, 45]], 'events': [['issue', 2]]}, {'cogs': [130], 'layers': [[3, 45]]}], ['exhaust layer then merge', {'layers': [[2, 10], [3, 20]], 'events': [['issue', 2], ['recv', 5, 10]]}, {'cogs': [20], 'layers': [[3, 20], [5, 10]]}]]]\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 bounded teaching model with explicit toy rules; not an accounting-standard implementation. 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-inventory-cost-layering-fifo-perpetual-depleted-layer-removal","generated_at":"2026-09-29T14:46:40.260100+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Inventory valuation and cost-of-goods decisions depend on this rule.","repair":"Pop a layer as soon as its remaining quantity reaches zero.","root_cause":"Layer removal is only performed when the whole issue has been satisfied, so emptied intermediate layers are skipped over but kept.","sha256":"14ec9750cf84cee0567aab5190c1a50eb920f4fa87ccf4c52ebd47f081dcd528","title":"FIFO perpetual issue: depleted layer removal · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.054,"exit_code":1,"observations":[{"actual":{"cogs":[860],"layers":[[7,120]]},"check":"span two layers","expected":{"cogs":[860],"layers":[[7,120]]},"passed":true},{"actual":{"cogs":[270],"layers":[[0,70]]},"check":"exact depletion","expected":{"cogs":[270],"layers":[]},"passed":false},{"actual":{"cogs":["short",180],"layers":[[1,90]]},"check":"short rejected","expected":{"cogs":["short",180],"layers":[[1,90]]},"passed":true},{"actual":{"cogs":[46],"layers":[[4,13]]},"check":"receipt then issue","expected":{"cogs":[46],"layers":[[4,13]]},"passed":true},{"actual":{"cogs":[40],"layers":[[2,40],[3,41]]},"check":"same cost merge","expected":{"cogs":[40],"layers":[[2,40],[3,41]]},"passed":true},{"actual":{"cogs":[50],"layers":[[4,25]]},"check":"zero receipt","expected":{"cogs":[50],"layers":[[4,25]]},"passed":true},{"actual":{"cogs":[5,16,9],"layers":[[0,5],[0,9]]},"check":"multi issue","expected":{"cogs":[5,16,9],"layers":[]},"passed":false},{"actual":{"cogs":[122],"layers":[[3,45],[0,61]]},"check":"price decline","expected":{"cogs":[122],"layers":[[3,45]]},"passed":false},{"actual":{"cogs":[20],"layers":[[3,20],[1,10]]},"check":"exhaust layer then merge","expected":{"cogs":[20],"layers":[[3,20],[1,10]]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"span two layers\", \"actual\": {\"cogs\": [860], \"layers\": [[7, 120]]}, \"expected\": {\"cogs\": [860], \"layers\": [[7, 120]]}, \"passed\": true}, {\"check\": \"exact depletion\", \"actual\": {\"cogs\": [270], \"layers\": [[0, 70]]}, \"expected\": {\"cogs\": [270], \"layers\": []}, \"passed\": false}, {\"check\": \"short rejected\", \"actual\": {\"cogs\": [\"short\", 180], \"layers\": [[1, 90]]}, \"expected\": {\"cogs\": [\"short\", 180], \"layers\": [[1, 90]]}, \"passed\": true}, {\"check\": \"receipt then issue\", \"actual\": {\"cogs\": [46], \"layers\": [[4, 13]]}, \"expected\": {\"cogs\": [46], \"layers\": [[4, 13]]}, \"passed\": true}, {\"check\": \"same cost merge\", \"actual\": {\"cogs\": [40], \"layers\": [[2, 40], [3, 41]]}, \"expected\": {\"cogs\": [40], \"layers\": [[2, 40], [3, 41]]}, \"passed\": true}, {\"check\": \"zero receipt\", \"actual\": {\"cogs\": [50], \"layers\": [[4, 25]]}, \"expected\": {\"cogs\": [50], \"layers\": [[4, 25]]}, \"passed\": true}, {\"check\": \"multi issue\", \"actual\": {\"cogs\": [5, 16, 9], \"layers\": [[0, 5], [0, 9]]}, \"expected\": {\"cogs\": [5, 16, 9], \"layers\": []}, \"passed\": false}, {\"check\": \"price decline\", \"actual\": {\"cogs\": [122], \"layers\": [[3, 45], [0, 61]]}, \"expected\": {\"cogs\": [122], \"layers\": [[3, 45]]}, \"passed\": false}, {\"check\": \"exhaust layer then merge\", \"actual\": {\"cogs\": [20], \"layers\": [[3, 20], [1, 10]]}, \"expected\": {\"cogs\": [20], \"layers\": [[3, 20], [1, 10]]}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.88,"exit_code":1,"observations":[{"actual":{"cogs":[860],"layers":[[7,120],[0,100]]},"check":"span two layers","expected":{"cogs":[860],"layers":[[7,120]]},"passed":false},{"actual":{"cogs":[270],"layers":[[0,50]]},"check":"exact depletion","expected":{"cogs":[270],"layers":[]},"passed":false},{"actual":{"cogs":["short",180],"layers":[[1,90]]},"check":"short rejected","expected":{"cogs":["short",180],"layers":[[1,90]]},"passed":true},{"actual":{"cogs":[46],"layers":[[3,13],[0,10],[1,13]]},"check":"receipt then issue","expected":{"cogs":[46],"layers":[[4,13]]},"passed":false},{"actual":{"cogs":[40],"layers":[[2,40],[3,41]]},"check":"same cost merge","expected":{"cogs":[40],"layers":[[2,40],[3,41]]},"passed":true},{"actual":{"cogs":[50],"layers":[[4,25]]},"check":"zero receipt","expected":{"cogs":[50],"layers":[[4,25]]},"passed":true},{"actual":{"cogs":[5,16,9],"layers":[[0,7]]},"check":"multi issue","expected":{"cogs":[5,16,9],"layers":[]},"passed":false},{"actual":{"cogs":[122],"layers":[[3,45]]},"check":"price decline","expected":{"cogs":[122],"layers":[[3,45]]},"passed":true},{"actual":{"cogs":[20],"layers":[[3,20],[1,10]]},"check":"exhaust layer then merge","expected":{"cogs":[20],"layers":[[3,20],[1,10]]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"span two layers\", \"actual\": {\"cogs\": [860], \"layers\": [[7, 120], [0, 100]]}, \"expected\": {\"cogs\": [860], \"layers\": [[7, 120]]}, \"passed\": false}, {\"check\": \"exact depletion\", \"actual\": {\"cogs\": [270], \"layers\": [[0, 50]]}, \"expected\": {\"cogs\": [270], \"layers\": []}, \"passed\": false}, {\"check\": \"short rejected\", \"actual\": {\"cogs\": [\"short\", 180], \"layers\": [[1, 90]]}, \"expected\": {\"cogs\": [\"short\", 180], \"layers\": [[1, 90]]}, \"passed\": true}, {\"check\": \"receipt then issue\", \"actual\": {\"cogs\": [46], \"layers\": [[3, 13], [0, 10], [1, 13]]}, \"expected\": {\"cogs\": [46], \"layers\": [[4, 13]]}, \"passed\": false}, {\"check\": \"same cost merge\", \"actual\": {\"cogs\": [40], \"layers\": [[2, 40], [3, 41]]}, \"expected\": {\"cogs\": [40], \"layers\": [[2, 40], [3, 41]]}, \"passed\": true}, {\"check\": \"zero receipt\", \"actual\": {\"cogs\": [50], \"layers\": [[4, 25]]}, \"expected\": {\"cogs\": [50], \"layers\": [[4, 25]]}, \"passed\": true}, {\"check\": \"multi issue\", \"actual\": {\"cogs\": [5, 16, 9], \"layers\": [[0, 7]]}, \"expected\": {\"cogs\": [5, 16, 9], \"layers\": []}, \"passed\": false}, {\"check\": \"price decline\", \"actual\": {\"cogs\": [122], \"layers\": [[3, 45]]}, \"expected\": {\"cogs\": [122], \"layers\": [[3, 45]]}, \"passed\": true}, {\"check\": \"exhaust layer then merge\", \"actual\": {\"cogs\": [20], \"layers\": [[3, 20], [1, 10]]}, \"expected\": {\"cogs\": [20], \"layers\": [[3, 20], [1, 10]]}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.888,"exit_code":0,"observations":[{"actual":{"cogs":[860],"layers":[[7,120]]},"check":"span two layers","expected":{"cogs":[860],"layers":[[7,120]]},"passed":true},{"actual":{"cogs":[270],"layers":[]},"check":"exact depletion","expected":{"cogs":[270],"layers":[]},"passed":true},{"actual":{"cogs":["short",180],"layers":[[1,90]]},"check":"short rejected","expected":{"cogs":["short",180],"layers":[[1,90]]},"passed":true},{"actual":{"cogs":[46],"layers":[[4,13]]},"check":"receipt then issue","expected":{"cogs":[46],"layers":[[4,13]]},"passed":true},{"actual":{"cogs":[40],"layers":[[2,40],[3,41]]},"check":"same cost merge","expected":{"cogs":[40],"layers":[[2,40],[3,41]]},"passed":true},{"actual":{"cogs":[50],"layers":[[4,25]]},"check":"zero receipt","expected":{"cogs":[50],"layers":[[4,25]]},"passed":true},{"actual":{"cogs":[5,16,9],"layers":[]},"check":"multi issue","expected":{"cogs":[5,16,9],"layers":[]},"passed":true},{"actual":{"cogs":[122],"layers":[[3,45]]},"check":"price decline","expected":{"cogs":[122],"layers":[[3,45]]},"passed":true},{"actual":{"cogs":[20],"layers":[[3,20],[1,10]]},"check":"exhaust layer then merge","expected":{"cogs":[20],"layers":[[3,20],[1,10]]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"span two layers\", \"actual\": {\"cogs\": [860], \"layers\": [[7, 120]]}, \"expected\": {\"cogs\": [860], \"layers\": [[7, 120]]}, \"passed\": true}, {\"check\": \"exact depletion\", \"actual\": {\"cogs\": [270], \"layers\": []}, \"expected\": {\"cogs\": [270], \"layers\": []}, \"passed\": true}, {\"check\": \"short rejected\", \"actual\": {\"cogs\": [\"short\", 180], \"layers\": [[1, 90]]}, \"expected\": {\"cogs\": [\"short\", 180], \"layers\": [[1, 90]]}, \"passed\": true}, {\"check\": \"receipt then issue\", \"actual\": {\"cogs\": [46], \"layers\": [[4, 13]]}, \"expected\": {\"cogs\": [46], \"layers\": [[4, 13]]}, \"passed\": true}, {\"check\": \"same cost merge\", \"actual\": {\"cogs\": [40], \"layers\": [[2, 40], [3, 41]]}, \"expected\": {\"cogs\": [40], \"layers\": [[2, 40], [3, 41]]}, \"passed\": true}, {\"check\": \"zero receipt\", \"actual\": {\"cogs\": [50], \"layers\": [[4, 25]]}, \"expected\": {\"cogs\": [50], \"layers\": [[4, 25]]}, \"passed\": true}, {\"check\": \"multi issue\", \"actual\": {\"cogs\": [5, 16, 9], \"layers\": []}, \"expected\": {\"cogs\": [5, 16, 9], \"layers\": []}, \"passed\": true}, {\"check\": \"price decline\", \"actual\": {\"cogs\": [122], \"layers\": [[3, 45]]}, \"expected\": {\"cogs\": [122], \"layers\": [[3, 45]]}, \"passed\": true}, {\"check\": \"exhaust layer then merge\", \"actual\": {\"cogs\": [20], \"layers\": [[3, 20], [1, 10]]}, \"expected\": {\"cogs\": [20], \"layers\": [[3, 20], [1, 10]]}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}