{"abstract":"Interline settlement is short by a few cents on most tickets.","category":"Airline fare rule evaluation","checks":10,"contract":"Input {'fare','tpm':[miles per coupon, 0 for surface]}. Work in integer cents: each coupon gets floor(cents*tpm/total); the rounding remainder goes to the last coupon with nonzero miles; surface coupons get 0. No miles -> 'ERR_NO_MILES'. Return coupon values in currency units.","contract_signature":"x","evaluation_group":"w2-airline-fare-rules-mileage-proration","failed_approach":"Adding a single cent is wrong when the remainder is larger than one cent.","family":"w2-airline-fare-rules-mileage-proration-remainder-dropped","id":"FA-66741","implementations":{"attempt":{"sha256":"f3a861dc85b48358863784575a33c5992bee38593eb88d0cc589714fcd8eb82b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    tpm = x['tpm']\n    total = sum(tpm)\n    if total == 0: return 'ERR_NO_MILES'\n    cents = round(x['fare'] * 100)\n    shares = [cents * t // total for t in tpm]\n    last = max(i for i, t in enumerate(tpm) if t > 0)\n    shares[last] += 1 if cents != sum(shares) else 0\n    return [s / 100 for s in shares]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['three coupons uneven', {'fare': 1001.0, 'tpm': [1200, 350, 2900]}, [269.93, 78.73, 652.34]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1501, 0]}, [270.41, 507.36, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 901]}, [0.0, 218.61, 281.4]], ['single coupon', {'fare': 123.45, 'tpm': [2475]}, [123.45]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 1565.87, 'tpm': [193, 5089]}, [57.21, 1508.66]], ['sampled case 2', {'fare': 583.22, 'tpm': [1271, 0, 0]}, [583.22, 0.0, 0.0]], ['sampled case 3', {'fare': 2079.37, 'tpm': [1800]}, [2079.37]], ['regression: rounding remainder allocation', {'fare': 1582.69, 'tpm': [3167, 752, 2410, 859]}, [697.32, 165.57, 530.64, 189.16]]], [['three coupons uneven', {'fare': 1002.0, 'tpm': [1200, 350, 2900]}, [270.2, 78.8, 653.0]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1502, 0]}, [270.29, 507.48, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 902]}, [0.0, 218.48, 281.53]], ['single coupon', {'fare': 246.9, 'tpm': [2475]}, [246.9]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 2915.76, 'tpm': [0, 5491, 214, 782]}, [0.0, 2468.08, 96.18, 351.5]], ['sampled case 2', {'fare': 2482.84, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 3', {'fare': 1177.57, 'tpm': [0, 0]}, 'ERR_NO_MILES']], [['three coupons uneven', {'fare': 1003.0, 'tpm': [1200, 350, 2900]}, [270.47, 78.88, 653.65]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1503, 0]}, [270.17, 507.6, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 903]}, [0.0, 218.34, 281.67]], ['single coupon', {'fare': 370.35, 'tpm': [2475]}, [370.35]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 110.22, 'tpm': [0]}, 'ERR_NO_MILES'], ['sampled case 2', {'fare': 836.64, 'tpm': [5298, 5970, 0, 5279]}, [267.87, 301.85, 0.0, 266.92]], ['sampled case 3', {'fare': 218.58, 'tpm': [5530]}, [218.58]], ['regression: rounding remainder allocation', {'fare': 2950.8, 'tpm': [0, 3274, 2611, 5594, 5187]}, [0.0, 579.67, 462.29, 990.44, 918.4]]], [['three coupons uneven', {'fare': 1004.0, 'tpm': [1200, 350, 2900]}, [270.74, 78.96, 654.3]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1504, 0]}, [270.05, 507.72, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 904]}, [0.0, 218.2, 281.81]], ['single coupon', {'fare': 493.8, 'tpm': [2475]}, [493.8]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 524.52, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 2', {'fare': 1224.53, 'tpm': [0, 1463]}, [0.0, 1224.53]], ['sampled case 3', {'fare': 2475.89, 'tpm': [0]}, 'ERR_NO_MILES'], ['regression: rounding remainder allocation', {'fare': 1160.8, 'tpm': [2634, 1797, 144, 4820, 0]}, [325.44, 222.02, 17.79, 595.55, 0.0]]], [['three coupons uneven', {'fare': 1005.0, 'tpm': [1200, 350, 2900]}, [271.01, 79.04, 654.95]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1505, 0]}, [269.94, 507.83, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 905]}, [0.0, 218.07, 281.94]], ['single coupon', {'fare': 617.25, 'tpm': [2475]}, [617.25]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 927.71, 'tpm': [5167, 2555]}, [620.75, 306.96]], ['sampled case 2', {'fare': 574.25, 'tpm': [3022]}, [574.25]], ['sampled case 3', {'fare': 1349.84, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['regression: rounding remainder allocation', {'fare': 1976.74, 'tpm': [4338, 5522, 3056, 4678, 3840]}, [400.06, 509.26, 281.83, 431.42, 354.17]]]]\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":"95825722f597b847378062e030f8e239600f020ac723f378a67361503b17f22e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    tpm = x['tpm']\n    total = sum(tpm)\n    if total == 0: return 'ERR_NO_MILES'\n    cents = round(x['fare'] * 100)\n    shares = [cents * t // total for t in tpm]\n    return [s / 100 for s in shares]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['three coupons uneven', {'fare': 1001.0, 'tpm': [1200, 350, 2900]}, [269.93, 78.73, 652.34]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1501, 0]}, [270.41, 507.36, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 901]}, [0.0, 218.61, 281.4]], ['single coupon', {'fare': 123.45, 'tpm': [2475]}, [123.45]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 1565.87, 'tpm': [193, 5089]}, [57.21, 1508.66]], ['sampled case 2', {'fare': 583.22, 'tpm': [1271, 0, 0]}, [583.22, 0.0, 0.0]], ['sampled case 3', {'fare': 2079.37, 'tpm': [1800]}, [2079.37]], ['regression: rounding remainder allocation', {'fare': 1582.69, 'tpm': [3167, 752, 2410, 859]}, [697.32, 165.57, 530.64, 189.16]]], [['three coupons uneven', {'fare': 1002.0, 'tpm': [1200, 350, 2900]}, [270.2, 78.8, 653.0]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1502, 0]}, [270.29, 507.48, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 902]}, [0.0, 218.48, 281.53]], ['single coupon', {'fare': 246.9, 'tpm': [2475]}, [246.9]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 2915.76, 'tpm': [0, 5491, 214, 782]}, [0.0, 2468.08, 96.18, 351.5]], ['sampled case 2', {'fare': 2482.84, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 3', {'fare': 1177.57, 'tpm': [0, 0]}, 'ERR_NO_MILES']], [['three coupons uneven', {'fare': 1003.0, 'tpm': [1200, 350, 2900]}, [270.47, 78.88, 653.65]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1503, 0]}, [270.17, 507.6, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 903]}, [0.0, 218.34, 281.67]], ['single coupon', {'fare': 370.35, 'tpm': [2475]}, [370.35]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 110.22, 'tpm': [0]}, 'ERR_NO_MILES'], ['sampled case 2', {'fare': 836.64, 'tpm': [5298, 5970, 0, 5279]}, [267.87, 301.85, 0.0, 266.92]], ['sampled case 3', {'fare': 218.58, 'tpm': [5530]}, [218.58]], ['regression: rounding remainder allocation', {'fare': 2950.8, 'tpm': [0, 3274, 2611, 5594, 5187]}, [0.0, 579.67, 462.29, 990.44, 918.4]]], [['three coupons uneven', {'fare': 1004.0, 'tpm': [1200, 350, 2900]}, [270.74, 78.96, 654.3]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1504, 0]}, [270.05, 507.72, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 904]}, [0.0, 218.2, 281.81]], ['single coupon', {'fare': 493.8, 'tpm': [2475]}, [493.8]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 524.52, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 2', {'fare': 1224.53, 'tpm': [0, 1463]}, [0.0, 1224.53]], ['sampled case 3', {'fare': 2475.89, 'tpm': [0]}, 'ERR_NO_MILES'], ['regression: rounding remainder allocation', {'fare': 1160.8, 'tpm': [2634, 1797, 144, 4820, 0]}, [325.44, 222.02, 17.79, 595.55, 0.0]]], [['three coupons uneven', {'fare': 1005.0, 'tpm': [1200, 350, 2900]}, [271.01, 79.04, 654.95]], ['surface sector last', {'fare': 777.77, 'tpm': [800, 1505, 0]}, [269.94, 507.83, 0.0]], ['surface sector first', {'fare': 500.01, 'tpm': [0, 700, 905]}, [0.0, 218.07, 281.94]], ['single coupon', {'fare': 617.25, 'tpm': [2475]}, [617.25]], ['equal miles odd cents', {'fare': 100.0, 'tpm': [500, 500, 500]}, [33.33, 33.33, 33.34]], ['all surface', {'fare': 50.0, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['sampled case 1', {'fare': 927.71, 'tpm': [5167, 2555]}, [620.75, 306.96]], ['sampled case 2', {'fare': 574.25, 'tpm': [3022]}, [574.25]], ['sampled case 3', {'fare': 1349.84, 'tpm': [0, 0]}, 'ERR_NO_MILES'], ['regression: rounding remainder allocation', {'fare': 1976.74, 'tpm': [4338, 5522, 3056, 4678, 3840]}, [400.06, 509.26, 281.83, 431.42, 354.17]]]]\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-mileage-proration-remainder-dropped","generated_at":"2026-09-29T14:47:46.596869+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Prorating a through fare across coupons by mileage must conserve the fare to the cent and keep value off surface sectors.","root_cause":"The floor-division remainder is never assigned to any coupon.","sha256":"b270c9074665815f65b87ad091948d3595c32c1078270f176f81ff4c98bed761","title":"Prorated coupon values do not add up to the fare · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.516,"exit_code":1,"observations":[{"actual":[269.93,78.73,652.34],"check":"three coupons uneven","expected":[269.93,78.73,652.34],"passed":true},{"actual":[270.41,507.36,0.0],"check":"surface sector last","expected":[270.41,507.36,0.0],"passed":true},{"actual":[0.0,218.61,281.4],"check":"surface sector first","expected":[0.0,218.61,281.4],"passed":true},{"actual":[123.45],"check":"single coupon","expected":[123.45],"passed":true},{"actual":[33.33,33.33,33.34],"check":"equal miles odd cents","expected":[33.33,33.33,33.34],"passed":true},{"actual":"ERR_NO_MILES","check":"all surface","expected":"ERR_NO_MILES","passed":true},{"actual":[57.21,1508.66],"check":"sampled case 1","expected":[57.21,1508.66],"passed":true},{"actual":[583.22,0.0,0.0],"check":"sampled case 2","expected":[583.22,0.0,0.0],"passed":true},{"actual":[2079.37],"check":"sampled case 3","expected":[2079.37],"passed":true},{"actual":[697.32,165.57,530.64,189.14],"check":"regression: rounding remainder allocation","expected":[697.32,165.57,530.64,189.16],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"three coupons uneven\", \"actual\": [269.93, 78.73, 652.34], \"expected\": [269.93, 78.73, 652.34], \"passed\": true}, {\"check\": \"surface sector last\", \"actual\": [270.41, 507.36, 0.0], \"expected\": [270.41, 507.36, 0.0], \"passed\": true}, {\"check\": \"surface sector first\", \"actual\": [0.0, 218.61, 281.4], \"expected\": [0.0, 218.61, 281.4], \"passed\": true}, {\"check\": \"single coupon\", \"actual\": [123.45], \"expected\": [123.45], \"passed\": true}, {\"check\": \"equal miles odd cents\", \"actual\": [33.33, 33.33, 33.34], \"expected\": [33.33, 33.33, 33.34], \"passed\": true}, {\"check\": \"all surface\", \"actual\": \"ERR_NO_MILES\", \"expected\": \"ERR_NO_MILES\", \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [57.21, 1508.66], \"expected\": [57.21, 1508.66], \"passed\": true}, {\"check\": \"sampled case 2\", \"actual\": [583.22, 0.0, 0.0], \"expected\": [583.22, 0.0, 0.0], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [2079.37], \"expected\": [2079.37], \"passed\": true}, {\"check\": \"regression: rounding remainder allocation\", \"actual\": [697.32, 165.57, 530.64, 189.14], \"expected\": [697.32, 165.57, 530.64, 189.16], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.785,"exit_code":1,"observations":[{"actual":[269.93,78.73,652.33],"check":"three coupons uneven","expected":[269.93,78.73,652.34],"passed":false},{"actual":[270.41,507.35,0.0],"check":"surface sector last","expected":[270.41,507.36,0.0],"passed":false},{"actual":[0.0,218.61,281.39],"check":"surface sector first","expected":[0.0,218.61,281.4],"passed":false},{"actual":[123.45],"check":"single coupon","expected":[123.45],"passed":true},{"actual":[33.33,33.33,33.33],"check":"equal miles odd cents","expected":[33.33,33.33,33.34],"passed":false},{"actual":"ERR_NO_MILES","check":"all surface","expected":"ERR_NO_MILES","passed":true},{"actual":[57.21,1508.65],"check":"sampled case 1","expected":[57.21,1508.66],"passed":false},{"actual":[583.22,0.0,0.0],"check":"sampled case 2","expected":[583.22,0.0,0.0],"passed":true},{"actual":[2079.37],"check":"sampled case 3","expected":[2079.37],"passed":true},{"actual":[697.32,165.57,530.64,189.13],"check":"regression: rounding remainder allocation","expected":[697.32,165.57,530.64,189.16],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"three coupons uneven\", \"actual\": [269.93, 78.73, 652.33], \"expected\": [269.93, 78.73, 652.34], \"passed\": false}, {\"check\": \"surface sector last\", \"actual\": [270.41, 507.35, 0.0], \"expected\": [270.41, 507.36, 0.0], \"passed\": false}, {\"check\": \"surface sector first\", \"actual\": [0.0, 218.61, 281.39], \"expected\": [0.0, 218.61, 281.4], \"passed\": false}, {\"check\": \"single coupon\", \"actual\": [123.45], \"expected\": [123.45], \"passed\": true}, {\"check\": \"equal miles odd cents\", \"actual\": [33.33, 33.33, 33.33], \"expected\": [33.33, 33.33, 33.34], \"passed\": false}, {\"check\": \"all surface\", \"actual\": \"ERR_NO_MILES\", \"expected\": \"ERR_NO_MILES\", \"passed\": true}, {\"check\": \"sampled case 1\", \"actual\": [57.21, 1508.65], \"expected\": [57.21, 1508.66], \"passed\": false}, {\"check\": \"sampled case 2\", \"actual\": [583.22, 0.0, 0.0], \"expected\": [583.22, 0.0, 0.0], \"passed\": true}, {\"check\": \"sampled case 3\", \"actual\": [2079.37], \"expected\": [2079.37], \"passed\": true}, {\"check\": \"regression: rounding remainder allocation\", \"actual\": [697.32, 165.57, 530.64, 189.13], \"expected\": [697.32, 165.57, 530.64, 189.16], \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}