{"abstract":"Trips with many short segments drift from the exact tariff.","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":"Rounding only distance segments still accumulates rounding drift.","family":"w2-ride-hailing-fare-surge-taximeter-single-tariff-per-segment-rounding","id":"FA-85776","implementations":{"attempt":{"sha256":"d72d68ccc4c29fbba44bedfdb376bb14530051142dcca5b081f1874a65009779","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 += (dm * rate['per_km'] * 2 + 1000) // 2000\n        else:\n            acc += Fraction(dt * rate['per_hour'], 3600)\n    cents = int(acc * 2 + 1) // 2\n    return rate['flag'] + cents\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: per-segment rounding',\n   [[[10, 7], [5, 10]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 317),\n  ('partial repair probe: per-segment rounding',\n   [[[0, 3], [5, 25], [10, 53], [10, 110]], {'flag': 300, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 338),\n  ('second regression', [[[1, 8], [10, 49]], {'flag': 390, 'per_hour': 4150, 'per_km': 245, 'v': 5}], 403),\n  ('normal control 1', [[[10, 20]], {'flag': 300, 'per_hour': 3600, 'per_km': 199, 'v': 5}], 310),\n  ('normal control 2', [[[30, 330], [10, 0], [5, 0]], {'flag': 300, 'per_hour': 3600, 'per_km': 199, 'v': 5}],\n   381),\n  ('normal control 3', [[[10, 0], [0, 0], [1, 7]], {'flag': 390, 'per_hour': 4150, 'per_km': 199, 'v': 5}],\n   403),\n  ('normal control 4', [[[0, 0], [10, 110]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 412)],\n [('regression: per-segment rounding',\n   [[[10, 7], [10, 50], [1, 0], [5, 7], [10, 110]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}],\n   355),\n  ('partial repair probe: per-segment rounding',\n   [[[1, 7], [1, 7], [30, 149]], {'flag': 390, 'per_hour': 3600, 'per_km': 199, 'v': 5}], 423),\n  ('second regression',\n   [[[0, 0], [10, 49], [10, 53], [30, 60], [30, 150]],\n    {'flag': 390, 'per_hour': 4150, 'per_km': 245, 'v': 5}],\n   486),\n  ('normal control 1', [[[0, 0], [5, 10], [0, 0]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}],\n   396),\n  ('normal control 2',\n   [[[10, 0], [0, 3], [1, 11], [10, 7]], {'flag': 300, 'per_hour': 3600, 'per_km': 199, 'v': 5}], 323),\n  ('normal control 3', [[[0, 0], [0, 0]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 300),\n  ('normal control 4', [[[1, 5], [10, 49]], {'flag': 300, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 311)],\n [('regression: per-segment rounding',\n   [[[30, 149], [1, 8], [30, 150], [30, 7], [30, 149]],\n    {'flag': 300, 'per_hour': 4150, 'per_km': 199, 'v': 5}],\n   435),\n  ('partial repair probe: per-segment rounding',\n   [[[10, 20], [1, 2], [30, 149], [10, 110]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 463),\n  ('second regression',\n   [[[0, 7], [5, 0], [10, 49], [5, 7], [5, 24]], {'flag': 390, 'per_hour': 4150, 'per_km': 245, 'v': 5}],\n   421),\n  ('normal control 1',\n   [[[30, 150], [0, 0], [30, 0], [5, 7], [30, 149], [10, 0]],\n    {'flag': 390, 'per_hour': 3600, 'per_km': 199, 'v': 5}],\n   495),\n  ('normal control 2', [[[30, 0], [10, 49]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 430),\n  ('normal control 3', [[[1, 7], [1, 8], [1, 4]], {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   305),\n  ('normal control 4', [[[10, 49]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 401)],\n [('regression: per-segment rounding',\n   [[[5, 10], [10, 49], [10, 50], [1, 0], [30, 7], [1, 5]],\n    {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   362),\n  ('partial repair probe: per-segment rounding',\n   [[[1, 8], [0, 0], [10, 50], [1, 7]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 405),\n  ('second regression',\n   [[[10, 7], [1, 4], [0, 7], [10, 50], [5, 24]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   420),\n  ('normal control 1', [[[30, 60], [10, 0], [10, 7]], {'flag': 390, 'per_hour': 3600, 'per_km': 230, 'v': 5}],\n   440),\n  ('normal control 2', [[[10, 7]], {'flag': 390, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 400),\n  ('normal control 3',\n   [[[10, 20], [30, 7], [0, 0], [30, 330], [1, 4]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   512),\n  ('normal control 4',\n   [[[10, 0], [10, 53], [1, 0], [1, 2], [0, 0]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   415)],\n [('regression: per-segment rounding',\n   [[[1, 5], [30, 330], [5, 7], [1, 4], [5, 28], [30, 0]],\n    {'flag': 390, 'per_hour': 3600, 'per_km': 199, 'v': 5}],\n   498),\n  ('partial repair probe: per-segment rounding',\n   [[[1, 11], [30, 149], [5, 25], [0, 0], [10, 110]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   456),\n  ('second regression',\n   [[[10, 0], [30, 7], [30, 60], [30, 330]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 457),\n  ('normal control 1', [[[1, 8]], {'flag': 390, 'per_hour': 3900, 'per_km': 245, 'v': 5}], 392),\n  ('normal control 2', [[[10, 0], [0, 0]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 400),\n  ('normal control 3', [[[10, 20]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 402),\n  ('normal control 4',\n   [[[0, 0], [10, 53], [30, 149], [10, 50], [10, 50], [1, 7]],\n    {'flag': 300, 'per_hour': 3900, 'per_km': 245, 'v': 5}],\n   372)]]\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":"1b3ec7d6d1880638f7d3354507f9e1177680a19954438c4b80b835cb1d094e4e","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 += (dm * rate['per_km'] * 2 + 1000) // 2000\n        else:\n            acc += (dt * rate['per_hour'] * 2 + 3600) // 7200\n    cents = int(acc * 2 + 1) // 2\n    return rate['flag'] + cents\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: per-segment rounding',\n   [[[10, 7], [5, 10]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 317),\n  ('partial repair probe: per-segment rounding',\n   [[[0, 3], [5, 25], [10, 53], [10, 110]], {'flag': 300, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 338),\n  ('second regression', [[[1, 8], [10, 49]], {'flag': 390, 'per_hour': 4150, 'per_km': 245, 'v': 5}], 403),\n  ('normal control 1', [[[10, 20]], {'flag': 300, 'per_hour': 3600, 'per_km': 199, 'v': 5}], 310),\n  ('normal control 2', [[[30, 330], [10, 0], [5, 0]], {'flag': 300, 'per_hour': 3600, 'per_km': 199, 'v': 5}],\n   381),\n  ('normal control 3', [[[10, 0], [0, 0], [1, 7]], {'flag': 390, 'per_hour': 4150, 'per_km': 199, 'v': 5}],\n   403),\n  ('normal control 4', [[[0, 0], [10, 110]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 412)],\n [('regression: per-segment rounding',\n   [[[10, 7], [10, 50], [1, 0], [5, 7], [10, 110]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}],\n   355),\n  ('partial repair probe: per-segment rounding',\n   [[[1, 7], [1, 7], [30, 149]], {'flag': 390, 'per_hour': 3600, 'per_km': 199, 'v': 5}], 423),\n  ('second regression',\n   [[[0, 0], [10, 49], [10, 53], [30, 60], [30, 150]],\n    {'flag': 390, 'per_hour': 4150, 'per_km': 245, 'v': 5}],\n   486),\n  ('normal control 1', [[[0, 0], [5, 10], [0, 0]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}],\n   396),\n  ('normal control 2',\n   [[[10, 0], [0, 3], [1, 11], [10, 7]], {'flag': 300, 'per_hour': 3600, 'per_km': 199, 'v': 5}], 323),\n  ('normal control 3', [[[0, 0], [0, 0]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 300),\n  ('normal control 4', [[[1, 5], [10, 49]], {'flag': 300, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 311)],\n [('regression: per-segment rounding',\n   [[[30, 149], [1, 8], [30, 150], [30, 7], [30, 149]],\n    {'flag': 300, 'per_hour': 4150, 'per_km': 199, 'v': 5}],\n   435),\n  ('partial repair probe: per-segment rounding',\n   [[[10, 20], [1, 2], [30, 149], [10, 110]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 463),\n  ('second regression',\n   [[[0, 7], [5, 0], [10, 49], [5, 7], [5, 24]], {'flag': 390, 'per_hour': 4150, 'per_km': 245, 'v': 5}],\n   421),\n  ('normal control 1',\n   [[[30, 150], [0, 0], [30, 0], [5, 7], [30, 149], [10, 0]],\n    {'flag': 390, 'per_hour': 3600, 'per_km': 199, 'v': 5}],\n   495),\n  ('normal control 2', [[[30, 0], [10, 49]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 430),\n  ('normal control 3', [[[1, 7], [1, 8], [1, 4]], {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   305),\n  ('normal control 4', [[[10, 49]], {'flag': 390, 'per_hour': 3900, 'per_km': 199, 'v': 5}], 401)],\n [('regression: per-segment rounding',\n   [[[5, 10], [10, 49], [10, 50], [1, 0], [30, 7], [1, 5]],\n    {'flag': 300, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   362),\n  ('partial repair probe: per-segment rounding',\n   [[[1, 8], [0, 0], [10, 50], [1, 7]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}], 405),\n  ('second regression',\n   [[[10, 7], [1, 4], [0, 7], [10, 50], [5, 24]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   420),\n  ('normal control 1', [[[30, 60], [10, 0], [10, 7]], {'flag': 390, 'per_hour': 3600, 'per_km': 230, 'v': 5}],\n   440),\n  ('normal control 2', [[[10, 7]], {'flag': 390, 'per_hour': 3600, 'per_km': 230, 'v': 5}], 400),\n  ('normal control 3',\n   [[[10, 20], [30, 7], [0, 0], [30, 330], [1, 4]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   512),\n  ('normal control 4',\n   [[[10, 0], [10, 53], [1, 0], [1, 2], [0, 0]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}],\n   415)],\n [('regression: per-segment rounding',\n   [[[1, 5], [30, 330], [5, 7], [1, 4], [5, 28], [30, 0]],\n    {'flag': 390, 'per_hour': 3600, 'per_km': 199, 'v': 5}],\n   498),\n  ('partial repair probe: per-segment rounding',\n   [[[1, 11], [30, 149], [5, 25], [0, 0], [10, 110]], {'flag': 390, 'per_hour': 3900, 'per_km': 230, 'v': 5}],\n   456),\n  ('second regression',\n   [[[10, 0], [30, 7], [30, 60], [30, 330]], {'flag': 300, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 457),\n  ('normal control 1', [[[1, 8]], {'flag': 390, 'per_hour': 3900, 'per_km': 245, 'v': 5}], 392),\n  ('normal control 2', [[[10, 0], [0, 0]], {'flag': 390, 'per_hour': 3600, 'per_km': 245, 'v': 5}], 400),\n  ('normal control 3', [[[10, 20]], {'flag': 390, 'per_hour': 4150, 'per_km': 230, 'v': 5}], 402),\n  ('normal control 4',\n   [[[0, 0], [10, 53], [30, 149], [10, 50], [10, 50], [1, 7]],\n    {'flag': 300, 'per_hour': 3900, 'per_km': 245, 'v': 5}],\n   372)]]\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-per-segment-rounding","generated_at":"2026-09-29T14:50:43.518971+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":"Each segment charge is rounded before accumulation.","sha256":"09b2cc5783dce5e4437fdb37b6fd6b21c6e1cc858ea4d242d81c7e86a32e2529","title":"Meter rounds every segment to a cent · 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":42.43,"exit_code":1,"observations":[{"actual":317,"check":"regression: per-segment rounding","expected":317,"passed":true},{"actual":339,"check":"partial repair probe: per-segment rounding","expected":338,"passed":false},{"actual":404,"check":"second regression","expected":403,"passed":false},{"actual":310,"check":"normal control 1","expected":310,"passed":true},{"actual":381,"check":"normal control 2","expected":381,"passed":true},{"actual":403,"check":"normal control 3","expected":403,"passed":true},{"actual":412,"check":"normal control 4","expected":412,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: per-segment rounding\", \"actual\": 317, \"expected\": 317, \"passed\": true}, {\"check\": \"partial repair probe: per-segment rounding\", \"actual\": 339, \"expected\": 338, \"passed\": false}, {\"check\": \"second regression\", \"actual\": 404, \"expected\": 403, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": 310, \"expected\": 310, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 381, \"expected\": 381, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 403, \"expected\": 403, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": 412, \"expected\": 412, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.97,"exit_code":1,"observations":[{"actual":318,"check":"regression: per-segment rounding","expected":317,"passed":false},{"actual":339,"check":"partial repair probe: per-segment rounding","expected":338,"passed":false},{"actual":404,"check":"second regression","expected":403,"passed":false},{"actual":310,"check":"normal control 1","expected":310,"passed":true},{"actual":381,"check":"normal control 2","expected":381,"passed":true},{"actual":403,"check":"normal control 3","expected":403,"passed":true},{"actual":412,"check":"normal control 4","expected":412,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: per-segment rounding\", \"actual\": 318, \"expected\": 317, \"passed\": false}, {\"check\": \"partial repair probe: per-segment rounding\", \"actual\": 339, \"expected\": 338, \"passed\": false}, {\"check\": \"second regression\", \"actual\": 404, \"expected\": 403, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": 310, \"expected\": 310, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 381, \"expected\": 381, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 403, \"expected\": 403, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": 412, \"expected\": 412, \"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."}}