FA-60241 / Inventory cost layering / Open access
Layer aging and slow-moving reserve: inclusive bucket bound · case 01
A layer exactly 30 days old is reported in the 31-60 bucket and reserved at the higher rate.
ROOT CAUSE
Bucket search advances when age equals the bound.
VERIFIED REPAIR
Advance only while age is strictly greater than the bound.
Unsuccessful approach: Treating only the first bound as inclusive still misplaces layers on the later bounds.
Case 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}.
Why this case matters
Inventory valuation and cost-of-goods decisions depend on this rule.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
bounds = x['buckets']
vals = [0] * (len(bounds) + 1)
for day, q, c in x['layers']:
age = x['today'] - day
if age < 0:
continue
i = 0
while i < len(bounds) and age >= bounds[i]:
i += 1
vals[i] += q * c
reserve = sum((v * bp + 5000) // 10000 for v, bp in zip(vals, x['reserve_bp']))
return {'values': vals, 'reserve': reserve}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['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}]]]
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 |
|---|---|---|---|
| mixed ages | {'reserve': 42, 'values': [50, 60, 101, 21]} | {'reserve': 36, 'values': [110, 0, 101, 21]} | Failed |
| bucket edges | {'reserve': 2601, 'values': [0, 1000, 2000, 4001]} | {'reserve': 1200, 'values': [1000, 2000, 4001, 0]} | Failed |
| in transit | {'reserve': 0, 'values': [10, 0, 0, 0]} | {'reserve': 0, 'values': [10, 0, 0, 0]} | Passed |
| same day | {'reserve': 1, 'values': [52, 0]} | {'reserve': 1, 'values': [52, 0]} | Passed |
| very old | {'reserve': 1050, 'values': [0, 0, 1050]} | {'reserve': 1050, 'values': [0, 0, 1050]} | Passed |
| empty | {'reserve': 0, 'values': [0, 0, 0]} | {'reserve': 0, 'values': [0, 0, 0]} | Passed |
| one step | {'reserve': 124, 'values': [0, 80, 84]} | {'reserve': 42, 'values': [80, 84, 0]} | Failed |
SHA-256 / b208eeaae67005d4f5f903a790209ccd6c80939e024c51ec4fbb8c3a23af3c55
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
bounds = x['buckets']
vals = [0] * (len(bounds) + 1)
for day, q, c in x['layers']:
age = x['today'] - day
if age < 0:
continue
i = 0
while i < len(bounds) and age >= bounds[i] + (i == 0):
i += 1
vals[i] += q * c
reserve = sum((v * bp + 5000) // 10000 for v, bp in zip(vals, x['reserve_bp']))
return {'values': vals, 'reserve': reserve}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['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}]]]
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 |
|---|---|---|---|
| mixed ages | {'reserve': 36, 'values': [110, 0, 101, 21]} | {'reserve': 36, 'values': [110, 0, 101, 21]} | Passed |
| bucket edges | {'reserve': 2501, 'values': [1000, 0, 2000, 4001]} | {'reserve': 1200, 'values': [1000, 2000, 4001, 0]} | Failed |
| in transit | {'reserve': 0, 'values': [10, 0, 0, 0]} | {'reserve': 0, 'values': [10, 0, 0, 0]} | Passed |
| same day | {'reserve': 1, 'values': [52, 0]} | {'reserve': 1, 'values': [52, 0]} | Passed |
| very old | {'reserve': 1050, 'values': [0, 0, 1050]} | {'reserve': 1050, 'values': [0, 0, 1050]} | Passed |
| empty | {'reserve': 0, 'values': [0, 0, 0]} | {'reserve': 0, 'values': [0, 0, 0]} | Passed |
| one step | {'reserve': 84, 'values': [80, 0, 84]} | {'reserve': 42, 'values': [80, 84, 0]} | Failed |
SHA-256 / 6e7ffefedad5e84a19e74754a5c5d18f94e3ea3eda7b44053cae8f4a1fb216b7
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
bounds = x['buckets']
vals = [0] * (len(bounds) + 1)
for day, q, c in x['layers']:
age = x['today'] - day
if age < 0:
continue
i = 0
while i < len(bounds) and age > bounds[i]:
i += 1
vals[i] += q * c
reserve = sum((v * bp + 5000) // 10000 for v, bp in zip(vals, x['reserve_bp']))
return {'values': vals, 'reserve': reserve}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['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}]]]
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 |
|---|---|---|---|
| mixed ages | {'reserve': 36, 'values': [110, 0, 101, 21]} | {'reserve': 36, 'values': [110, 0, 101, 21]} | Passed |
| bucket edges | {'reserve': 1200, 'values': [1000, 2000, 4001, 0]} | {'reserve': 1200, 'values': [1000, 2000, 4001, 0]} | Passed |
| in transit | {'reserve': 0, 'values': [10, 0, 0, 0]} | {'reserve': 0, 'values': [10, 0, 0, 0]} | Passed |
| same day | {'reserve': 1, 'values': [52, 0]} | {'reserve': 1, 'values': [52, 0]} | Passed |
| very old | {'reserve': 1050, 'values': [0, 0, 1050]} | {'reserve': 1050, 'values': [0, 0, 1050]} | Passed |
| empty | {'reserve': 0, 'values': [0, 0, 0]} | {'reserve': 0, 'values': [0, 0, 0]} | Passed |
| one step | {'reserve': 42, 'values': [80, 84, 0]} | {'reserve': 42, 'values': [80, 84, 0]} | Passed |
SHA-256 / 1f0c153919e310af93c42db05dd85f718a76a7e90357a5ae935e81ed55d9612a
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:46:43.758919+00:00.
Case digest / f61e289f0c159a70dcc933aadfab3d017276ce255ac2e2508630dae2850d8e70