FAILURE MAP
← Case archive

FA-95606 / Shipping rate zone lookup / Open access

Cubic tiers: tier truncated · case 01

Parcels are priced one cubic tier too low.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The tier is floored instead of rounded up to the next tenth.

VERIFIED REPAIR

Round cubic feet up to the next tenth.

Unsuccessful approach: Round-half-even keeps exact half tenths in the lower tier.

Case contract

dims inches, each rounded down to the quarter inch; weight lb. Eligible for cubic pricing when weight <= 20 and the longest rounded side <= 18. Cubic feet = product/1728, tier = tenths of a cubic foot rounded up (minimum 1); tiers above 5 are not cubic. Return ["CUBIC", tier] or ["WEIGHT", lb rounded up, minimum 1].

Why this case matters

Cubic pricing rates small dense parcels by volume tier instead of weight.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(dims, weight):
    q = [Fraction(math.floor(d * 4), 4) for d in dims]
    lb = max(1, math.ceil(weight))
    if weight > 20 or max(q) > 18:
        return ['WEIGHT', lb]
    cf = q[0] * q[1] * q[2] / 1728
    tenths = math.floor(cf * 10)
    if tenths > 5:
        return ['WEIGHT', lb]
    return ['CUBIC', max(1, tenths)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['small cube', [[6, 6, 6], 2], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['one cubic foot', [[12, 12, 12], 5], ['WEIGHT', 5]], ['side exactly 18', [[18, 10, 4], 3], ['CUBIC', 5]], ['weight over 20', [[6, 6, 6], 20.5], ['WEIGHT', 21]], ['tier half', [[12, 12, 3], 1], ['CUBIC', 3]], ['quarter inch down', [[8.2, 8.2, 8.2], 2], ['CUBIC', 3]], ['generated mix 6', [[10, 18.2, 4.6], 7.3], ['CUBIC', 5]]], [['generated mix 3', [[8, 18, 3], 19.9], ['CUBIC', 3]], ['generated mix 4', [[3, 18.2, 4.6], 0.5], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['weight 20', [[6, 6, 6], 20], ['CUBIC', 2]], ['tier over cap', [[10, 10, 10], 1], ['WEIGHT', 1]], ['one cubic foot', [[12, 12, 12], 5], ['WEIGHT', 5]], ['generated mix 9', [[18, 12, 6.3], 0.5], ['WEIGHT', 1]], ['generated mix 17', [[6, 19, 18], 19.9], ['WEIGHT', 20]]], [['generated mix 15', [[9.9, 10, 3], 0.5], ['CUBIC', 2]], ['generated mix 51', [[18.2, 10, 3], 2], ['CUBIC', 4]], ['weight over 20', [[6, 6, 6], 20.5], ['WEIGHT', 21]], ['tier half', [[12, 12, 3], 1], ['CUBIC', 3]], ['small cube', [[6, 6, 6], 2], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['generated mix 19', [[18, 18, 6.3], 7.3], ['WEIGHT', 8]], ['generated mix 27', [[10, 8.2, 8], 20.5], ['WEIGHT', 21]]], [['generated mix 48', [[3, 6, 18], 7.3], ['CUBIC', 2]], ['side exactly 18', [[18, 10, 4], 3], ['CUBIC', 5]], ['small cube', [[6, 6, 6], 2], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['weight over 20', [[6, 6, 6], 20.5], ['WEIGHT', 21]], ['tier half', [[12, 12, 3], 1], ['CUBIC', 3]], ['generated mix 30', [[18, 6.3, 6], 20.5], ['WEIGHT', 21]], ['generated mix 38', [[8.2, 10, 19], 0.5], ['WEIGHT', 1]]], [['generated mix 70', [[3, 12, 8.2], 20], ['CUBIC', 2]], ['generated mix 10', [[8, 6.3, 18.2], 7.3], ['WEIGHT', 8]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['weight 20', [[6, 6, 6], 20], ['CUBIC', 2]], ['tier over cap', [[10, 10, 10], 1], ['WEIGHT', 1]], ['one cubic foot', [[12, 12, 12], 5], ['WEIGHT', 5]], ['generated mix 41', [[18.2, 18.2, 8], 19.9], ['WEIGHT', 20]], ['generated mix 49', [[19, 6, 8.2], 0.5], ['WEIGHT', 1]]]]
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 fixtureActualExpectedOutcome
small cube['CUBIC', 1]['CUBIC', 2]Failed
side rounds to 18['CUBIC', 4]['CUBIC', 5]Failed
one cubic foot['WEIGHT', 5]['WEIGHT', 5]Passed
side exactly 18['CUBIC', 4]['CUBIC', 5]Failed
weight over 20['WEIGHT', 21]['WEIGHT', 21]Passed
tier half['CUBIC', 2]['CUBIC', 3]Failed
quarter inch down['CUBIC', 2]['CUBIC', 3]Failed
generated mix 6['CUBIC', 4]['CUBIC', 5]Failed

SHA-256 / 7314bb89ed0e1887acdfb09dcb2d600a53f32e61378d79527714f06f85c533e8

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(dims, weight):
    q = [Fraction(math.floor(d * 4), 4) for d in dims]
    lb = max(1, math.ceil(weight))
    if weight > 20 or max(q) > 18:
        return ['WEIGHT', lb]
    cf = q[0] * q[1] * q[2] / 1728
    tenths = round(cf * 10)
    if tenths > 5:
        return ['WEIGHT', lb]
    return ['CUBIC', max(1, tenths)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['small cube', [[6, 6, 6], 2], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['one cubic foot', [[12, 12, 12], 5], ['WEIGHT', 5]], ['side exactly 18', [[18, 10, 4], 3], ['CUBIC', 5]], ['weight over 20', [[6, 6, 6], 20.5], ['WEIGHT', 21]], ['tier half', [[12, 12, 3], 1], ['CUBIC', 3]], ['quarter inch down', [[8.2, 8.2, 8.2], 2], ['CUBIC', 3]], ['generated mix 6', [[10, 18.2, 4.6], 7.3], ['CUBIC', 5]]], [['generated mix 3', [[8, 18, 3], 19.9], ['CUBIC', 3]], ['generated mix 4', [[3, 18.2, 4.6], 0.5], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['weight 20', [[6, 6, 6], 20], ['CUBIC', 2]], ['tier over cap', [[10, 10, 10], 1], ['WEIGHT', 1]], ['one cubic foot', [[12, 12, 12], 5], ['WEIGHT', 5]], ['generated mix 9', [[18, 12, 6.3], 0.5], ['WEIGHT', 1]], ['generated mix 17', [[6, 19, 18], 19.9], ['WEIGHT', 20]]], [['generated mix 15', [[9.9, 10, 3], 0.5], ['CUBIC', 2]], ['generated mix 51', [[18.2, 10, 3], 2], ['CUBIC', 4]], ['weight over 20', [[6, 6, 6], 20.5], ['WEIGHT', 21]], ['tier half', [[12, 12, 3], 1], ['CUBIC', 3]], ['small cube', [[6, 6, 6], 2], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['generated mix 19', [[18, 18, 6.3], 7.3], ['WEIGHT', 8]], ['generated mix 27', [[10, 8.2, 8], 20.5], ['WEIGHT', 21]]], [['generated mix 48', [[3, 6, 18], 7.3], ['CUBIC', 2]], ['side exactly 18', [[18, 10, 4], 3], ['CUBIC', 5]], ['small cube', [[6, 6, 6], 2], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['weight over 20', [[6, 6, 6], 20.5], ['WEIGHT', 21]], ['tier half', [[12, 12, 3], 1], ['CUBIC', 3]], ['generated mix 30', [[18, 6.3, 6], 20.5], ['WEIGHT', 21]], ['generated mix 38', [[8.2, 10, 19], 0.5], ['WEIGHT', 1]]], [['generated mix 70', [[3, 12, 8.2], 20], ['CUBIC', 2]], ['generated mix 10', [[8, 6.3, 18.2], 7.3], ['WEIGHT', 8]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['weight 20', [[6, 6, 6], 20], ['CUBIC', 2]], ['tier over cap', [[10, 10, 10], 1], ['WEIGHT', 1]], ['one cubic foot', [[12, 12, 12], 5], ['WEIGHT', 5]], ['generated mix 41', [[18.2, 18.2, 8], 19.9], ['WEIGHT', 20]], ['generated mix 49', [[19, 6, 8.2], 0.5], ['WEIGHT', 1]]]]
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 fixtureActualExpectedOutcome
small cube['CUBIC', 1]['CUBIC', 2]Failed
side rounds to 18['CUBIC', 4]['CUBIC', 5]Failed
one cubic foot['WEIGHT', 5]['WEIGHT', 5]Passed
side exactly 18['CUBIC', 4]['CUBIC', 5]Failed
weight over 20['WEIGHT', 21]['WEIGHT', 21]Passed
tier half['CUBIC', 2]['CUBIC', 3]Failed
quarter inch down['CUBIC', 3]['CUBIC', 3]Passed
generated mix 6['CUBIC', 5]['CUBIC', 5]Passed

SHA-256 / 00d2d0f1f13513ac70a16c968b58345293f1683704d17e96807c7fd811352659

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(dims, weight):
    q = [Fraction(math.floor(d * 4), 4) for d in dims]
    lb = max(1, math.ceil(weight))
    if weight > 20 or max(q) > 18:
        return ['WEIGHT', lb]
    cf = q[0] * q[1] * q[2] / 1728
    tenths = math.ceil(cf * 10)
    if tenths > 5:
        return ['WEIGHT', lb]
    return ['CUBIC', max(1, tenths)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['small cube', [[6, 6, 6], 2], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['one cubic foot', [[12, 12, 12], 5], ['WEIGHT', 5]], ['side exactly 18', [[18, 10, 4], 3], ['CUBIC', 5]], ['weight over 20', [[6, 6, 6], 20.5], ['WEIGHT', 21]], ['tier half', [[12, 12, 3], 1], ['CUBIC', 3]], ['quarter inch down', [[8.2, 8.2, 8.2], 2], ['CUBIC', 3]], ['generated mix 6', [[10, 18.2, 4.6], 7.3], ['CUBIC', 5]]], [['generated mix 3', [[8, 18, 3], 19.9], ['CUBIC', 3]], ['generated mix 4', [[3, 18.2, 4.6], 0.5], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['weight 20', [[6, 6, 6], 20], ['CUBIC', 2]], ['tier over cap', [[10, 10, 10], 1], ['WEIGHT', 1]], ['one cubic foot', [[12, 12, 12], 5], ['WEIGHT', 5]], ['generated mix 9', [[18, 12, 6.3], 0.5], ['WEIGHT', 1]], ['generated mix 17', [[6, 19, 18], 19.9], ['WEIGHT', 20]]], [['generated mix 15', [[9.9, 10, 3], 0.5], ['CUBIC', 2]], ['generated mix 51', [[18.2, 10, 3], 2], ['CUBIC', 4]], ['weight over 20', [[6, 6, 6], 20.5], ['WEIGHT', 21]], ['tier half', [[12, 12, 3], 1], ['CUBIC', 3]], ['small cube', [[6, 6, 6], 2], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['generated mix 19', [[18, 18, 6.3], 7.3], ['WEIGHT', 8]], ['generated mix 27', [[10, 8.2, 8], 20.5], ['WEIGHT', 21]]], [['generated mix 48', [[3, 6, 18], 7.3], ['CUBIC', 2]], ['side exactly 18', [[18, 10, 4], 3], ['CUBIC', 5]], ['small cube', [[6, 6, 6], 2], ['CUBIC', 2]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['weight over 20', [[6, 6, 6], 20.5], ['WEIGHT', 21]], ['tier half', [[12, 12, 3], 1], ['CUBIC', 3]], ['generated mix 30', [[18, 6.3, 6], 20.5], ['WEIGHT', 21]], ['generated mix 38', [[8.2, 10, 19], 0.5], ['WEIGHT', 1]]], [['generated mix 70', [[3, 12, 8.2], 20], ['CUBIC', 2]], ['generated mix 10', [[8, 6.3, 18.2], 7.3], ['WEIGHT', 8]], ['side rounds to 18', [[18.2, 10, 4], 3], ['CUBIC', 5]], ['weight 20', [[6, 6, 6], 20], ['CUBIC', 2]], ['tier over cap', [[10, 10, 10], 1], ['WEIGHT', 1]], ['one cubic foot', [[12, 12, 12], 5], ['WEIGHT', 5]], ['generated mix 41', [[18.2, 18.2, 8], 19.9], ['WEIGHT', 20]], ['generated mix 49', [[19, 6, 8.2], 0.5], ['WEIGHT', 1]]]]
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 fixtureActualExpectedOutcome
small cube['CUBIC', 2]['CUBIC', 2]Passed
side rounds to 18['CUBIC', 5]['CUBIC', 5]Passed
one cubic foot['WEIGHT', 5]['WEIGHT', 5]Passed
side exactly 18['CUBIC', 5]['CUBIC', 5]Passed
weight over 20['WEIGHT', 21]['WEIGHT', 21]Passed
tier half['CUBIC', 3]['CUBIC', 3]Passed
quarter inch down['CUBIC', 3]['CUBIC', 3]Passed
generated mix 6['CUBIC', 5]['CUBIC', 5]Passed

SHA-256 / 155180189a6ac530f555fcee375ac843348c64a1dc68cbc847472fe40cc433c0

Verification & scope

Stipulated tier sizes and eligibility. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:52:15.206904+00:00.

Case digest / ce67e2fb977c67aa561c6fd7896f4c90dd95f82e011e1cff846c4df973ff5d98