{"abstract":"The meter drops fractional cents instead of rounding.","category":"Ride-hailing fare and surge pricing","checks":7,"contract":"A single-tariff taximeter bills each segment [seconds, meters] by distance when its speed is at least v m/s (meters >= v*seconds, so a zero-duration movement bills distance) and by time otherwise, never both. Charges accumulate exactly (per_km per 1000 m, per_hour per 3600 s) and the total is rounded half up to a cent once, then the flag fall is added.","contract_signature":"segments, rate","evaluation_group":"w2-ride-hailing-fare-surge-taximeter-single-tariff","failed_approach":"Fraction round() is half-even and rounds exact halves down to even cents.","family":"w2-ride-hailing-fare-surge-taximeter-single-tariff-final-rounding","id":"FA-85781","implementations":{"attempt":{"sha256":"6a6304e6ffe6a06e4edec35a453182ea7502ac7d9d28d972f50508dbab80b27c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(segments, rate):\n    acc = Fraction(0)\n    for dt, dm in segments:\n        if dm >= rate['v'] * dt:\n            acc += Fraction(dm * rate['per_km'], 1000)\n        else:\n            acc += Fraction(dt * rate['per_hour'], 3600)\n    cents = round(acc)\n    return rate['flag'] + cents\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: final rounding',\n   [[[5, 24], [0, 3], [10, 49], [1, 4]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 408),\n  ('partial repair probe: final rounding',\n   [[[0, 0], [30, 7]], {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 333),\n  ('second regression',\n   [[[5, 28], [5, 25], [5, 55], [10, 49], [30, 153]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   464),\n  ('normal control 1',\n   [[[5, 0], [30, 60], [10, 7], [10, 7], [5, 55], [10, 50]],\n    {'flag': 300, 'per_hour': 3900, 'per_km': 199, 'v': 5}],\n   380),\n  ('normal control 2', [[[0, 0]], {'flag': 300, 'per_hour': 4150, 'per_km': 245, 'v': 5}], 300),\n  ('normal control 3', [[[5, 28]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 396),\n  ('normal control 4',\n   [[[10, 0], [10, 49], [10, 110], [5, 7], [10, 20], [5, 10]],\n    {'flag': 390, 'per_hour': 3900, 'per_km': 245, 'v': 5}],\n   460)],\n [('regression: final rounding',\n   [[[10, 110], [10, 7], [1, 2]], {'flag': 390, 'per_hour': 3900, 'per_km': 245, 'v': 5}], 429),\n  ('partial repair probe: final rounding',\n   [[[0, 0], [30, 150]], {'flag': 390, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 425),\n  ('second regression',\n   [[[30, 149], [10, 7], [10, 110], [10, 53], [10, 110]],\n    {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}],\n   499),\n  ('normal control 1',\n   [[[5, 7], [10, 20], [10, 20], [30, 60], [0, 0], [30, 153]],\n    {'flag': 300, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   392),\n  ('normal control 2', [[[0, 0]], {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 300),\n  ('normal control 3',\n   [[[0, 0], [10, 50], [10, 49], [10, 7]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 422),\n  ('normal control 4',\n   [[[5, 25], [0, 0], [5, 0], [30, 150], [10, 50]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   447)],\n [('regression: final rounding',\n   [[[0, 3], [0, 0], [10, 110]], {'flag': 300, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 326),\n  ('partial repair probe: final rounding',\n   [[[10, 20], [30, 60], [10, 0], [30, 150]], {'flag': 300, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 385),\n  ('second regression',\n   [[[5, 55], [10, 7], [1, 8], [5, 55], [30, 330]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   504),\n  ('normal control 1', [[[5, 28]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 396),\n  ('normal control 2', [[[5, 25], [30, 60]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 426),\n  ('normal control 3', [[[5, 25], [1, 11]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 398),\n  ('normal control 4',\n   [[[5, 28], [30, 153], [10, 49], [0, 7], [1, 5], [1, 5]],\n    {'flag': 300, 'per_hour': 3600, 'per_km': 199, 'v': 5}],\n   349)],\n [('regression: final rounding', [[[1, 7]], {'flag': 300, 'per_hour': 3900, 'per_km': 245, 'v': 5}], 302),\n  ('partial repair probe: final rounding',\n   [[[30, 149]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 423),\n  ('second regression',\n   [[[1, 5], [30, 0], [30, 149], [10, 53]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 467),\n  ('normal control 1', [[[1, 11], [0, 3]], {'flag': 390, 'per_hour': 4150, 'per_km': 245, 'v': 5}], 393),\n  ('normal control 2',\n   [[[1, 7], [30, 153], [10, 110], [10, 53], [1, 5]], {'flag': 300, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   380),\n  ('normal control 3', [[[1, 2], [5, 24]], {'flag': 300, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 306),\n  ('normal control 4',\n   [[[10, 49], [5, 24], [10, 7], [10, 7], [5, 7]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}],\n   346)],\n [('regression: final rounding', [[[10, 50]], {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 312),\n  ('partial repair probe: final rounding',\n   [[[5, 25], [5, 25], [1, 0], [10, 7], [0, 0]], {'flag': 300, 'per_hour': 3600, 'per_km': 230, 'v': 5}],\n   323),\n  ('second regression', [[[1, 5], [10, 7]], {'flag': 300, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 312),\n  ('normal control 1', [[[30, 150], [10, 49]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 435),\n  ('normal control 2', [[[10, 50], [0, 7], [5, 10]], {'flag': 390, 'per_hour': 4150, 'per_km': 199, 'v': 5}],\n   407),\n  ('normal control 3', [[[30, 7]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 420),\n  ('normal control 4', [[[0, 7]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 391)]]\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":"6249f7a414d313b9513131c6baff9eb9ac3f0b9bc7fd9faade3da13b761a3eb3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(segments, rate):\n    acc = Fraction(0)\n    for dt, dm in segments:\n        if dm >= rate['v'] * dt:\n            acc += Fraction(dm * rate['per_km'], 1000)\n        else:\n            acc += Fraction(dt * rate['per_hour'], 3600)\n    cents = int(acc)\n    return rate['flag'] + cents\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: final rounding',\n   [[[5, 24], [0, 3], [10, 49], [1, 4]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 408),\n  ('partial repair probe: final rounding',\n   [[[0, 0], [30, 7]], {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 333),\n  ('second regression',\n   [[[5, 28], [5, 25], [5, 55], [10, 49], [30, 153]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   464),\n  ('normal control 1',\n   [[[5, 0], [30, 60], [10, 7], [10, 7], [5, 55], [10, 50]],\n    {'flag': 300, 'per_hour': 3900, 'per_km': 199, 'v': 5}],\n   380),\n  ('normal control 2', [[[0, 0]], {'flag': 300, 'per_hour': 4150, 'per_km': 245, 'v': 5}], 300),\n  ('normal control 3', [[[5, 28]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 396),\n  ('normal control 4',\n   [[[10, 0], [10, 49], [10, 110], [5, 7], [10, 20], [5, 10]],\n    {'flag': 390, 'per_hour': 3900, 'per_km': 245, 'v': 5}],\n   460)],\n [('regression: final rounding',\n   [[[10, 110], [10, 7], [1, 2]], {'flag': 390, 'per_hour': 3900, 'per_km': 245, 'v': 5}], 429),\n  ('partial repair probe: final rounding',\n   [[[0, 0], [30, 150]], {'flag': 390, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 425),\n  ('second regression',\n   [[[30, 149], [10, 7], [10, 110], [10, 53], [10, 110]],\n    {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}],\n   499),\n  ('normal control 1',\n   [[[5, 7], [10, 20], [10, 20], [30, 60], [0, 0], [30, 153]],\n    {'flag': 300, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   392),\n  ('normal control 2', [[[0, 0]], {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 300),\n  ('normal control 3',\n   [[[0, 0], [10, 50], [10, 49], [10, 7]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 422),\n  ('normal control 4',\n   [[[5, 25], [0, 0], [5, 0], [30, 150], [10, 50]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   447)],\n [('regression: final rounding',\n   [[[0, 3], [0, 0], [10, 110]], {'flag': 300, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 326),\n  ('partial repair probe: final rounding',\n   [[[10, 20], [30, 60], [10, 0], [30, 150]], {'flag': 300, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 385),\n  ('second regression',\n   [[[5, 55], [10, 7], [1, 8], [5, 55], [30, 330]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   504),\n  ('normal control 1', [[[5, 28]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 396),\n  ('normal control 2', [[[5, 25], [30, 60]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 426),\n  ('normal control 3', [[[5, 25], [1, 11]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 398),\n  ('normal control 4',\n   [[[5, 28], [30, 153], [10, 49], [0, 7], [1, 5], [1, 5]],\n    {'flag': 300, 'per_hour': 3600, 'per_km': 199, 'v': 5}],\n   349)],\n [('regression: final rounding', [[[1, 7]], {'flag': 300, 'per_hour': 3900, 'per_km': 245, 'v': 5}], 302),\n  ('partial repair probe: final rounding',\n   [[[30, 149]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 423),\n  ('second regression',\n   [[[1, 5], [30, 0], [30, 149], [10, 53]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 467),\n  ('normal control 1', [[[1, 11], [0, 3]], {'flag': 390, 'per_hour': 4150, 'per_km': 245, 'v': 5}], 393),\n  ('normal control 2',\n   [[[1, 7], [30, 153], [10, 110], [10, 53], [1, 5]], {'flag': 300, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   380),\n  ('normal control 3', [[[1, 2], [5, 24]], {'flag': 300, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 306),\n  ('normal control 4',\n   [[[10, 49], [5, 24], [10, 7], [10, 7], [5, 7]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}],\n   346)],\n [('regression: final rounding', [[[10, 50]], {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 312),\n  ('partial repair probe: final rounding',\n   [[[5, 25], [5, 25], [1, 0], [10, 7], [0, 0]], {'flag': 300, 'per_hour': 3600, 'per_km': 230, 'v': 5}],\n   323),\n  ('second regression', [[[1, 5], [10, 7]], {'flag': 300, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 312),\n  ('normal control 1', [[[30, 150], [10, 49]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 435),\n  ('normal control 2', [[[10, 50], [0, 7], [5, 10]], {'flag': 390, 'per_hour': 4150, 'per_km': 199, 'v': 5}],\n   407),\n  ('normal control 3', [[[30, 7]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 420),\n  ('normal control 4', [[[0, 7]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 391)]]\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 deterministic toy pricing contract stipulated for this example; it does not reproduce the pricing of any real ride-hailing operator or regulator. 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-ride-hailing-fare-surge-taximeter-single-tariff-final-rounding","generated_at":"2026-09-29T14:50:43.555429+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ride-hailing prices are computed per trip at scale; ordering, unit and boundary slips become systematic over- or under-charging.","root_cause":"The exact total is truncated.","sha256":"2f751968a0f2e21f2c39769107d86a8b6437ca7400aea518ec002604e9d8d8bf","title":"Meter total truncated · 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.507,"exit_code":1,"observations":[{"actual":408,"check":"regression: final rounding","expected":408,"passed":true},{"actual":332,"check":"partial repair probe: final rounding","expected":333,"passed":false},{"actual":464,"check":"second regression","expected":464,"passed":true},{"actual":380,"check":"normal control 1","expected":380,"passed":true},{"actual":300,"check":"normal control 2","expected":300,"passed":true},{"actual":396,"check":"normal control 3","expected":396,"passed":true},{"actual":460,"check":"normal control 4","expected":460,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: final rounding\", \"actual\": 408, \"expected\": 408, \"passed\": true}, {\"check\": \"partial repair probe: final rounding\", \"actual\": 332, \"expected\": 333, \"passed\": false}, {\"check\": \"second regression\", \"actual\": 464, \"expected\": 464, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": 380, \"expected\": 380, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 300, \"expected\": 300, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 396, \"expected\": 396, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": 460, \"expected\": 460, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.162,"exit_code":1,"observations":[{"actual":407,"check":"regression: final rounding","expected":408,"passed":false},{"actual":332,"check":"partial repair probe: final rounding","expected":333,"passed":false},{"actual":463,"check":"second regression","expected":464,"passed":false},{"actual":380,"check":"normal control 1","expected":380,"passed":true},{"actual":300,"check":"normal control 2","expected":300,"passed":true},{"actual":396,"check":"normal control 3","expected":396,"passed":true},{"actual":460,"check":"normal control 4","expected":460,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: final rounding\", \"actual\": 407, \"expected\": 408, \"passed\": false}, {\"check\": \"partial repair probe: final rounding\", \"actual\": 332, \"expected\": 333, \"passed\": false}, {\"check\": \"second regression\", \"actual\": 463, \"expected\": 464, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": 380, \"expected\": 380, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 300, \"expected\": 300, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 396, \"expected\": 396, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": 460, \"expected\": 460, \"passed\": true}], \"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."}}