FAILURE MAP
← Case archive

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

Wait cap in minutes compared against cents · case 01

Every wait fee is capped at a few cents.

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

ROOT CAUSE

The minute cap is applied to the cent amount.

VERIFIED REPAIR

Cap the billed minutes before multiplying by the rate.

Unsuccessful approach: Scaling the cap as if it were dollars still mixes units.

Case contract

Wait time starts at driver arrival, or at the scheduled pickup time if the ride was scheduled and the driver arrived early. The first grace seconds are free; beyond that each started minute is billed at per_min cents, up to cap_min billed minutes. Return the wait fee 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(ev, policy):
    start = ev['arrive'] if ev['scheduled'] is None else max(ev['arrive'], ev['scheduled'])
    wait = ev['board'] - start
    if wait <= policy['grace']:
        return 0
    minutes = -(-(wait - policy['grace']) // 60)
    return min(minutes * policy['per_min'], policy['cap_min'])
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: cap unit',
   [{'arrive': 10000, 'board': 10121, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 35),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 11563, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}],
   125),
  ('second regression',
   [{'arrive': 10000, 'board': 10480, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10120, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10300, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10240, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10701, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   125),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   250),
  ('second regression',
   [{'arrive': 10000, 'board': 10301, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 80),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10360, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10240, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
   0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10241, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 35),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 11497, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 125),
  ('second regression',
   [{'arrive': 10000, 'board': 10600, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   200),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10000, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10360, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10120, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
   320),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
  ('second regression',
   [{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   200),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10060, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10420, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
   280),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 200),
  ('second regression',
   [{'arrive': 10000, 'board': 10421, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
   40),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10060, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10420, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10300, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10180, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0)]]
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: cap unit1035Failed
partial repair probe: cap unit5125Failed
second regression525Failed
normal control 100Passed
normal control 200Passed
normal control 300Passed
normal control 400Passed

SHA-256 / e8108fbda2341b94c85e24831c1dfc52bfbd32f6fb99bc2221ccf6f2de49d971

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(ev, policy):
    start = ev['arrive'] if ev['scheduled'] is None else max(ev['arrive'], ev['scheduled'])
    wait = ev['board'] - start
    if wait <= policy['grace']:
        return 0
    minutes = -(-(wait - policy['grace']) // 60)
    return min(minutes * policy['per_min'], policy['cap_min'] * 100)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: cap unit',
   [{'arrive': 10000, 'board': 10121, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 35),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 11563, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}],
   125),
  ('second regression',
   [{'arrive': 10000, 'board': 10480, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10120, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10300, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10240, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10701, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   125),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   250),
  ('second regression',
   [{'arrive': 10000, 'board': 10301, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 80),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10360, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10240, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
   0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10241, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 35),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 11497, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 125),
  ('second regression',
   [{'arrive': 10000, 'board': 10600, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   200),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10000, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10360, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10120, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
   320),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
  ('second regression',
   [{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   200),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10060, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10420, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
   280),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 200),
  ('second regression',
   [{'arrive': 10000, 'board': 10421, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
   40),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10060, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10420, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10300, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10180, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0)]]
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: cap unit3535Passed
partial repair probe: cap unit500125Failed
second regression2525Passed
normal control 100Passed
normal control 200Passed
normal control 300Passed
normal control 400Passed

SHA-256 / a9b7d57b06603a46013785675f59b82631dc32ff54aa4759531d9cf65da8dc69

3 / The verified repair

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

N = 1
observations = []
def solve(ev, policy):
    start = ev['arrive'] if ev['scheduled'] is None else max(ev['arrive'], ev['scheduled'])
    wait = ev['board'] - start
    if wait <= policy['grace']:
        return 0
    minutes = -(-(wait - policy['grace']) // 60)
    return min(minutes, policy['cap_min']) * policy['per_min']
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: cap unit',
   [{'arrive': 10000, 'board': 10121, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 35),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 11563, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}],
   125),
  ('second regression',
   [{'arrive': 10000, 'board': 10480, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10120, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10300, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10240, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10701, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   125),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   250),
  ('second regression',
   [{'arrive': 10000, 'board': 10301, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 80),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10360, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10240, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
   0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10241, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 35),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 11497, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 125),
  ('second regression',
   [{'arrive': 10000, 'board': 10600, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   200),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10000, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10360, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10120, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
   320),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
  ('second regression',
   [{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
   200),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10060, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10420, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 0)],
 [('regression: cap unit',
   [{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
   280),
  ('partial repair probe: cap unit',
   [{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 200),
  ('second regression',
   [{'arrive': 10000, 'board': 10421, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
   40),
  ('normal control 1',
   [{'arrive': 10000, 'board': 10060, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 2',
   [{'arrive': 10000, 'board': 10420, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 3',
   [{'arrive': 10000, 'board': 10300, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}], 0),
  ('normal control 4',
   [{'arrive': 10000, 'board': 10180, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0)]]
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: cap unit3535Passed
partial repair probe: cap unit125125Passed
second regression2525Passed
normal control 100Passed
normal control 200Passed
normal control 300Passed
normal control 400Passed

SHA-256 / 73a1c2af0f1b65c46ceb258ed71c77f7bfe96dcfa29b93e4c716f75e5ba9f620

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

Case digest / e4dd8ab75d885953c48aa5a6686bc9b8accc94d5d4a4760379fc952a28ea8521