FA-85441 / Ride-hailing fare and surge pricing / Open access
Grace period billed once exceeded · case 01
A wait one second past the grace is billed for the full wait including the free minutes.
ROOT CAUSE
After the grace test passes, the whole wait is billed.
VERIFIED REPAIR
Bill only the seconds beyond the grace period.
Unsuccessful approach: Adding one minute to the floored excess overbills exact minute multiples.
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 // 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: grace deduction',
[{'arrive': 10000, 'board': 10301, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
50),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
200),
('second regression',
[{'arrive': 10000, 'board': 10180, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
('normal control 1',
[{'arrive': 10000, 'board': 11020, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
250),
('normal control 2',
[{'arrive': 10000, 'board': 10600, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
('normal control 3',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
('normal control 4',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10181, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 70),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
320),
('second regression',
[{'arrive': 10000, 'board': 10301, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
80),
('normal control 1',
[{'arrive': 10000, 'board': 11483, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
('normal control 2',
[{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200),
('normal control 3',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
('normal control 4',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}],
125)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10181, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 70),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10480, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
40),
('second regression',
[{'arrive': 10000, 'board': 10180, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 35),
('normal control 1',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}],
125),
('normal control 2',
[{'arrive': 10000, 'board': 11020, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
350),
('normal control 3',
[{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
350),
('normal control 4',
[{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10121, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10300, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
40),
('second regression',
[{'arrive': 10000, 'board': 10181, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 25}], 50),
('normal control 1',
[{'arrive': 10000, 'board': 11487, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
250),
('normal control 2',
[{'arrive': 10000, 'board': 10000, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
('normal control 3',
[{'arrive': 10000, 'board': 10120, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
('normal control 4',
[{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10121, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10480, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
25),
('second regression',
[{'arrive': 10000, 'board': 10181, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 50),
('normal control 1',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
('normal control 2',
[{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200),
('normal control 3',
[{'arrive': 10000, 'board': 10900, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
('normal control 4',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: grace deduction | 100 | 50 | Failed |
| partial repair probe: grace deduction | 250 | 200 | Failed |
| second regression | 75 | 25 | Failed |
| normal control 1 | 250 | 250 | Passed |
| normal control 2 | 175 | 175 | Passed |
| normal control 3 | 0 | 0 | Passed |
| normal control 4 | 200 | 200 | Passed |
SHA-256 / 52a1e636e35c67789f9531899a32d8aa105540a9f5d0247b3c656dd0a0d484bf
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 + 1
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: grace deduction',
[{'arrive': 10000, 'board': 10301, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
50),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
200),
('second regression',
[{'arrive': 10000, 'board': 10180, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
('normal control 1',
[{'arrive': 10000, 'board': 11020, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
250),
('normal control 2',
[{'arrive': 10000, 'board': 10600, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
('normal control 3',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
('normal control 4',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10181, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 70),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
320),
('second regression',
[{'arrive': 10000, 'board': 10301, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
80),
('normal control 1',
[{'arrive': 10000, 'board': 11483, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
('normal control 2',
[{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200),
('normal control 3',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
('normal control 4',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}],
125)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10181, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 70),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10480, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
40),
('second regression',
[{'arrive': 10000, 'board': 10180, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 35),
('normal control 1',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}],
125),
('normal control 2',
[{'arrive': 10000, 'board': 11020, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
350),
('normal control 3',
[{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
350),
('normal control 4',
[{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10121, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10300, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
40),
('second regression',
[{'arrive': 10000, 'board': 10181, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 25}], 50),
('normal control 1',
[{'arrive': 10000, 'board': 11487, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
250),
('normal control 2',
[{'arrive': 10000, 'board': 10000, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
('normal control 3',
[{'arrive': 10000, 'board': 10120, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
('normal control 4',
[{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10121, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10480, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
25),
('second regression',
[{'arrive': 10000, 'board': 10181, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 50),
('normal control 1',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
('normal control 2',
[{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200),
('normal control 3',
[{'arrive': 10000, 'board': 10900, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
('normal control 4',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: grace deduction | 50 | 50 | Passed |
| partial repair probe: grace deduction | 225 | 200 | Failed |
| second regression | 50 | 25 | Failed |
| normal control 1 | 250 | 250 | Passed |
| normal control 2 | 175 | 175 | Passed |
| normal control 3 | 0 | 0 | Passed |
| normal control 4 | 200 | 200 | Passed |
SHA-256 / e063f54485efa1b386518ac2e01cc6dd4818f49a010879f0d13b8b54c96072de
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: grace deduction',
[{'arrive': 10000, 'board': 10301, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
50),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
200),
('second regression',
[{'arrive': 10000, 'board': 10180, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
('normal control 1',
[{'arrive': 10000, 'board': 11020, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
250),
('normal control 2',
[{'arrive': 10000, 'board': 10600, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
('normal control 3',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
('normal control 4',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10181, 'scheduled': 9940}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 70),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
320),
('second regression',
[{'arrive': 10000, 'board': 10301, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
80),
('normal control 1',
[{'arrive': 10000, 'board': 11483, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
('normal control 2',
[{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200),
('normal control 3',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0),
('normal control 4',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}],
125)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10181, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 70),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10480, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
40),
('second regression',
[{'arrive': 10000, 'board': 10180, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 35),
('normal control 1',
[{'arrive': 10000, 'board': 10900, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 25}],
125),
('normal control 2',
[{'arrive': 10000, 'board': 11020, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
350),
('normal control 3',
[{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 35}],
350),
('normal control 4',
[{'arrive': 10000, 'board': 10600, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10121, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10300, 'scheduled': 10120}, {'cap_min': 10, 'grace': 120, 'per_min': 40}],
40),
('second regression',
[{'arrive': 10000, 'board': 10181, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 25}], 50),
('normal control 1',
[{'arrive': 10000, 'board': 11487, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
250),
('normal control 2',
[{'arrive': 10000, 'board': 10000, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
('normal control 3',
[{'arrive': 10000, 'board': 10120, 'scheduled': 10120}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 0),
('normal control 4',
[{'arrive': 10000, 'board': 10120, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 35}], 0)],
[('regression: grace deduction',
[{'arrive': 10000, 'board': 10121, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 25),
('partial repair probe: grace deduction',
[{'arrive': 10000, 'board': 10480, 'scheduled': 10300}, {'cap_min': 10, 'grace': 120, 'per_min': 25}],
25),
('second regression',
[{'arrive': 10000, 'board': 10181, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 50),
('normal control 1',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 5, 'grace': 120, 'per_min': 25}], 0),
('normal control 2',
[{'arrive': 10000, 'board': 11200, 'scheduled': 10300}, {'cap_min': 5, 'grace': 120, 'per_min': 40}],
200),
('normal control 3',
[{'arrive': 10000, 'board': 10900, 'scheduled': 9940}, {'cap_min': 5, 'grace': 120, 'per_min': 35}], 175),
('normal control 4',
[{'arrive': 10000, 'board': 10000, 'scheduled': None}, {'cap_min': 10, 'grace': 120, 'per_min': 40}], 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: grace deduction | 50 | 50 | Passed |
| partial repair probe: grace deduction | 200 | 200 | Passed |
| second regression | 25 | 25 | Passed |
| normal control 1 | 250 | 250 | Passed |
| normal control 2 | 175 | 175 | Passed |
| normal control 3 | 0 | 0 | Passed |
| normal control 4 | 200 | 200 | Passed |
SHA-256 / 8c16965b43e968f6f9c6e5f3649ef9a2806e49910467f586677b9683e45a35ff
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.448475+00:00.
Case digest / 61d386c6ca745f8995a2873e64bc5ec13c79244fa0c7808e8e3435354c4ea864