{"abstract":"A layer exactly 30 days old is reported in the 31-60 bucket and reserved at the higher rate.","category":"Inventory cost layering","checks":7,"contract":"Input {layers:[[receipt_day,qty,unit]], today, buckets:[upper age bounds, inclusive], reserve_bp:[rate per bucket incl. overflow]}. Age = today - receipt_day; layers with negative age are in transit and excluded. A layer falls in the first bucket whose bound is >= age, else the overflow bucket. Reserve = sum over buckets of round-half-up(value*bp/10000). Return {values, reserve}.","evaluation_group":"w2-inventory-cost-layering-aging-reserve","failed_approach":"Treating only the first bound as inclusive still misplaces layers on the later bounds.","family":"w2-inventory-cost-layering-aging-reserve-inclusive-bucket-bound","id":"FA-60241","implementations":{"attempt":{"sha256":"6e7ffefedad5e84a19e74754a5c5d18f94e3ea3eda7b44053cae8f4a1fb216b7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    bounds = x['buckets']\n    vals = [0] * (len(bounds) + 1)\n    for day, q, c in x['layers']:\n        age = x['today'] - day\n        if age < 0:\n            continue\n        i = 0\n        while i < len(bounds) and age >= bounds[i] + (i == 0):\n            i += 1\n        vals[i] += q * c\n    reserve = sum((v * bp + 5000) // 10000 for v, bp in zip(vals, x['reserve_bp']))\n    return {'values': vals, 'reserve': reserve}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 101], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 101, 21], 'reserve': 36}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4001]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4001, 0], 'reserve': 1200}], ['in transit', {'layers': [[106, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 26]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [52, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 51]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1050], 'reserve': 1050}], ['empty', {'layers': [], 'today': 101, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 42]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 84, 0], 'reserve': 42}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 102], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 102, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4002]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4002, 0], 'reserve': 1201}], ['in transit', {'layers': [[107, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 27]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [54, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 52]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1051], 'reserve': 1051}], ['empty', {'layers': [], 'today': 102, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 43]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 86, 0], 'reserve': 43}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 103], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 103, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4003]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4003, 0], 'reserve': 1201}], ['in transit', {'layers': [[108, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 28]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [56, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 53]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1052], 'reserve': 1052}], ['empty', {'layers': [], 'today': 103, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 44]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 88, 0], 'reserve': 44}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 104], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 104, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4004]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4004, 0], 'reserve': 1201}], ['in transit', {'layers': [[109, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 29]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [58, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 54]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1053], 'reserve': 1053}], ['empty', {'layers': [], 'today': 104, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 45]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 90, 0], 'reserve': 45}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 105], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 105, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4005]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4005, 0], 'reserve': 1201}], ['in transit', {'layers': [[110, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 30]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [60, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 55]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1054], 'reserve': 1054}], ['empty', {'layers': [], 'today': 105, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 46]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 92, 0], 'reserve': 46}]]]\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":"b208eeaae67005d4f5f903a790209ccd6c80939e024c51ec4fbb8c3a23af3c55","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    bounds = x['buckets']\n    vals = [0] * (len(bounds) + 1)\n    for day, q, c in x['layers']:\n        age = x['today'] - day\n        if age < 0:\n            continue\n        i = 0\n        while i < len(bounds) and age >= bounds[i]:\n            i += 1\n        vals[i] += q * c\n    reserve = sum((v * bp + 5000) // 10000 for v, bp in zip(vals, x['reserve_bp']))\n    return {'values': vals, 'reserve': reserve}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 101], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 101, 21], 'reserve': 36}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4001]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4001, 0], 'reserve': 1200}], ['in transit', {'layers': [[106, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 26]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [52, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 51]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1050], 'reserve': 1050}], ['empty', {'layers': [], 'today': 101, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 42]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 84, 0], 'reserve': 42}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 102], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 102, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4002]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4002, 0], 'reserve': 1201}], ['in transit', {'layers': [[107, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 27]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [54, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 52]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1051], 'reserve': 1051}], ['empty', {'layers': [], 'today': 102, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 43]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 86, 0], 'reserve': 43}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 103], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 103, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4003]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4003, 0], 'reserve': 1201}], ['in transit', {'layers': [[108, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 28]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [56, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 53]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1052], 'reserve': 1052}], ['empty', {'layers': [], 'today': 103, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 44]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 88, 0], 'reserve': 44}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 104], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 104, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4004]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4004, 0], 'reserve': 1201}], ['in transit', {'layers': [[109, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 29]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [58, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 54]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1053], 'reserve': 1053}], ['empty', {'layers': [], 'today': 104, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 45]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 90, 0], 'reserve': 45}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 105], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 105, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4005]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4005, 0], 'reserve': 1201}], ['in transit', {'layers': [[110, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 30]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [60, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 55]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1054], 'reserve': 1054}], ['empty', {'layers': [], 'today': 105, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 46]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 92, 0], 'reserve': 46}]]]\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":"1f0c153919e310af93c42db05dd85f718a76a7e90357a5ae935e81ed55d9612a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    bounds = x['buckets']\n    vals = [0] * (len(bounds) + 1)\n    for day, q, c in x['layers']:\n        age = x['today'] - day\n        if age < 0:\n            continue\n        i = 0\n        while i < len(bounds) and age > bounds[i]:\n            i += 1\n        vals[i] += q * c\n    reserve = sum((v * bp + 5000) // 10000 for v, bp in zip(vals, x['reserve_bp']))\n    return {'values': vals, 'reserve': reserve}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 101], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 101, 21], 'reserve': 36}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4001]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4001, 0], 'reserve': 1200}], ['in transit', {'layers': [[106, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 26]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [52, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 51]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1050], 'reserve': 1050}], ['empty', {'layers': [], 'today': 101, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 42]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 84, 0], 'reserve': 42}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 102], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 102, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4002]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4002, 0], 'reserve': 1201}], ['in transit', {'layers': [[107, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 27]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [54, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 52]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1051], 'reserve': 1051}], ['empty', {'layers': [], 'today': 102, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 43]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 86, 0], 'reserve': 43}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 103], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 103, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4003]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4003, 0], 'reserve': 1201}], ['in transit', {'layers': [[108, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 28]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [56, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 53]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1052], 'reserve': 1052}], ['empty', {'layers': [], 'today': 103, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 44]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 88, 0], 'reserve': 44}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 104], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 104, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4004]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4004, 0], 'reserve': 1201}], ['in transit', {'layers': [[109, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 29]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [58, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 54]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1053], 'reserve': 1053}], ['empty', {'layers': [], 'today': 104, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 45]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 90, 0], 'reserve': 45}]], [['mixed ages', {'layers': [[100, 5, 10], [70, 2, 30], [30, 1, 105], [5, 3, 7]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [110, 0, 105, 21], 'reserve': 37}], ['bucket edges', {'layers': [[70, 1, 1000], [40, 1, 2000], [10, 1, 4005]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [1000, 2000, 4005, 0], 'reserve': 1201}], ['in transit', {'layers': [[110, 4, 50], [90, 1, 10]], 'today': 100, 'buckets': [30, 60, 90], 'reserve_bp': [0, 1000, 2500, 5000]}, {'values': [10, 0, 0, 0], 'reserve': 0}], ['same day', {'layers': [[100, 2, 30]], 'today': 100, 'buckets': [30], 'reserve_bp': [100, 9000]}, {'values': [60, 0], 'reserve': 1}], ['very old', {'layers': [[1, 3, 333], [-200, 1, 55]], 'today': 300, 'buckets': [60, 120], 'reserve_bp': [0, 2000, 10000]}, {'values': [0, 0, 1054], 'reserve': 1054}], ['empty', {'layers': [], 'today': 105, 'buckets': [30, 60], 'reserve_bp': [0, 1000, 3000]}, {'values': [0, 0, 0], 'reserve': 0}], ['one step', {'layers': [[69, 2, 40], [68, 2, 46]], 'today': 100, 'buckets': [31, 32], 'reserve_bp': [0, 5000, 10000]}, {'values': [80, 92, 0], 'reserve': 46}]]]\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-aging-reserve-inclusive-bucket-bound","generated_at":"2026-09-29T14:46:43.758919+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":"Advance only while age is strictly greater than the bound.","root_cause":"Bucket search advances when age equals the bound.","sha256":"f61e289f0c159a70dcc933aadfab3d017276ce255ac2e2508630dae2850d8e70","title":"Layer aging and slow-moving reserve: inclusive bucket bound · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.584,"exit_code":1,"observations":[{"actual":{"reserve":36,"values":[110,0,101,21]},"check":"mixed ages","expected":{"reserve":36,"values":[110,0,101,21]},"passed":true},{"actual":{"reserve":2501,"values":[1000,0,2000,4001]},"check":"bucket edges","expected":{"reserve":1200,"values":[1000,2000,4001,0]},"passed":false},{"actual":{"reserve":0,"values":[10,0,0,0]},"check":"in transit","expected":{"reserve":0,"values":[10,0,0,0]},"passed":true},{"actual":{"reserve":1,"values":[52,0]},"check":"same day","expected":{"reserve":1,"values":[52,0]},"passed":true},{"actual":{"reserve":1050,"values":[0,0,1050]},"check":"very old","expected":{"reserve":1050,"values":[0,0,1050]},"passed":true},{"actual":{"reserve":0,"values":[0,0,0]},"check":"empty","expected":{"reserve":0,"values":[0,0,0]},"passed":true},{"actual":{"reserve":84,"values":[80,0,84]},"check":"one step","expected":{"reserve":42,"values":[80,84,0]},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"mixed ages\", \"actual\": {\"values\": [110, 0, 101, 21], \"reserve\": 36}, \"expected\": {\"values\": [110, 0, 101, 21], \"reserve\": 36}, \"passed\": true}, {\"check\": \"bucket edges\", \"actual\": {\"values\": [1000, 0, 2000, 4001], \"reserve\": 2501}, \"expected\": {\"values\": [1000, 2000, 4001, 0], \"reserve\": 1200}, \"passed\": false}, {\"check\": \"in transit\", \"actual\": {\"values\": [10, 0, 0, 0], \"reserve\": 0}, \"expected\": {\"values\": [10, 0, 0, 0], \"reserve\": 0}, \"passed\": true}, {\"check\": \"same day\", \"actual\": {\"values\": [52, 0], \"reserve\": 1}, \"expected\": {\"values\": [52, 0], \"reserve\": 1}, \"passed\": true}, {\"check\": \"very old\", \"actual\": {\"values\": [0, 0, 1050], \"reserve\": 1050}, \"expected\": {\"values\": [0, 0, 1050], \"reserve\": 1050}, \"passed\": true}, {\"check\": \"empty\", \"actual\": {\"values\": [0, 0, 0], \"reserve\": 0}, \"expected\": {\"values\": [0, 0, 0], \"reserve\": 0}, \"passed\": true}, {\"check\": \"one step\", \"actual\": {\"values\": [80, 0, 84], \"reserve\": 84}, \"expected\": {\"values\": [80, 84, 0], \"reserve\": 42}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.04,"exit_code":1,"observations":[{"actual":{"reserve":42,"values":[50,60,101,21]},"check":"mixed ages","expected":{"reserve":36,"values":[110,0,101,21]},"passed":false},{"actual":{"reserve":2601,"values":[0,1000,2000,4001]},"check":"bucket edges","expected":{"reserve":1200,"values":[1000,2000,4001,0]},"passed":false},{"actual":{"reserve":0,"values":[10,0,0,0]},"check":"in transit","expected":{"reserve":0,"values":[10,0,0,0]},"passed":true},{"actual":{"reserve":1,"values":[52,0]},"check":"same day","expected":{"reserve":1,"values":[52,0]},"passed":true},{"actual":{"reserve":1050,"values":[0,0,1050]},"check":"very old","expected":{"reserve":1050,"values":[0,0,1050]},"passed":true},{"actual":{"reserve":0,"values":[0,0,0]},"check":"empty","expected":{"reserve":0,"values":[0,0,0]},"passed":true},{"actual":{"reserve":124,"values":[0,80,84]},"check":"one step","expected":{"reserve":42,"values":[80,84,0]},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"mixed ages\", \"actual\": {\"values\": [50, 60, 101, 21], \"reserve\": 42}, \"expected\": {\"values\": [110, 0, 101, 21], \"reserve\": 36}, \"passed\": false}, {\"check\": \"bucket edges\", \"actual\": {\"values\": [0, 1000, 2000, 4001], \"reserve\": 2601}, \"expected\": {\"values\": [1000, 2000, 4001, 0], \"reserve\": 1200}, \"passed\": false}, {\"check\": \"in transit\", \"actual\": {\"values\": [10, 0, 0, 0], \"reserve\": 0}, \"expected\": {\"values\": [10, 0, 0, 0], \"reserve\": 0}, \"passed\": true}, {\"check\": \"same day\", \"actual\": {\"values\": [52, 0], \"reserve\": 1}, \"expected\": {\"values\": [52, 0], \"reserve\": 1}, \"passed\": true}, {\"check\": \"very old\", \"actual\": {\"values\": [0, 0, 1050], \"reserve\": 1050}, \"expected\": {\"values\": [0, 0, 1050], \"reserve\": 1050}, \"passed\": true}, {\"check\": \"empty\", \"actual\": {\"values\": [0, 0, 0], \"reserve\": 0}, \"expected\": {\"values\": [0, 0, 0], \"reserve\": 0}, \"passed\": true}, {\"check\": \"one step\", \"actual\": {\"values\": [0, 80, 84], \"reserve\": 124}, \"expected\": {\"values\": [80, 84, 0], \"reserve\": 42}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.49,"exit_code":0,"observations":[{"actual":{"reserve":36,"values":[110,0,101,21]},"check":"mixed ages","expected":{"reserve":36,"values":[110,0,101,21]},"passed":true},{"actual":{"reserve":1200,"values":[1000,2000,4001,0]},"check":"bucket edges","expected":{"reserve":1200,"values":[1000,2000,4001,0]},"passed":true},{"actual":{"reserve":0,"values":[10,0,0,0]},"check":"in transit","expected":{"reserve":0,"values":[10,0,0,0]},"passed":true},{"actual":{"reserve":1,"values":[52,0]},"check":"same day","expected":{"reserve":1,"values":[52,0]},"passed":true},{"actual":{"reserve":1050,"values":[0,0,1050]},"check":"very old","expected":{"reserve":1050,"values":[0,0,1050]},"passed":true},{"actual":{"reserve":0,"values":[0,0,0]},"check":"empty","expected":{"reserve":0,"values":[0,0,0]},"passed":true},{"actual":{"reserve":42,"values":[80,84,0]},"check":"one step","expected":{"reserve":42,"values":[80,84,0]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"mixed ages\", \"actual\": {\"values\": [110, 0, 101, 21], \"reserve\": 36}, \"expected\": {\"values\": [110, 0, 101, 21], \"reserve\": 36}, \"passed\": true}, {\"check\": \"bucket edges\", \"actual\": {\"values\": [1000, 2000, 4001, 0], \"reserve\": 1200}, \"expected\": {\"values\": [1000, 2000, 4001, 0], \"reserve\": 1200}, \"passed\": true}, {\"check\": \"in transit\", \"actual\": {\"values\": [10, 0, 0, 0], \"reserve\": 0}, \"expected\": {\"values\": [10, 0, 0, 0], \"reserve\": 0}, \"passed\": true}, {\"check\": \"same day\", \"actual\": {\"values\": [52, 0], \"reserve\": 1}, \"expected\": {\"values\": [52, 0], \"reserve\": 1}, \"passed\": true}, {\"check\": \"very old\", \"actual\": {\"values\": [0, 0, 1050], \"reserve\": 1050}, \"expected\": {\"values\": [0, 0, 1050], \"reserve\": 1050}, \"passed\": true}, {\"check\": \"empty\", \"actual\": {\"values\": [0, 0, 0], \"reserve\": 0}, \"expected\": {\"values\": [0, 0, 0], \"reserve\": 0}, \"passed\": true}, {\"check\": \"one step\", \"actual\": {\"values\": [80, 84, 0], \"reserve\": 42}, \"expected\": {\"values\": [80, 84, 0], \"reserve\": 42}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}