FA-85616 / Ride-hailing fare and surge pricing / Open access
Locked quote ignores a lower current surge · case 01
Riders pay the quoted 2.0x after surge dropped to 1.2x.
ROOT CAUSE
A valid lock always uses the quoted surge.
VERIFIED REPAIR
Use the lower of quoted and current surge while locked.
Unsuccessful approach: Taking the higher surge turns price protection into a penalty.
Case contract
A fare quote locks its surge for 300 seconds: requests with 0 <= elapsed < 300 seconds are locked (a request timestamped before the quote, from clock skew, is not). A locked request uses the lower of the quoted and current surge; otherwise the current surge. Price = core x surge / 10, half up. Return [price, locked|requoted].
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(quote, request_t, current_surge):
elapsed = request_t - quote['t']
valid = 0 <= elapsed < 300
used = quote['surge'] if valid else current_surge
price = (quote['core'] * used * 2 + 10) // 20
return [price, 'locked' if valid else 'requoted']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: downward price protection', [{'core': 999, 'surge': 20, 't': 5000}, 5000, 12],
[1199, 'locked']),
('partial repair probe: downward price protection', [{'core': 1111, 'surge': 15, 't': 5000}, 5120, 20],
[1667, 'locked']),
('second regression', [{'core': 2500, 'surge': 10, 't': 5000}, 5000, 20], [2500, 'locked']),
('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 5300, 12], [1199, 'requoted']),
('normal control 2', [{'core': 1111, 'surge': 15, 't': 5000}, 5301, 12], [1333, 'requoted']),
('normal control 3', [{'core': 2500, 'surge': 20, 't': 5000}, 5301, 10], [2500, 'requoted']),
('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5301, 12], [3000, 'requoted'])],
[('regression: downward price protection', [{'core': 2500, 'surge': 20, 't': 5000}, 5299, 10],
[2500, 'locked']),
('partial repair probe: downward price protection', [{'core': 1111, 'surge': 15, 't': 5000}, 5000, 25],
[1667, 'locked']),
('second regression', [{'core': 999, 'surge': 10, 't': 5000}, 5000, 15], [999, 'locked']),
('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 15], [1499, 'locked']),
('normal control 2', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 20], [1998, 'requoted']),
('normal control 3', [{'core': 2500, 'surge': 15, 't': 5000}, 4995, 15], [3750, 'requoted']),
('normal control 4', [{'core': 999, 'surge': 10, 't': 5000}, 5120, 10], [999, 'locked'])],
[('regression: downward price protection', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 10],
[999, 'locked']),
('partial repair probe: downward price protection', [{'core': 1111, 'surge': 10, 't': 5000}, 5000, 15],
[1111, 'locked']),
('second regression', [{'core': 1111, 'surge': 15, 't': 5000}, 5001, 20], [1667, 'locked']),
('normal control 1', [{'core': 2500, 'surge': 20, 't': 5000}, 5900, 25], [6250, 'requoted']),
('normal control 2', [{'core': 1111, 'surge': 20, 't': 5000}, 5300, 25], [2778, 'requoted']),
('normal control 3', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 15], [1499, 'requoted']),
('normal control 4', [{'core': 1111, 'surge': 15, 't': 5000}, 5301, 20], [2222, 'requoted'])],
[('regression: downward price protection', [{'core': 2500, 'surge': 20, 't': 5000}, 5001, 15],
[3750, 'locked']),
('partial repair probe: downward price protection', [{'core': 999, 'surge': 20, 't': 5000}, 5001, 25],
[1998, 'locked']),
('second regression', [{'core': 2500, 'surge': 10, 't': 5000}, 5299, 20], [2500, 'locked']),
('normal control 1', [{'core': 2500, 'surge': 15, 't': 5000}, 4995, 12], [3000, 'requoted']),
('normal control 2', [{'core': 1111, 'surge': 20, 't': 5000}, 5300, 20], [2222, 'requoted']),
('normal control 3', [{'core': 2500, 'surge': 15, 't': 5000}, 5900, 10], [2500, 'requoted']),
('normal control 4', [{'core': 2500, 'surge': 10, 't': 5000}, 5001, 10], [2500, 'locked'])],
[('regression: downward price protection', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 12],
[1199, 'locked']),
('partial repair probe: downward price protection', [{'core': 999, 'surge': 20, 't': 5000}, 5120, 25],
[1998, 'locked']),
('second regression', [{'core': 1111, 'surge': 15, 't': 5000}, 5001, 20], [1667, 'locked']),
('normal control 1', [{'core': 2500, 'surge': 10, 't': 5000}, 5301, 10], [2500, 'requoted']),
('normal control 2', [{'core': 999, 'surge': 20, 't': 5000}, 5300, 10], [999, 'requoted']),
('normal control 3', [{'core': 1111, 'surge': 20, 't': 5000}, 5900, 10], [1111, 'requoted']),
('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5299, 15], [3750, 'locked'])]]
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: downward price protection | [1998, 'locked'] | [1199, 'locked'] | Failed |
| partial repair probe: downward price protection | [1667, 'locked'] | [1667, 'locked'] | Passed |
| second regression | [2500, 'locked'] | [2500, 'locked'] | Passed |
| normal control 1 | [1199, 'requoted'] | [1199, 'requoted'] | Passed |
| normal control 2 | [1333, 'requoted'] | [1333, 'requoted'] | Passed |
| normal control 3 | [2500, 'requoted'] | [2500, 'requoted'] | Passed |
| normal control 4 | [3000, 'requoted'] | [3000, 'requoted'] | Passed |
SHA-256 / b81c1cf68d01b0c185a1bf83de1059e83d3b141f1f22229e1f00e68bb42daf12
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(quote, request_t, current_surge):
elapsed = request_t - quote['t']
valid = 0 <= elapsed < 300
used = max(quote['surge'], current_surge) if valid else current_surge
price = (quote['core'] * used * 2 + 10) // 20
return [price, 'locked' if valid else 'requoted']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: downward price protection', [{'core': 999, 'surge': 20, 't': 5000}, 5000, 12],
[1199, 'locked']),
('partial repair probe: downward price protection', [{'core': 1111, 'surge': 15, 't': 5000}, 5120, 20],
[1667, 'locked']),
('second regression', [{'core': 2500, 'surge': 10, 't': 5000}, 5000, 20], [2500, 'locked']),
('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 5300, 12], [1199, 'requoted']),
('normal control 2', [{'core': 1111, 'surge': 15, 't': 5000}, 5301, 12], [1333, 'requoted']),
('normal control 3', [{'core': 2500, 'surge': 20, 't': 5000}, 5301, 10], [2500, 'requoted']),
('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5301, 12], [3000, 'requoted'])],
[('regression: downward price protection', [{'core': 2500, 'surge': 20, 't': 5000}, 5299, 10],
[2500, 'locked']),
('partial repair probe: downward price protection', [{'core': 1111, 'surge': 15, 't': 5000}, 5000, 25],
[1667, 'locked']),
('second regression', [{'core': 999, 'surge': 10, 't': 5000}, 5000, 15], [999, 'locked']),
('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 15], [1499, 'locked']),
('normal control 2', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 20], [1998, 'requoted']),
('normal control 3', [{'core': 2500, 'surge': 15, 't': 5000}, 4995, 15], [3750, 'requoted']),
('normal control 4', [{'core': 999, 'surge': 10, 't': 5000}, 5120, 10], [999, 'locked'])],
[('regression: downward price protection', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 10],
[999, 'locked']),
('partial repair probe: downward price protection', [{'core': 1111, 'surge': 10, 't': 5000}, 5000, 15],
[1111, 'locked']),
('second regression', [{'core': 1111, 'surge': 15, 't': 5000}, 5001, 20], [1667, 'locked']),
('normal control 1', [{'core': 2500, 'surge': 20, 't': 5000}, 5900, 25], [6250, 'requoted']),
('normal control 2', [{'core': 1111, 'surge': 20, 't': 5000}, 5300, 25], [2778, 'requoted']),
('normal control 3', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 15], [1499, 'requoted']),
('normal control 4', [{'core': 1111, 'surge': 15, 't': 5000}, 5301, 20], [2222, 'requoted'])],
[('regression: downward price protection', [{'core': 2500, 'surge': 20, 't': 5000}, 5001, 15],
[3750, 'locked']),
('partial repair probe: downward price protection', [{'core': 999, 'surge': 20, 't': 5000}, 5001, 25],
[1998, 'locked']),
('second regression', [{'core': 2500, 'surge': 10, 't': 5000}, 5299, 20], [2500, 'locked']),
('normal control 1', [{'core': 2500, 'surge': 15, 't': 5000}, 4995, 12], [3000, 'requoted']),
('normal control 2', [{'core': 1111, 'surge': 20, 't': 5000}, 5300, 20], [2222, 'requoted']),
('normal control 3', [{'core': 2500, 'surge': 15, 't': 5000}, 5900, 10], [2500, 'requoted']),
('normal control 4', [{'core': 2500, 'surge': 10, 't': 5000}, 5001, 10], [2500, 'locked'])],
[('regression: downward price protection', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 12],
[1199, 'locked']),
('partial repair probe: downward price protection', [{'core': 999, 'surge': 20, 't': 5000}, 5120, 25],
[1998, 'locked']),
('second regression', [{'core': 1111, 'surge': 15, 't': 5000}, 5001, 20], [1667, 'locked']),
('normal control 1', [{'core': 2500, 'surge': 10, 't': 5000}, 5301, 10], [2500, 'requoted']),
('normal control 2', [{'core': 999, 'surge': 20, 't': 5000}, 5300, 10], [999, 'requoted']),
('normal control 3', [{'core': 1111, 'surge': 20, 't': 5000}, 5900, 10], [1111, 'requoted']),
('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5299, 15], [3750, 'locked'])]]
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: downward price protection | [1998, 'locked'] | [1199, 'locked'] | Failed |
| partial repair probe: downward price protection | [2222, 'locked'] | [1667, 'locked'] | Failed |
| second regression | [5000, 'locked'] | [2500, 'locked'] | Failed |
| normal control 1 | [1199, 'requoted'] | [1199, 'requoted'] | Passed |
| normal control 2 | [1333, 'requoted'] | [1333, 'requoted'] | Passed |
| normal control 3 | [2500, 'requoted'] | [2500, 'requoted'] | Passed |
| normal control 4 | [3000, 'requoted'] | [3000, 'requoted'] | Passed |
SHA-256 / 315c020f595a5028567d2ba97982ee164a17c43c5c8152d73756fe3361e32e72
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(quote, request_t, current_surge):
elapsed = request_t - quote['t']
valid = 0 <= elapsed < 300
used = min(quote['surge'], current_surge) if valid else current_surge
price = (quote['core'] * used * 2 + 10) // 20
return [price, 'locked' if valid else 'requoted']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: downward price protection', [{'core': 999, 'surge': 20, 't': 5000}, 5000, 12],
[1199, 'locked']),
('partial repair probe: downward price protection', [{'core': 1111, 'surge': 15, 't': 5000}, 5120, 20],
[1667, 'locked']),
('second regression', [{'core': 2500, 'surge': 10, 't': 5000}, 5000, 20], [2500, 'locked']),
('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 5300, 12], [1199, 'requoted']),
('normal control 2', [{'core': 1111, 'surge': 15, 't': 5000}, 5301, 12], [1333, 'requoted']),
('normal control 3', [{'core': 2500, 'surge': 20, 't': 5000}, 5301, 10], [2500, 'requoted']),
('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5301, 12], [3000, 'requoted'])],
[('regression: downward price protection', [{'core': 2500, 'surge': 20, 't': 5000}, 5299, 10],
[2500, 'locked']),
('partial repair probe: downward price protection', [{'core': 1111, 'surge': 15, 't': 5000}, 5000, 25],
[1667, 'locked']),
('second regression', [{'core': 999, 'surge': 10, 't': 5000}, 5000, 15], [999, 'locked']),
('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 15], [1499, 'locked']),
('normal control 2', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 20], [1998, 'requoted']),
('normal control 3', [{'core': 2500, 'surge': 15, 't': 5000}, 4995, 15], [3750, 'requoted']),
('normal control 4', [{'core': 999, 'surge': 10, 't': 5000}, 5120, 10], [999, 'locked'])],
[('regression: downward price protection', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 10],
[999, 'locked']),
('partial repair probe: downward price protection', [{'core': 1111, 'surge': 10, 't': 5000}, 5000, 15],
[1111, 'locked']),
('second regression', [{'core': 1111, 'surge': 15, 't': 5000}, 5001, 20], [1667, 'locked']),
('normal control 1', [{'core': 2500, 'surge': 20, 't': 5000}, 5900, 25], [6250, 'requoted']),
('normal control 2', [{'core': 1111, 'surge': 20, 't': 5000}, 5300, 25], [2778, 'requoted']),
('normal control 3', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 15], [1499, 'requoted']),
('normal control 4', [{'core': 1111, 'surge': 15, 't': 5000}, 5301, 20], [2222, 'requoted'])],
[('regression: downward price protection', [{'core': 2500, 'surge': 20, 't': 5000}, 5001, 15],
[3750, 'locked']),
('partial repair probe: downward price protection', [{'core': 999, 'surge': 20, 't': 5000}, 5001, 25],
[1998, 'locked']),
('second regression', [{'core': 2500, 'surge': 10, 't': 5000}, 5299, 20], [2500, 'locked']),
('normal control 1', [{'core': 2500, 'surge': 15, 't': 5000}, 4995, 12], [3000, 'requoted']),
('normal control 2', [{'core': 1111, 'surge': 20, 't': 5000}, 5300, 20], [2222, 'requoted']),
('normal control 3', [{'core': 2500, 'surge': 15, 't': 5000}, 5900, 10], [2500, 'requoted']),
('normal control 4', [{'core': 2500, 'surge': 10, 't': 5000}, 5001, 10], [2500, 'locked'])],
[('regression: downward price protection', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 12],
[1199, 'locked']),
('partial repair probe: downward price protection', [{'core': 999, 'surge': 20, 't': 5000}, 5120, 25],
[1998, 'locked']),
('second regression', [{'core': 1111, 'surge': 15, 't': 5000}, 5001, 20], [1667, 'locked']),
('normal control 1', [{'core': 2500, 'surge': 10, 't': 5000}, 5301, 10], [2500, 'requoted']),
('normal control 2', [{'core': 999, 'surge': 20, 't': 5000}, 5300, 10], [999, 'requoted']),
('normal control 3', [{'core': 1111, 'surge': 20, 't': 5000}, 5900, 10], [1111, 'requoted']),
('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5299, 15], [3750, 'locked'])]]
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: downward price protection | [1199, 'locked'] | [1199, 'locked'] | Passed |
| partial repair probe: downward price protection | [1667, 'locked'] | [1667, 'locked'] | Passed |
| second regression | [2500, 'locked'] | [2500, 'locked'] | Passed |
| normal control 1 | [1199, 'requoted'] | [1199, 'requoted'] | Passed |
| normal control 2 | [1333, 'requoted'] | [1333, 'requoted'] | Passed |
| normal control 3 | [2500, 'requoted'] | [2500, 'requoted'] | Passed |
| normal control 4 | [3000, 'requoted'] | [3000, 'requoted'] | Passed |
SHA-256 / 9fcd0a2f0610be1db9724caf1cb10e15cec1ad40eb48530669fb48acf9a64272
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:41.962136+00:00.
Case digest / b244e3cc15e497643200be5f67cdbe342684bbdf308576a136a1a5cbfe8e5285