FAILURE MAP
← Case archive

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

High estimate floored below 110% · case 01

Final fares land above the displayed range more often than expected.

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

ROOT CAUSE

The high bound floors instead of rounding up.

THE FAILURE

The high bound floors instead of rounding up.

Unsuccessful approach: Rounding to the nearest dollar still undershoots 110%.

Case contract

Show a fare range from a point estimate in cents: low = 90% of the estimate floored to whole dollars, but never below the minimum fare; high = 110% of the estimate rounded up to whole dollars; if the range is narrower than 2.00 the high end becomes low + 2.00. Return [low, high] 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(est, minimum):
    low = max(est * 9 // 10 // 100 * 100, minimum)
    high = est * 11 // 1000 * 100
    if high - low < 200:
        high = low + 200
    return [low, high]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: high end ceiling', [2500, 1000], [2200, 2800]),
  ('partial repair probe: high end ceiling', [1111, 1000], [1000, 1300]),
  ('second regression', [2050, 500], [1800, 2300]), ('normal control 1', [1000, 500], [900, 1100]),
  ('normal control 2', [1000, 800], [900, 1100]), ('normal control 3', [1064, 1000], [1000, 1200]),
  ('normal control 4', [700, 800], [800, 1000])],
 [('regression: high end ceiling', [1111, 800], [900, 1300]),
  ('partial repair probe: high end ceiling', [2669, 500], [2400, 3000]),
  ('second regression', [2050, 1000], [1800, 2300]), ('normal control 1', [1000, 500], [900, 1100]),
  ('normal control 2', [700, 800], [800, 1000]), ('normal control 3', [1000, 800], [900, 1100]),
  ('normal control 4', [700, 500], [600, 800])],
 [('regression: high end ceiling', [1111, 500], [900, 1300]),
  ('partial repair probe: high end ceiling', [1111, 1000], [1000, 1300]),
  ('second regression', [1234, 500], [1100, 1400]), ('normal control 1', [700, 800], [800, 1000]),
  ('normal control 2', [995, 1000], [1000, 1200]), ('normal control 3', [1000, 800], [900, 1100]),
  ('normal control 4', [700, 1000], [1000, 1200])],
 [('regression: high end ceiling', [4125, 800], [3700, 4600]),
  ('partial repair probe: high end ceiling', [1111, 500], [900, 1300]),
  ('second regression', [3137, 500], [2800, 3500]), ('normal control 1', [700, 500], [600, 800]),
  ('normal control 2', [700, 800], [800, 1000]), ('normal control 3', [1000, 1000], [1000, 1200]),
  ('normal control 4', [1000, 500], [900, 1100])],
 [('regression: high end ceiling', [1999, 500], [1700, 2200]),
  ('partial repair probe: high end ceiling', [1284, 500], [1100, 1500]),
  ('second regression', [1999, 1000], [1700, 2200]), ('normal control 1', [1000, 1000], [1000, 1200]),
  ('normal control 2', [1000, 800], [900, 1100]), ('normal control 3', [700, 500], [600, 800]),
  ('normal control 4', [1000, 500], [900, 1100])]]
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: high end ceiling[2200, 2700][2200, 2800]Failed
partial repair probe: high end ceiling[1000, 1200][1000, 1300]Failed
second regression[1800, 2200][1800, 2300]Failed
normal control 1[900, 1100][900, 1100]Passed
normal control 2[900, 1100][900, 1100]Passed
normal control 3[1000, 1200][1000, 1200]Passed
normal control 4[800, 1000][800, 1000]Passed

SHA-256 / d5c89dac228230b5fbfcff5b2817f7acd99c177f927e25a4a475d3049cbd5c9d

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(est, minimum):
    low = max(est * 9 // 10 // 100 * 100, minimum)
    high = (est * 11 + 500) // 1000 * 100
    if high - low < 200:
        high = low + 200
    return [low, high]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: high end ceiling', [2500, 1000], [2200, 2800]),
  ('partial repair probe: high end ceiling', [1111, 1000], [1000, 1300]),
  ('second regression', [2050, 500], [1800, 2300]), ('normal control 1', [1000, 500], [900, 1100]),
  ('normal control 2', [1000, 800], [900, 1100]), ('normal control 3', [1064, 1000], [1000, 1200]),
  ('normal control 4', [700, 800], [800, 1000])],
 [('regression: high end ceiling', [1111, 800], [900, 1300]),
  ('partial repair probe: high end ceiling', [2669, 500], [2400, 3000]),
  ('second regression', [2050, 1000], [1800, 2300]), ('normal control 1', [1000, 500], [900, 1100]),
  ('normal control 2', [700, 800], [800, 1000]), ('normal control 3', [1000, 800], [900, 1100]),
  ('normal control 4', [700, 500], [600, 800])],
 [('regression: high end ceiling', [1111, 500], [900, 1300]),
  ('partial repair probe: high end ceiling', [1111, 1000], [1000, 1300]),
  ('second regression', [1234, 500], [1100, 1400]), ('normal control 1', [700, 800], [800, 1000]),
  ('normal control 2', [995, 1000], [1000, 1200]), ('normal control 3', [1000, 800], [900, 1100]),
  ('normal control 4', [700, 1000], [1000, 1200])],
 [('regression: high end ceiling', [4125, 800], [3700, 4600]),
  ('partial repair probe: high end ceiling', [1111, 500], [900, 1300]),
  ('second regression', [3137, 500], [2800, 3500]), ('normal control 1', [700, 500], [600, 800]),
  ('normal control 2', [700, 800], [800, 1000]), ('normal control 3', [1000, 1000], [1000, 1200]),
  ('normal control 4', [1000, 500], [900, 1100])],
 [('regression: high end ceiling', [1999, 500], [1700, 2200]),
  ('partial repair probe: high end ceiling', [1284, 500], [1100, 1500]),
  ('second regression', [1999, 1000], [1700, 2200]), ('normal control 1', [1000, 1000], [1000, 1200]),
  ('normal control 2', [1000, 800], [900, 1100]), ('normal control 3', [700, 500], [600, 800]),
  ('normal control 4', [1000, 500], [900, 1100])]]
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: high end ceiling[2200, 2800][2200, 2800]Passed
partial repair probe: high end ceiling[1000, 1200][1000, 1300]Failed
second regression[1800, 2300][1800, 2300]Passed
normal control 1[900, 1100][900, 1100]Passed
normal control 2[900, 1100][900, 1100]Passed
normal control 3[1000, 1200][1000, 1200]Passed
normal control 4[800, 1000][800, 1000]Passed

SHA-256 / e5560089c72651392d8840345f960a892b9bee6c567e60f13905bceb74b9c1fd

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 7 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.

Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.

Member access is invitation-based. Sign in with your invited account to inspect the repair.

Sign in to the archive ↗

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:42.616400+00:00.

Case digest / 711ba41c3543144ec2ec2e53f2910c12a94623e368fede696c33725fa2c44d42