{"abstract":"A routing exactly 5% over MPM is charged a 10M surcharge.","category":"Airline fare rule evaluation","checks":11,"contract":"Input {'tpm':[segment miles],'tpd':deduction miles,'mpm'}. Total = sum(TPM) - TPD. Total <= MPM -> ['M',0]; else the smallest band b in 5,10,15,20,25 with total <= MPM*(1+b/100) -> ['bM', b]; beyond 25% -> 'ERR_EXCEEDS'. Comparisons are exact integer arithmetic.","evaluation_group":"w2-airline-fare-rules-excess-mileage-bands","failed_approach":"Rounding the allowance to the nearest mile admits routings up to half a mile over the band limit.","family":"w2-airline-fare-rules-excess-mileage-bands-band-exclusive","id":"FA-66506","implementations":{"attempt":{"sha256":"d8b80b0ebafa73bb4ebdfc383191ee57ef2cb24f88976345c5c1562cc190e2c5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    total = sum(x['tpm']) - x['tpd']\n    mpm = x['mpm']\n    if total * 100 <= mpm * 100: return ['M', 0]\n    for pct in (5, 10, 15, 20, 25):\n        if total <= round(mpm * (1 + pct / 100)):\n            return ['%dM' % pct, pct]\n    return 'ERR_EXCEEDS'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['within MPM', {'tpm': [1200, 801], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1107], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 251, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1210], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5256], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [2492, 2156], 'tpd': 0, 'mpm': 4150}, ['15M', 15]], ['sampled case 2', {'tpm': [3592, 2721], 'tpd': 0, 'mpm': 5598}, ['15M', 15]], ['sampled case 3', {'tpm': [402, 360], 'tpd': 73, 'mpm': 652}, ['10M', 10]], ['regression: surcharge band boundary', {'tpm': [407, 466], 'tpd': 0, 'mpm': 831}, ['10M', 10]]], [['within MPM', {'tpm': [1200, 802], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1108], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 252, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1220], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5257], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [4525, 5148], 'tpd': 0, 'mpm': 7940}, ['25M', 25]], ['sampled case 2', {'tpm': [3880, 3908], 'tpd': 293, 'mpm': 7743}, ['M', 0]], ['sampled case 3', {'tpm': [3404, 3171], 'tpd': 0, 'mpm': 5451}, ['25M', 25]], ['regression: surcharge band boundary', {'tpm': [536, 627], 'tpd': 0, 'mpm': 1011}, ['20M', 20]]], [['within MPM', {'tpm': [1200, 803], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1109], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 253, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1230], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5258], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [2696, 2449], 'tpd': 42, 'mpm': 4715}, ['10M', 10]], ['sampled case 2', {'tpm': [193], 'tpd': 0, 'mpm': 8525}, ['M', 0]], ['sampled case 3', {'tpm': [1557, 1285], 'tpd': 0, 'mpm': 2456}, ['20M', 20]], ['regression: surcharge band boundary', {'tpm': [1618, 1377], 'tpd': 0, 'mpm': 2604}, ['20M', 20]]], [['within MPM', {'tpm': [1200, 804], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1110], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 254, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1240], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5259], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [1579, 2622], 'tpd': 0, 'mpm': 1172}, 'ERR_EXCEEDS'], ['sampled case 2', {'tpm': [3163, 3734], 'tpd': 278, 'mpm': 3722}, 'ERR_EXCEEDS'], ['sampled case 3', {'tpm': [607], 'tpd': 0, 'mpm': 5975}, ['M', 0]], ['regression: surcharge band boundary', {'tpm': [1913, 2101], 'tpd': 0, 'mpm': 3649}, ['15M', 15]]], [['within MPM', {'tpm': [1200, 805], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1111], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 255, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1250], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5260], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [1024], 'tpd': 298, 'mpm': 6290}, ['M', 0]], ['sampled case 2', {'tpm': [1754, 1180], 'tpd': 0, 'mpm': 872}, 'ERR_EXCEEDS'], ['sampled case 3', {'tpm': [3753, 4785], 'tpd': 130, 'mpm': 7546}, ['15M', 15]], ['regression: surcharge band boundary', {'tpm': [839, 957], 'tpd': 0, 'mpm': 1710}, ['10M', 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":"2bb278515683bf64e30003dbbcc6589ce7792872a6a8d1f77212b8661066f0fa","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    total = sum(x['tpm']) - x['tpd']\n    mpm = x['mpm']\n    if total * 100 <= mpm * 100: return ['M', 0]\n    for pct in (5, 10, 15, 20, 25):\n        if total * 100 < mpm * (100 + pct):\n            return ['%dM' % pct, pct]\n    return 'ERR_EXCEEDS'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['within MPM', {'tpm': [1200, 801], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1107], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 251, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1210], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5256], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [2492, 2156], 'tpd': 0, 'mpm': 4150}, ['15M', 15]], ['sampled case 2', {'tpm': [3592, 2721], 'tpd': 0, 'mpm': 5598}, ['15M', 15]], ['sampled case 3', {'tpm': [402, 360], 'tpd': 73, 'mpm': 652}, ['10M', 10]], ['regression: surcharge band boundary', {'tpm': [407, 466], 'tpd': 0, 'mpm': 831}, ['10M', 10]]], [['within MPM', {'tpm': [1200, 802], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1108], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 252, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1220], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5257], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [4525, 5148], 'tpd': 0, 'mpm': 7940}, ['25M', 25]], ['sampled case 2', {'tpm': [3880, 3908], 'tpd': 293, 'mpm': 7743}, ['M', 0]], ['sampled case 3', {'tpm': [3404, 3171], 'tpd': 0, 'mpm': 5451}, ['25M', 25]], ['regression: surcharge band boundary', {'tpm': [536, 627], 'tpd': 0, 'mpm': 1011}, ['20M', 20]]], [['within MPM', {'tpm': [1200, 803], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1109], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 253, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1230], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5258], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [2696, 2449], 'tpd': 42, 'mpm': 4715}, ['10M', 10]], ['sampled case 2', {'tpm': [193], 'tpd': 0, 'mpm': 8525}, ['M', 0]], ['sampled case 3', {'tpm': [1557, 1285], 'tpd': 0, 'mpm': 2456}, ['20M', 20]], ['regression: surcharge band boundary', {'tpm': [1618, 1377], 'tpd': 0, 'mpm': 2604}, ['20M', 20]]], [['within MPM', {'tpm': [1200, 804], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1110], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 254, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1240], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5259], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [1579, 2622], 'tpd': 0, 'mpm': 1172}, 'ERR_EXCEEDS'], ['sampled case 2', {'tpm': [3163, 3734], 'tpd': 278, 'mpm': 3722}, 'ERR_EXCEEDS'], ['sampled case 3', {'tpm': [607], 'tpd': 0, 'mpm': 5975}, ['M', 0]], ['regression: surcharge band boundary', {'tpm': [1913, 2101], 'tpd': 0, 'mpm': 3649}, ['15M', 15]]], [['within MPM', {'tpm': [1200, 805], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1111], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 255, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1250], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5260], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [1024], 'tpd': 298, 'mpm': 6290}, ['M', 0]], ['sampled case 2', {'tpm': [1754, 1180], 'tpd': 0, 'mpm': 872}, 'ERR_EXCEEDS'], ['sampled case 3', {'tpm': [3753, 4785], 'tpd': 130, 'mpm': 7546}, ['15M', 15]], ['regression: surcharge band boundary', {'tpm': [839, 957], 'tpd': 0, 'mpm': 1710}, ['10M', 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":"f3e9c99b3c792d651060740c9053a781acc335083e12cd4a8b4f447b060ede95","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    total = sum(x['tpm']) - x['tpd']\n    mpm = x['mpm']\n    if total * 100 <= mpm * 100: return ['M', 0]\n    for pct in (5, 10, 15, 20, 25):\n        if total * 100 <= mpm * (100 + pct):\n            return ['%dM' % pct, pct]\n    return 'ERR_EXCEEDS'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['within MPM', {'tpm': [1200, 801], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1107], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 251, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1210], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5256], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [2492, 2156], 'tpd': 0, 'mpm': 4150}, ['15M', 15]], ['sampled case 2', {'tpm': [3592, 2721], 'tpd': 0, 'mpm': 5598}, ['15M', 15]], ['sampled case 3', {'tpm': [402, 360], 'tpd': 73, 'mpm': 652}, ['10M', 10]], ['regression: surcharge band boundary', {'tpm': [407, 466], 'tpd': 0, 'mpm': 831}, ['10M', 10]]], [['within MPM', {'tpm': [1200, 802], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1108], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 252, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1220], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5257], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [4525, 5148], 'tpd': 0, 'mpm': 7940}, ['25M', 25]], ['sampled case 2', {'tpm': [3880, 3908], 'tpd': 293, 'mpm': 7743}, ['M', 0]], ['sampled case 3', {'tpm': [3404, 3171], 'tpd': 0, 'mpm': 5451}, ['25M', 25]], ['regression: surcharge band boundary', {'tpm': [536, 627], 'tpd': 0, 'mpm': 1011}, ['20M', 20]]], [['within MPM', {'tpm': [1200, 803], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1109], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 253, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1230], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5258], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [2696, 2449], 'tpd': 42, 'mpm': 4715}, ['10M', 10]], ['sampled case 2', {'tpm': [193], 'tpd': 0, 'mpm': 8525}, ['M', 0]], ['sampled case 3', {'tpm': [1557, 1285], 'tpd': 0, 'mpm': 2456}, ['20M', 20]], ['regression: surcharge band boundary', {'tpm': [1618, 1377], 'tpd': 0, 'mpm': 2604}, ['20M', 20]]], [['within MPM', {'tpm': [1200, 804], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1110], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 254, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1240], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5259], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [1579, 2622], 'tpd': 0, 'mpm': 1172}, 'ERR_EXCEEDS'], ['sampled case 2', {'tpm': [3163, 3734], 'tpd': 278, 'mpm': 3722}, 'ERR_EXCEEDS'], ['sampled case 3', {'tpm': [607], 'tpd': 0, 'mpm': 5975}, ['M', 0]], ['regression: surcharge band boundary', {'tpm': [1913, 2101], 'tpd': 0, 'mpm': 3649}, ['15M', 15]]], [['within MPM', {'tpm': [1200, 805], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly MPM', {'tpm': [1000, 1100], 'tpd': 0, 'mpm': 2100}, ['M', 0]], ['exactly 5 percent over', {'tpm': [1100, 1105], 'tpd': 0, 'mpm': 2100}, ['5M', 5]], ['just over 5 percent', {'tpm': [1100, 1111], 'tpd': 0, 'mpm': 2100}, ['10M', 10]], ['deduction brings within', {'tpm': [1500, 900], 'tpd': 255, 'mpm': 2200}, ['M', 0]], ['beyond 25 percent', {'tpm': [2000, 1250], 'tpd': 0, 'mpm': 2500}, 'ERR_EXCEEDS'], ['ratio rounds down to band', {'tpm': [5260], 'tpd': 0, 'mpm': 5000}, ['10M', 10]], ['sampled case 1', {'tpm': [1024], 'tpd': 298, 'mpm': 6290}, ['M', 0]], ['sampled case 2', {'tpm': [1754, 1180], 'tpd': 0, 'mpm': 872}, 'ERR_EXCEEDS'], ['sampled case 3', {'tpm': [3753, 4785], 'tpd': 130, 'mpm': 7546}, ['15M', 15]], ['regression: surcharge band boundary', {'tpm': [839, 957], 'tpd': 0, 'mpm': 1710}, ['10M', 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":"A stipulated toy fare-rule contract with invented constants; it is not an ATPCO or carrier tariff implementation and makes no claim of industry-standard conformance. 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-airline-fare-rules-excess-mileage-bands-band-exclusive","generated_at":"2026-09-29T14:47:44.336238+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"The mileage system surcharges fares in 5% bands when the ticketed routing exceeds the maximum permitted mileage.","repair":"Include the band limit in the band.","root_cause":"The band test excludes its upper limit.","sha256":"6317a3da6b84a58300422b3a7a0f1b1849025bb65c08b7918084df2bc7e4b953","title":"Routing exactly on a band limit pushed to the next band · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.855,"exit_code":1,"observations":[{"actual":["M",0],"check":"within MPM","expected":["M",0],"passed":true},{"actual":["M",0],"check":"exactly MPM","expected":["M",0],"passed":true},{"actual":["5M",5],"check":"exactly 5 percent over","expected":["5M",5],"passed":true},{"actual":["10M",10],"check":"just over 5 percent","expected":["10M",10],"passed":true},{"actual":["M",0],"check":"deduction brings within","expected":["M",0],"passed":true},{"actual":"ERR_EXCEEDS","check":"beyond 25 percent","expected":"ERR_EXCEEDS","passed":true},{"actual":["10M",10],"check":"ratio rounds down to band","expected":["10M",10],"passed":true},{"actual":["15M",15],"check":"sampled case 1","expected":["15M",15],"passed":true},{"actual":["15M",15],"check":"sampled case 2","expected":["15M",15],"passed":true},{"actual":["10M",10],"check":"sampled case 3","expected":["10M",10],"passed":true},{"actual":["5M",5],"check":"regression: surcharge band boundary","expected":["10M",10],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"within MPM\", \"actual\": [\"M\", 0], \"expected\": [\"M\", 0], \"passed\": true}, {\"check\": \"exactly MPM\", \"actual\": [\"M\", 0], \"expected\": [\"M\", 0], \"passed\": true}, {\"check\": \"exactly 5 percent over\", \"actual\": [\"5M\", 5], \"expected\": [\"5M\", 5], \"passed\": true}, {\"check\": \"just over 5 percent\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}, {\"check\": \"deduction brings within\", \"actual\": [\"M\", 0], \"expected\": [\"M\", 0], \"passed\": true}, {\"check\": \"beyond 25 percent\", \"actual\": \"ERR_EXCEEDS\", \"expected\": \"ERR_EXCEEDS\", \"passed\": true}, {\"check\": \"ratio rounds down to band\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [\"15M\", 15], \"expected\": [\"15M\", 15], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [\"15M\", 15], \"expected\": [\"15M\", 15], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}, {\"check\": \"regression: surcharge band boundary\", \"actual\": [\"5M\", 5], \"expected\": [\"10M\", 10], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.28,"exit_code":1,"observations":[{"actual":["M",0],"check":"within MPM","expected":["M",0],"passed":true},{"actual":["M",0],"check":"exactly MPM","expected":["M",0],"passed":true},{"actual":["10M",10],"check":"exactly 5 percent over","expected":["5M",5],"passed":false},{"actual":["10M",10],"check":"just over 5 percent","expected":["10M",10],"passed":true},{"actual":["M",0],"check":"deduction brings within","expected":["M",0],"passed":true},{"actual":"ERR_EXCEEDS","check":"beyond 25 percent","expected":"ERR_EXCEEDS","passed":true},{"actual":["10M",10],"check":"ratio rounds down to band","expected":["10M",10],"passed":true},{"actual":["15M",15],"check":"sampled case 1","expected":["15M",15],"passed":true},{"actual":["15M",15],"check":"sampled case 2","expected":["15M",15],"passed":true},{"actual":["10M",10],"check":"sampled case 3","expected":["10M",10],"passed":true},{"actual":["10M",10],"check":"regression: surcharge band boundary","expected":["10M",10],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"within MPM\", \"actual\": [\"M\", 0], \"expected\": [\"M\", 0], \"passed\": true}, {\"check\": \"exactly MPM\", \"actual\": [\"M\", 0], \"expected\": [\"M\", 0], \"passed\": true}, {\"check\": \"exactly 5 percent over\", \"actual\": [\"10M\", 10], \"expected\": [\"5M\", 5], \"passed\": false}, {\"check\": \"just over 5 percent\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}, {\"check\": \"deduction brings within\", \"actual\": [\"M\", 0], \"expected\": [\"M\", 0], \"passed\": true}, {\"check\": \"beyond 25 percent\", \"actual\": \"ERR_EXCEEDS\", \"expected\": \"ERR_EXCEEDS\", \"passed\": true}, {\"check\": \"ratio rounds down to band\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [\"15M\", 15], \"expected\": [\"15M\", 15], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [\"15M\", 15], \"expected\": [\"15M\", 15], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}, {\"check\": \"regression: surcharge band boundary\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.998,"exit_code":0,"observations":[{"actual":["M",0],"check":"within MPM","expected":["M",0],"passed":true},{"actual":["M",0],"check":"exactly MPM","expected":["M",0],"passed":true},{"actual":["5M",5],"check":"exactly 5 percent over","expected":["5M",5],"passed":true},{"actual":["10M",10],"check":"just over 5 percent","expected":["10M",10],"passed":true},{"actual":["M",0],"check":"deduction brings within","expected":["M",0],"passed":true},{"actual":"ERR_EXCEEDS","check":"beyond 25 percent","expected":"ERR_EXCEEDS","passed":true},{"actual":["10M",10],"check":"ratio rounds down to band","expected":["10M",10],"passed":true},{"actual":["15M",15],"check":"sampled case 1","expected":["15M",15],"passed":true},{"actual":["15M",15],"check":"sampled case 2","expected":["15M",15],"passed":true},{"actual":["10M",10],"check":"sampled case 3","expected":["10M",10],"passed":true},{"actual":["10M",10],"check":"regression: surcharge band boundary","expected":["10M",10],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"within MPM\", \"actual\": [\"M\", 0], \"expected\": [\"M\", 0], \"passed\": true}, {\"check\": \"exactly MPM\", \"actual\": [\"M\", 0], \"expected\": [\"M\", 0], \"passed\": true}, {\"check\": \"exactly 5 percent over\", \"actual\": [\"5M\", 5], \"expected\": [\"5M\", 5], \"passed\": true}, {\"check\": \"just over 5 percent\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}, {\"check\": \"deduction brings within\", \"actual\": [\"M\", 0], \"expected\": [\"M\", 0], \"passed\": true}, {\"check\": \"beyond 25 percent\", \"actual\": \"ERR_EXCEEDS\", \"expected\": \"ERR_EXCEEDS\", \"passed\": true}, {\"check\": \"ratio rounds down to band\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [\"15M\", 15], \"expected\": [\"15M\", 15], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [\"15M\", 15], \"expected\": [\"15M\", 15], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}, {\"check\": \"regression: surcharge band boundary\", \"actual\": [\"10M\", 10], \"expected\": [\"10M\", 10], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}