FAILURE MAP
← Case archive

FA-85796 / Ride-hailing fare and surge pricing / Open access

No member discount at exactly 1.5x · case 01

Members lose the 10% discount at 1.5x surge.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The discount eligibility test is strict.

VERIFIED REPAIR

Discount when surge is at most 15 tenths.

Unsuccessful approach: Testing the raw surge below 2.0x discounts 1.7x trips.

Case contract

Membership is active if the flag is set and today is on or before the expiry day. Active members have surge capped at 2.0x (20 tenths) and, when the (capped) surge is at most 1.5x, get 10% off the surged fare (floored); fees are never discounted. Return the amount due in cents.

Why this case matters

Ride-hailing prices are computed per trip at scale; ordering, unit and boundary slips become systematic over- or under-charging.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(fare, member, now):
    active = member['active'] and now <= member['expires']
    surge = fare['surge']
    if active:
        surge = min(surge, 20)
    surged = (fare['core'] * surge * 2 + 10) // 20
    disc = 0
    if active and surge < 15:
        disc = surged // 10
    return surged - disc + fare['fees']
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: discount surge boundary',
   [{'core': 1234, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 99], 1865),
  ('partial repair probe: discount surge boundary',
   [{'core': 1000, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 99], 1899),
  ('second regression', [{'core': 999, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 100],
   1897),
  ('normal control 1', [{'core': 1000, 'fees': 0, 'surge': 25}, {'active': False, 'expires': 100}, 99], 2500),
  ('normal control 2', [{'core': 2555, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 101], 7665),
  ('normal control 3', [{'core': 999, 'fees': 0, 'surge': 17}, {'active': False, 'expires': 100}, 99], 1698),
  ('normal control 4', [{'core': 1000, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 101],
   3250)],
 [('regression: discount surge boundary',
   [{'core': 2555, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100], 3649),
  ('partial repair probe: discount surge boundary',
   [{'core': 1234, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 100], 2297),
  ('second regression', [{'core': 1000, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100],
   1549),
  ('normal control 1', [{'core': 999, 'fees': 245, 'surge': 12}, {'active': True, 'expires': 100}, 100],
   1325),
  ('normal control 2', [{'core': 1234, 'fees': 0, 'surge': 12}, {'active': True, 'expires': 100}, 100], 1333),
  ('normal control 3', [{'core': 1234, 'fees': 199, 'surge': 12}, {'active': False, 'expires': 100}, 101],
   1680),
  ('normal control 4', [{'core': 999, 'fees': 245, 'surge': 25}, {'active': True, 'expires': 100}, 99],
   2243)],
 [('regression: discount surge boundary',
   [{'core': 999, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100], 1549),
  ('partial repair probe: discount surge boundary',
   [{'core': 1000, 'fees': 245, 'surge': 17}, {'active': True, 'expires': 100}, 100], 1945),
  ('second regression', [{'core': 1234, 'fees': 250, 'surge': 17}, {'active': True, 'expires': 100}, 100],
   2348),
  ('normal control 1', [{'core': 1234, 'fees': 0, 'surge': 10}, {'active': True, 'expires': 100}, 99], 1111),
  ('normal control 2', [{'core': 1000, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100],
   2250),
  ('normal control 3', [{'core': 1234, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 99], 2468),
  ('normal control 4', [{'core': 1000, 'fees': 0, 'surge': 30}, {'active': False, 'expires': 100}, 100],
   3000)],
 [('regression: discount surge boundary',
   [{'core': 1000, 'fees': 0, 'surge': 15}, {'active': True, 'expires': 100}, 100], 1350),
  ('partial repair probe: discount surge boundary',
   [{'core': 999, 'fees': 245, 'surge': 17}, {'active': True, 'expires': 100}, 100], 1943),
  ('second regression', [{'core': 1234, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100],
   1865),
  ('normal control 1', [{'core': 2555, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100],
   5360),
  ('normal control 2', [{'core': 999, 'fees': 0, 'surge': 20}, {'active': True, 'expires': 100}, 100], 1998),
  ('normal control 3', [{'core': 2555, 'fees': 250, 'surge': 20}, {'active': True, 'expires': 100}, 99],
   5360),
  ('normal control 4', [{'core': 1000, 'fees': 245, 'surge': 12}, {'active': False, 'expires': 100}, 100],
   1445)],
 [('regression: discount surge boundary',
   [{'core': 1234, 'fees': 245, 'surge': 15}, {'active': True, 'expires': 100}, 100], 1911),
  ('partial repair probe: discount surge boundary',
   [{'core': 2555, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 99], 4543),
  ('second regression', [{'core': 1000, 'fees': 250, 'surge': 17}, {'active': True, 'expires': 100}, 100],
   1950),
  ('normal control 1', [{'core': 1000, 'fees': 0, 'surge': 20}, {'active': True, 'expires': 100}, 100], 2000),
  ('normal control 2', [{'core': 999, 'fees': 0, 'surge': 25}, {'active': True, 'expires': 100}, 99], 1998),
  ('normal control 3', [{'core': 999, 'fees': 199, 'surge': 20}, {'active': True, 'expires': 100}, 100],
   2197),
  ('normal control 4', [{'core': 1000, 'fees': 250, 'surge': 12}, {'active': True, 'expires': 100}, 101],
   1450)]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: discount surge boundary20501865Failed
partial repair probe: discount surge boundary18991899Passed
second regression18971897Passed
normal control 125002500Passed
normal control 276657665Passed
normal control 316981698Passed
normal control 432503250Passed

SHA-256 / 0dd213092a035dd1751501495b9e9cc6e52da0cbdcdb420a029dca346bb268d4

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(fare, member, now):
    active = member['active'] and now <= member['expires']
    surge = fare['surge']
    if active:
        surge = min(surge, 20)
    surged = (fare['core'] * surge * 2 + 10) // 20
    disc = 0
    if active and fare['surge'] < 20:
        disc = surged // 10
    return surged - disc + fare['fees']
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: discount surge boundary',
   [{'core': 1234, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 99], 1865),
  ('partial repair probe: discount surge boundary',
   [{'core': 1000, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 99], 1899),
  ('second regression', [{'core': 999, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 100],
   1897),
  ('normal control 1', [{'core': 1000, 'fees': 0, 'surge': 25}, {'active': False, 'expires': 100}, 99], 2500),
  ('normal control 2', [{'core': 2555, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 101], 7665),
  ('normal control 3', [{'core': 999, 'fees': 0, 'surge': 17}, {'active': False, 'expires': 100}, 99], 1698),
  ('normal control 4', [{'core': 1000, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 101],
   3250)],
 [('regression: discount surge boundary',
   [{'core': 2555, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100], 3649),
  ('partial repair probe: discount surge boundary',
   [{'core': 1234, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 100], 2297),
  ('second regression', [{'core': 1000, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100],
   1549),
  ('normal control 1', [{'core': 999, 'fees': 245, 'surge': 12}, {'active': True, 'expires': 100}, 100],
   1325),
  ('normal control 2', [{'core': 1234, 'fees': 0, 'surge': 12}, {'active': True, 'expires': 100}, 100], 1333),
  ('normal control 3', [{'core': 1234, 'fees': 199, 'surge': 12}, {'active': False, 'expires': 100}, 101],
   1680),
  ('normal control 4', [{'core': 999, 'fees': 245, 'surge': 25}, {'active': True, 'expires': 100}, 99],
   2243)],
 [('regression: discount surge boundary',
   [{'core': 999, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100], 1549),
  ('partial repair probe: discount surge boundary',
   [{'core': 1000, 'fees': 245, 'surge': 17}, {'active': True, 'expires': 100}, 100], 1945),
  ('second regression', [{'core': 1234, 'fees': 250, 'surge': 17}, {'active': True, 'expires': 100}, 100],
   2348),
  ('normal control 1', [{'core': 1234, 'fees': 0, 'surge': 10}, {'active': True, 'expires': 100}, 99], 1111),
  ('normal control 2', [{'core': 1000, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100],
   2250),
  ('normal control 3', [{'core': 1234, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 99], 2468),
  ('normal control 4', [{'core': 1000, 'fees': 0, 'surge': 30}, {'active': False, 'expires': 100}, 100],
   3000)],
 [('regression: discount surge boundary',
   [{'core': 1000, 'fees': 0, 'surge': 15}, {'active': True, 'expires': 100}, 100], 1350),
  ('partial repair probe: discount surge boundary',
   [{'core': 999, 'fees': 245, 'surge': 17}, {'active': True, 'expires': 100}, 100], 1943),
  ('second regression', [{'core': 1234, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100],
   1865),
  ('normal control 1', [{'core': 2555, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100],
   5360),
  ('normal control 2', [{'core': 999, 'fees': 0, 'surge': 20}, {'active': True, 'expires': 100}, 100], 1998),
  ('normal control 3', [{'core': 2555, 'fees': 250, 'surge': 20}, {'active': True, 'expires': 100}, 99],
   5360),
  ('normal control 4', [{'core': 1000, 'fees': 245, 'surge': 12}, {'active': False, 'expires': 100}, 100],
   1445)],
 [('regression: discount surge boundary',
   [{'core': 1234, 'fees': 245, 'surge': 15}, {'active': True, 'expires': 100}, 100], 1911),
  ('partial repair probe: discount surge boundary',
   [{'core': 2555, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 99], 4543),
  ('second regression', [{'core': 1000, 'fees': 250, 'surge': 17}, {'active': True, 'expires': 100}, 100],
   1950),
  ('normal control 1', [{'core': 1000, 'fees': 0, 'surge': 20}, {'active': True, 'expires': 100}, 100], 2000),
  ('normal control 2', [{'core': 999, 'fees': 0, 'surge': 25}, {'active': True, 'expires': 100}, 99], 1998),
  ('normal control 3', [{'core': 999, 'fees': 199, 'surge': 20}, {'active': True, 'expires': 100}, 100],
   2197),
  ('normal control 4', [{'core': 1000, 'fees': 250, 'surge': 12}, {'active': True, 'expires': 100}, 101],
   1450)]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: discount surge boundary18651865Passed
partial repair probe: discount surge boundary17291899Failed
second regression17281897Failed
normal control 125002500Passed
normal control 276657665Passed
normal control 316981698Passed
normal control 432503250Passed

SHA-256 / d1bfdbd11e14429e40988ac60f1d3e7f2a1a1a502b478df5adfed51695a16a35

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(fare, member, now):
    active = member['active'] and now <= member['expires']
    surge = fare['surge']
    if active:
        surge = min(surge, 20)
    surged = (fare['core'] * surge * 2 + 10) // 20
    disc = 0
    if active and surge <= 15:
        disc = surged // 10
    return surged - disc + fare['fees']
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: discount surge boundary',
   [{'core': 1234, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 99], 1865),
  ('partial repair probe: discount surge boundary',
   [{'core': 1000, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 99], 1899),
  ('second regression', [{'core': 999, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 100],
   1897),
  ('normal control 1', [{'core': 1000, 'fees': 0, 'surge': 25}, {'active': False, 'expires': 100}, 99], 2500),
  ('normal control 2', [{'core': 2555, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 101], 7665),
  ('normal control 3', [{'core': 999, 'fees': 0, 'surge': 17}, {'active': False, 'expires': 100}, 99], 1698),
  ('normal control 4', [{'core': 1000, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 101],
   3250)],
 [('regression: discount surge boundary',
   [{'core': 2555, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100], 3649),
  ('partial repair probe: discount surge boundary',
   [{'core': 1234, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 100], 2297),
  ('second regression', [{'core': 1000, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100],
   1549),
  ('normal control 1', [{'core': 999, 'fees': 245, 'surge': 12}, {'active': True, 'expires': 100}, 100],
   1325),
  ('normal control 2', [{'core': 1234, 'fees': 0, 'surge': 12}, {'active': True, 'expires': 100}, 100], 1333),
  ('normal control 3', [{'core': 1234, 'fees': 199, 'surge': 12}, {'active': False, 'expires': 100}, 101],
   1680),
  ('normal control 4', [{'core': 999, 'fees': 245, 'surge': 25}, {'active': True, 'expires': 100}, 99],
   2243)],
 [('regression: discount surge boundary',
   [{'core': 999, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100], 1549),
  ('partial repair probe: discount surge boundary',
   [{'core': 1000, 'fees': 245, 'surge': 17}, {'active': True, 'expires': 100}, 100], 1945),
  ('second regression', [{'core': 1234, 'fees': 250, 'surge': 17}, {'active': True, 'expires': 100}, 100],
   2348),
  ('normal control 1', [{'core': 1234, 'fees': 0, 'surge': 10}, {'active': True, 'expires': 100}, 99], 1111),
  ('normal control 2', [{'core': 1000, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100],
   2250),
  ('normal control 3', [{'core': 1234, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 99], 2468),
  ('normal control 4', [{'core': 1000, 'fees': 0, 'surge': 30}, {'active': False, 'expires': 100}, 100],
   3000)],
 [('regression: discount surge boundary',
   [{'core': 1000, 'fees': 0, 'surge': 15}, {'active': True, 'expires': 100}, 100], 1350),
  ('partial repair probe: discount surge boundary',
   [{'core': 999, 'fees': 245, 'surge': 17}, {'active': True, 'expires': 100}, 100], 1943),
  ('second regression', [{'core': 1234, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100],
   1865),
  ('normal control 1', [{'core': 2555, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100],
   5360),
  ('normal control 2', [{'core': 999, 'fees': 0, 'surge': 20}, {'active': True, 'expires': 100}, 100], 1998),
  ('normal control 3', [{'core': 2555, 'fees': 250, 'surge': 20}, {'active': True, 'expires': 100}, 99],
   5360),
  ('normal control 4', [{'core': 1000, 'fees': 245, 'surge': 12}, {'active': False, 'expires': 100}, 100],
   1445)],
 [('regression: discount surge boundary',
   [{'core': 1234, 'fees': 245, 'surge': 15}, {'active': True, 'expires': 100}, 100], 1911),
  ('partial repair probe: discount surge boundary',
   [{'core': 2555, 'fees': 199, 'surge': 17}, {'active': True, 'expires': 100}, 99], 4543),
  ('second regression', [{'core': 1000, 'fees': 250, 'surge': 17}, {'active': True, 'expires': 100}, 100],
   1950),
  ('normal control 1', [{'core': 1000, 'fees': 0, 'surge': 20}, {'active': True, 'expires': 100}, 100], 2000),
  ('normal control 2', [{'core': 999, 'fees': 0, 'surge': 25}, {'active': True, 'expires': 100}, 99], 1998),
  ('normal control 3', [{'core': 999, 'fees': 199, 'surge': 20}, {'active': True, 'expires': 100}, 100],
   2197),
  ('normal control 4', [{'core': 1000, 'fees': 250, 'surge': 12}, {'active': True, 'expires': 100}, 101],
   1450)]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: discount surge boundary18651865Passed
partial repair probe: discount surge boundary18991899Passed
second regression18971897Passed
normal control 125002500Passed
normal control 276657665Passed
normal control 316981698Passed
normal control 432503250Passed

SHA-256 / 93873b64a249ed4bbdc35492d722013477f97f7f399eb53bc419363f05f487dd

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:50:43.722005+00:00.

Case digest / c697324e963ccb886cee9026c0bbb4267d929c16ea9638db4d82cad32a4ebb92