{"abstract":"Receipts cite added stops when the rider also changed the destination.","category":"Ride-hailing fare and surge pricing","checks":7,"contract":"An upfront quote is honored unless (checked in this order) the destination changed, stops were added, actual distance exceeds the estimate by more than 25% (m*4 > est*5), or actual time exceeds it by more than 50% (s*2 > est*3). Otherwise-recomputed fares use actual meters and seconds: base + half-up(m*per_km/1000) + half-up(s*per_min/60). Return the charge and the reason code.","contract_signature":"quote, actual, rate","evaluation_group":"w2-ride-hailing-fare-surge-upfront-price-honor","failed_approach":"Merging both checks labels stop-only changes as destination changes.","family":"w2-ride-hailing-fare-surge-upfront-price-honor-reason-precedence","id":"FA-85416","implementations":{"attempt":{"sha256":"68bc7ce599dd3c99bc31aa58730c4c27ccee3903eae6d6f1dd37351bc7025c8b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(quote, actual, rate):\n    def metered():\n        return rate['base'] + (actual['m'] * rate['per_km'] * 2 + 1000) // 2000 + (actual['s'] * rate['per_min'] * 2 + 60) // 120\n    if actual['dest'] != quote['dest'] or actual['stops_added'] > 0:\n        reason = 'destination'\n    elif actual['m'] * 4 > quote['est_m'] * 5:\n        reason = 'distance'\n    elif actual['s'] * 2 > quote['est_s'] * 3:\n        reason = 'time'\n    else:\n        reason = 'quote'\n    charged = quote['price'] if reason == 'quote' else metered()\n    return {'charged': charged, 'reason': reason}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1801, 'price': 3999},\n    {'dest': 'D2', 'm': 6000, 's': 2702, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 2526, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1801, 'price': 3999},\n    {'dest': 'D1', 'm': 10001, 's': 1701, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1867, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1200, 'price': 3999},\n    {'dest': 'D1', 'm': 8001, 's': 1100, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1722, 'reason': 'stops'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 1801, 'price': 2100},\n    {'dest': 'D1', 'm': 1253, 's': 2701, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1914, 'reason': 'distance'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D1', 'm': 4000, 's': 2701, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1250, 'reason': 'quote'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1200, 'price': 2100},\n    {'dest': 'D1', 'm': 8001, 's': 1200, 'stops_added': 0}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 2100, 'reason': 'quote'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 1801, 'price': 3999},\n    {'dest': 'D1', 'm': 1253, 's': 3602, 'stops_added': 0}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 1558, 'reason': 'distance'})],\n [('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D2', 'm': 4000, 's': 2701, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 2276, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 900, 'price': 2100},\n    {'dest': 'D1', 'm': 1503, 's': 1800, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 965, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 7801, 's': 1202, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1759, 'reason': 'stops'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 900, 'price': 3999},\n    {'dest': 'D1', 'm': 802, 's': 1350, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 3999, 'reason': 'quote'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 1253, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 639, 'reason': 'distance'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 2100},\n    {'dest': 'D1', 'm': 8001, 's': 601, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 2100, 'reason': 'quote'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1200, 'price': 2100},\n    {'dest': 'D1', 'm': 8001, 's': 1100, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 2100, 'reason': 'quote'})],\n [('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D2', 'm': 1253, 's': 1701, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 905, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 900, 'price': 1250},\n    {'dest': 'D1', 'm': 10001, 's': 1351, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 2088, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 2100},\n    {'dest': 'D1', 'm': 8001, 's': 901, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 1726, 'reason': 'stops'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 900, 'price': 1250},\n    {'dest': 'D1', 'm': 7801, 's': 1351, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1846, 'reason': 'time'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 10000, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 9800, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1579, 'reason': 'time'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 10001, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1826, 'reason': 'time'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D1', 'm': 10002, 's': 2701, 'stops_added': 0}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 2350, 'reason': 'distance'})],\n [('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1801, 'price': 2100},\n    {'dest': 'D2', 'm': 12001, 's': 2702, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 2421, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 900, 'price': 2100},\n    {'dest': 'D1', 'm': 7801, 's': 800, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 1642, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1200, 'price': 1250},\n    {'dest': 'D1', 'm': 5000, 's': 2400, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 1625, 'reason': 'stops'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D1', 'm': 5000, 's': 3602, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 2851, 'reason': 'time'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 3999},\n    {'dest': 'D1', 'm': 8001, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1381, 'reason': 'time'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 601, 'price': 3999},\n    {'dest': 'D1', 'm': 6000, 's': 601, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1060, 'reason': 'distance'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 10000, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 12501, 's': 1202, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1976, 'reason': 'distance'})],\n [('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 900, 'price': 2100},\n    {'dest': 'D2', 'm': 10002, 's': 1351, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 1900, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 1002, 's': 901, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 610, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 601, 'price': 2100},\n    {'dest': 'D2', 'm': 1253, 's': 1202, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 1058, 'reason': 'destination'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 10000, 'est_s': 1200, 'price': 1250},\n    {'dest': 'D2', 'm': 9800, 's': 2400, 'stops_added': 0}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 2225, 'reason': 'destination'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 601, 'price': 1250},\n    {'dest': 'D2', 'm': 5001, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1051, 'reason': 'destination'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 601, 'price': 3999},\n    {'dest': 'D2', 'm': 4000, 's': 601, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 991, 'reason': 'destination'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 601, 'price': 2100},\n    {'dest': 'D1', 'm': 802, 's': 1202, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 689, 'reason': 'time'})]]\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":"7d8435ae3057ef38141b80db1ecc0a716ed58083aecfa6961dee47b6c626b733","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(quote, actual, rate):\n    def metered():\n        return rate['base'] + (actual['m'] * rate['per_km'] * 2 + 1000) // 2000 + (actual['s'] * rate['per_min'] * 2 + 60) // 120\n    if actual['stops_added'] > 0:\n        reason = 'stops'\n    elif actual['dest'] != quote['dest']:\n        reason = 'destination'\n    elif actual['m'] * 4 > quote['est_m'] * 5:\n        reason = 'distance'\n    elif actual['s'] * 2 > quote['est_s'] * 3:\n        reason = 'time'\n    else:\n        reason = 'quote'\n    charged = quote['price'] if reason == 'quote' else metered()\n    return {'charged': charged, 'reason': reason}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1801, 'price': 3999},\n    {'dest': 'D2', 'm': 6000, 's': 2702, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 2526, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1801, 'price': 3999},\n    {'dest': 'D1', 'm': 10001, 's': 1701, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1867, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1200, 'price': 3999},\n    {'dest': 'D1', 'm': 8001, 's': 1100, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1722, 'reason': 'stops'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 1801, 'price': 2100},\n    {'dest': 'D1', 'm': 1253, 's': 2701, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1914, 'reason': 'distance'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D1', 'm': 4000, 's': 2701, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1250, 'reason': 'quote'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1200, 'price': 2100},\n    {'dest': 'D1', 'm': 8001, 's': 1200, 'stops_added': 0}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 2100, 'reason': 'quote'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 1801, 'price': 3999},\n    {'dest': 'D1', 'm': 1253, 's': 3602, 'stops_added': 0}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 1558, 'reason': 'distance'})],\n [('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D2', 'm': 4000, 's': 2701, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 2276, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 900, 'price': 2100},\n    {'dest': 'D1', 'm': 1503, 's': 1800, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 965, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 7801, 's': 1202, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1759, 'reason': 'stops'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 900, 'price': 3999},\n    {'dest': 'D1', 'm': 802, 's': 1350, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 3999, 'reason': 'quote'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 1253, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 639, 'reason': 'distance'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 2100},\n    {'dest': 'D1', 'm': 8001, 's': 601, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 2100, 'reason': 'quote'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1200, 'price': 2100},\n    {'dest': 'D1', 'm': 8001, 's': 1100, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 2100, 'reason': 'quote'})],\n [('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D2', 'm': 1253, 's': 1701, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 905, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 900, 'price': 1250},\n    {'dest': 'D1', 'm': 10001, 's': 1351, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 2088, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 2100},\n    {'dest': 'D1', 'm': 8001, 's': 901, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 1726, 'reason': 'stops'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 900, 'price': 1250},\n    {'dest': 'D1', 'm': 7801, 's': 1351, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1846, 'reason': 'time'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 10000, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 9800, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1579, 'reason': 'time'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 10001, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 1826, 'reason': 'time'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D1', 'm': 10002, 's': 2701, 'stops_added': 0}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 2350, 'reason': 'distance'})],\n [('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 1801, 'price': 2100},\n    {'dest': 'D2', 'm': 12001, 's': 2702, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 2421, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 900, 'price': 2100},\n    {'dest': 'D1', 'm': 7801, 's': 800, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 1642, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1200, 'price': 1250},\n    {'dest': 'D1', 'm': 5000, 's': 2400, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 1625, 'reason': 'stops'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 1801, 'price': 1250},\n    {'dest': 'D1', 'm': 5000, 's': 3602, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 2851, 'reason': 'time'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 601, 'price': 3999},\n    {'dest': 'D1', 'm': 8001, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1381, 'reason': 'time'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 601, 'price': 3999},\n    {'dest': 'D1', 'm': 6000, 's': 601, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1060, 'reason': 'distance'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 10000, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 12501, 's': 1202, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1976, 'reason': 'distance'})],\n [('regression: reason precedence',\n   [{'dest': 'D1', 'est_m': 8001, 'est_s': 900, 'price': 2100},\n    {'dest': 'D2', 'm': 10002, 's': 1351, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 1900, 'reason': 'destination'}),\n  ('partial repair probe: reason precedence',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 601, 'price': 1250},\n    {'dest': 'D1', 'm': 1002, 's': 901, 'stops_added': 1}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 610, 'reason': 'stops'}),\n  ('second regression',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 601, 'price': 2100},\n    {'dest': 'D2', 'm': 1253, 's': 1202, 'stops_added': 1}, {'base': 200, 'per_km': 125, 'per_min': 35}],\n   {'charged': 1058, 'reason': 'destination'}),\n  ('normal control 1',\n   [{'dest': 'D1', 'est_m': 10000, 'est_s': 1200, 'price': 1250},\n    {'dest': 'D2', 'm': 9800, 's': 2400, 'stops_added': 0}, {'base': 200, 'per_km': 125, 'per_min': 20}],\n   {'charged': 2225, 'reason': 'destination'}),\n  ('normal control 2',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 601, 'price': 1250},\n    {'dest': 'D2', 'm': 5001, 's': 902, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 1051, 'reason': 'destination'}),\n  ('normal control 3',\n   [{'dest': 'D1', 'est_m': 4000, 'est_s': 601, 'price': 3999},\n    {'dest': 'D2', 'm': 4000, 's': 601, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 35}],\n   {'charged': 991, 'reason': 'destination'}),\n  ('normal control 4',\n   [{'dest': 'D1', 'est_m': 1002, 'est_s': 601, 'price': 2100},\n    {'dest': 'D1', 'm': 802, 's': 1202, 'stops_added': 0}, {'base': 200, 'per_km': 110, 'per_min': 20}],\n   {'charged': 689, 'reason': 'time'})]]\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-upfront-price-honor-reason-precedence","generated_at":"2026-09-29T14:50:40.242657+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 stop check runs before the destination check.","sha256":"b47aba7edb56fc7b1354cf95f78211f3e24e5c3ced47f7fe5d89dc16f92065c4","title":"Added stop reported instead of destination change · 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":39.4,"exit_code":1,"observations":[{"actual":{"charged":2526,"reason":"destination"},"check":"regression: reason precedence","expected":{"charged":2526,"reason":"destination"},"passed":true},{"actual":{"charged":1867,"reason":"destination"},"check":"partial repair probe: reason precedence","expected":{"charged":1867,"reason":"stops"},"passed":false},{"actual":{"charged":1722,"reason":"destination"},"check":"second regression","expected":{"charged":1722,"reason":"stops"},"passed":false},{"actual":{"charged":1914,"reason":"distance"},"check":"normal control 1","expected":{"charged":1914,"reason":"distance"},"passed":true},{"actual":{"charged":1250,"reason":"quote"},"check":"normal control 2","expected":{"charged":1250,"reason":"quote"},"passed":true},{"actual":{"charged":2100,"reason":"quote"},"check":"normal control 3","expected":{"charged":2100,"reason":"quote"},"passed":true},{"actual":{"charged":1558,"reason":"distance"},"check":"normal control 4","expected":{"charged":1558,"reason":"distance"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: reason precedence\", \"actual\": {\"charged\": 2526, \"reason\": \"destination\"}, \"expected\": {\"charged\": 2526, \"reason\": \"destination\"}, \"passed\": true}, {\"check\": \"partial repair probe: reason precedence\", \"actual\": {\"charged\": 1867, \"reason\": \"destination\"}, \"expected\": {\"charged\": 1867, \"reason\": \"stops\"}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"charged\": 1722, \"reason\": \"destination\"}, \"expected\": {\"charged\": 1722, \"reason\": \"stops\"}, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": {\"charged\": 1914, \"reason\": \"distance\"}, \"expected\": {\"charged\": 1914, \"reason\": \"distance\"}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"charged\": 1250, \"reason\": \"quote\"}, \"expected\": {\"charged\": 1250, \"reason\": \"quote\"}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"charged\": 2100, \"reason\": \"quote\"}, \"expected\": {\"charged\": 2100, \"reason\": \"quote\"}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"charged\": 1558, \"reason\": \"distance\"}, \"expected\": {\"charged\": 1558, \"reason\": \"distance\"}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.539,"exit_code":1,"observations":[{"actual":{"charged":2526,"reason":"stops"},"check":"regression: reason precedence","expected":{"charged":2526,"reason":"destination"},"passed":false},{"actual":{"charged":1867,"reason":"stops"},"check":"partial repair probe: reason precedence","expected":{"charged":1867,"reason":"stops"},"passed":true},{"actual":{"charged":1722,"reason":"stops"},"check":"second regression","expected":{"charged":1722,"reason":"stops"},"passed":true},{"actual":{"charged":1914,"reason":"distance"},"check":"normal control 1","expected":{"charged":1914,"reason":"distance"},"passed":true},{"actual":{"charged":1250,"reason":"quote"},"check":"normal control 2","expected":{"charged":1250,"reason":"quote"},"passed":true},{"actual":{"charged":2100,"reason":"quote"},"check":"normal control 3","expected":{"charged":2100,"reason":"quote"},"passed":true},{"actual":{"charged":1558,"reason":"distance"},"check":"normal control 4","expected":{"charged":1558,"reason":"distance"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: reason precedence\", \"actual\": {\"charged\": 2526, \"reason\": \"stops\"}, \"expected\": {\"charged\": 2526, \"reason\": \"destination\"}, \"passed\": false}, {\"check\": \"partial repair probe: reason precedence\", \"actual\": {\"charged\": 1867, \"reason\": \"stops\"}, \"expected\": {\"charged\": 1867, \"reason\": \"stops\"}, \"passed\": true}, {\"check\": \"second regression\", \"actual\": {\"charged\": 1722, \"reason\": \"stops\"}, \"expected\": {\"charged\": 1722, \"reason\": \"stops\"}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"charged\": 1914, \"reason\": \"distance\"}, \"expected\": {\"charged\": 1914, \"reason\": \"distance\"}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"charged\": 1250, \"reason\": \"quote\"}, \"expected\": {\"charged\": 1250, \"reason\": \"quote\"}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"charged\": 2100, \"reason\": \"quote\"}, \"expected\": {\"charged\": 2100, \"reason\": \"quote\"}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"charged\": 1558, \"reason\": \"distance\"}, \"expected\": {\"charged\": 1558, \"reason\": \"distance\"}, \"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."}}