FAILURE MAP
← Case archive

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

Quote honored at the exact expiry second · case 01

A request exactly five minutes after the quote still uses the locked surge.

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

ROOT CAUSE

The validity window includes its end instant.

VERIFIED REPAIR

Treat the lock as valid for elapsed < 300.

Unsuccessful approach: Treating the window as milliseconds keeps quotes alive for over 80 hours.

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 = 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: lock expiry instant', [{'core': 999, 'surge': 20, 't': 5000}, 5300, 20], [1998, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 2500, 'surge': 20, 't': 5000}, 5900, 15],
   [3750, 'requoted']),
  ('second regression', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 20], [1998, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 20], [1499, 'locked']),
  ('normal control 2', [{'core': 2500, 'surge': 10, 't': 5000}, 5001, 25], [2500, 'locked']),
  ('normal control 3', [{'core': 999, 'surge': 20, 't': 5000}, 5299, 20], [1998, 'locked']),
  ('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5001, 25], [3750, 'locked'])],
 [('regression: lock expiry instant', [{'core': 1111, 'surge': 10, 't': 5000}, 5300, 20], [2222, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 999, 'surge': 15, 't': 5000}, 5900, 15],
   [1499, 'requoted']),
  ('second regression', [{'core': 999, 'surge': 10, 't': 5000}, 5300, 10], [999, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 20, 't': 5000}, 5120, 10], [999, 'locked']),
  ('normal control 2', [{'core': 1111, 'surge': 20, 't': 5000}, 5120, 20], [2222, 'locked']),
  ('normal control 3', [{'core': 2500, 'surge': 15, 't': 5000}, 4995, 15], [3750, 'requoted']),
  ('normal control 4', [{'core': 1111, 'surge': 10, 't': 5000}, 5120, 15], [1111, 'locked'])],
 [('regression: lock expiry instant', [{'core': 2500, 'surge': 20, 't': 5000}, 5300, 15], [3750, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 2500, 'surge': 10, 't': 5000}, 5900, 12],
   [3000, 'requoted']),
  ('second regression', [{'core': 1111, 'surge': 10, 't': 5000}, 5301, 25], [2778, 'requoted']),
  ('normal control 1', [{'core': 2500, 'surge': 10, 't': 5000}, 5000, 12], [2500, 'locked']),
  ('normal control 2', [{'core': 999, 'surge': 10, 't': 5000}, 5000, 25], [999, 'locked']),
  ('normal control 3', [{'core': 1111, 'surge': 20, 't': 5000}, 4995, 25], [2778, 'requoted']),
  ('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5299, 20], [3750, 'locked'])],
 [('regression: lock expiry instant', [{'core': 1111, 'surge': 15, 't': 5000}, 5300, 12], [1333, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 10],
   [999, 'requoted']),
  ('second regression', [{'core': 1111, 'surge': 15, 't': 5000}, 5301, 10], [1111, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 4995, 20], [1998, 'requoted']),
  ('normal control 2', [{'core': 2500, 'surge': 20, 't': 5000}, 5120, 10], [2500, 'locked']),
  ('normal control 3', [{'core': 1111, 'surge': 10, 't': 5000}, 5299, 10], [1111, 'locked']),
  ('normal control 4', [{'core': 1111, 'surge': 10, 't': 5000}, 5001, 12], [1111, 'locked'])],
 [('regression: lock expiry instant', [{'core': 999, 'surge': 15, 't': 5000}, 5300, 20], [1998, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 1111, 'surge': 20, 't': 5000}, 5900, 15],
   [1667, 'requoted']),
  ('second regression', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 10], [999, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 10, 't': 5000}, 5120, 20], [999, 'locked']),
  ('normal control 2', [{'core': 999, 'surge': 20, 't': 5000}, 5120, 25], [1998, 'locked']),
  ('normal control 3', [{'core': 999, 'surge': 15, 't': 5000}, 5120, 15], [1499, 'locked']),
  ('normal control 4', [{'core': 1111, 'surge': 20, 't': 5000}, 5001, 15], [1667, '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 fixtureActualExpectedOutcome
regression: lock expiry instant[1998, 'locked'][1998, 'requoted']Failed
partial repair probe: lock expiry instant[3750, 'requoted'][3750, 'requoted']Passed
second regression[1998, 'requoted'][1998, 'requoted']Passed
normal control 1[1499, 'locked'][1499, 'locked']Passed
normal control 2[2500, 'locked'][2500, 'locked']Passed
normal control 3[1998, 'locked'][1998, 'locked']Passed
normal control 4[3750, 'locked'][3750, 'locked']Passed

SHA-256 / f8f5b49f34a05ecd4d9180e353e1953a378e9043c0dc5873c77bcf7b11d65101

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 * 1000
    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: lock expiry instant', [{'core': 999, 'surge': 20, 't': 5000}, 5300, 20], [1998, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 2500, 'surge': 20, 't': 5000}, 5900, 15],
   [3750, 'requoted']),
  ('second regression', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 20], [1998, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 20], [1499, 'locked']),
  ('normal control 2', [{'core': 2500, 'surge': 10, 't': 5000}, 5001, 25], [2500, 'locked']),
  ('normal control 3', [{'core': 999, 'surge': 20, 't': 5000}, 5299, 20], [1998, 'locked']),
  ('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5001, 25], [3750, 'locked'])],
 [('regression: lock expiry instant', [{'core': 1111, 'surge': 10, 't': 5000}, 5300, 20], [2222, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 999, 'surge': 15, 't': 5000}, 5900, 15],
   [1499, 'requoted']),
  ('second regression', [{'core': 999, 'surge': 10, 't': 5000}, 5300, 10], [999, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 20, 't': 5000}, 5120, 10], [999, 'locked']),
  ('normal control 2', [{'core': 1111, 'surge': 20, 't': 5000}, 5120, 20], [2222, 'locked']),
  ('normal control 3', [{'core': 2500, 'surge': 15, 't': 5000}, 4995, 15], [3750, 'requoted']),
  ('normal control 4', [{'core': 1111, 'surge': 10, 't': 5000}, 5120, 15], [1111, 'locked'])],
 [('regression: lock expiry instant', [{'core': 2500, 'surge': 20, 't': 5000}, 5300, 15], [3750, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 2500, 'surge': 10, 't': 5000}, 5900, 12],
   [3000, 'requoted']),
  ('second regression', [{'core': 1111, 'surge': 10, 't': 5000}, 5301, 25], [2778, 'requoted']),
  ('normal control 1', [{'core': 2500, 'surge': 10, 't': 5000}, 5000, 12], [2500, 'locked']),
  ('normal control 2', [{'core': 999, 'surge': 10, 't': 5000}, 5000, 25], [999, 'locked']),
  ('normal control 3', [{'core': 1111, 'surge': 20, 't': 5000}, 4995, 25], [2778, 'requoted']),
  ('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5299, 20], [3750, 'locked'])],
 [('regression: lock expiry instant', [{'core': 1111, 'surge': 15, 't': 5000}, 5300, 12], [1333, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 10],
   [999, 'requoted']),
  ('second regression', [{'core': 1111, 'surge': 15, 't': 5000}, 5301, 10], [1111, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 4995, 20], [1998, 'requoted']),
  ('normal control 2', [{'core': 2500, 'surge': 20, 't': 5000}, 5120, 10], [2500, 'locked']),
  ('normal control 3', [{'core': 1111, 'surge': 10, 't': 5000}, 5299, 10], [1111, 'locked']),
  ('normal control 4', [{'core': 1111, 'surge': 10, 't': 5000}, 5001, 12], [1111, 'locked'])],
 [('regression: lock expiry instant', [{'core': 999, 'surge': 15, 't': 5000}, 5300, 20], [1998, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 1111, 'surge': 20, 't': 5000}, 5900, 15],
   [1667, 'requoted']),
  ('second regression', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 10], [999, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 10, 't': 5000}, 5120, 20], [999, 'locked']),
  ('normal control 2', [{'core': 999, 'surge': 20, 't': 5000}, 5120, 25], [1998, 'locked']),
  ('normal control 3', [{'core': 999, 'surge': 15, 't': 5000}, 5120, 15], [1499, 'locked']),
  ('normal control 4', [{'core': 1111, 'surge': 20, 't': 5000}, 5001, 15], [1667, '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 fixtureActualExpectedOutcome
regression: lock expiry instant[1998, 'locked'][1998, 'requoted']Failed
partial repair probe: lock expiry instant[3750, 'locked'][3750, 'requoted']Failed
second regression[1998, 'locked'][1998, 'requoted']Failed
normal control 1[1499, 'locked'][1499, 'locked']Passed
normal control 2[2500, 'locked'][2500, 'locked']Passed
normal control 3[1998, 'locked'][1998, 'locked']Passed
normal control 4[3750, 'locked'][3750, 'locked']Passed

SHA-256 / f1f951bed80b8fd92b04b740e047f20c59aa27c94730443a1f4c107caa08430c

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: lock expiry instant', [{'core': 999, 'surge': 20, 't': 5000}, 5300, 20], [1998, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 2500, 'surge': 20, 't': 5000}, 5900, 15],
   [3750, 'requoted']),
  ('second regression', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 20], [1998, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 5299, 20], [1499, 'locked']),
  ('normal control 2', [{'core': 2500, 'surge': 10, 't': 5000}, 5001, 25], [2500, 'locked']),
  ('normal control 3', [{'core': 999, 'surge': 20, 't': 5000}, 5299, 20], [1998, 'locked']),
  ('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5001, 25], [3750, 'locked'])],
 [('regression: lock expiry instant', [{'core': 1111, 'surge': 10, 't': 5000}, 5300, 20], [2222, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 999, 'surge': 15, 't': 5000}, 5900, 15],
   [1499, 'requoted']),
  ('second regression', [{'core': 999, 'surge': 10, 't': 5000}, 5300, 10], [999, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 20, 't': 5000}, 5120, 10], [999, 'locked']),
  ('normal control 2', [{'core': 1111, 'surge': 20, 't': 5000}, 5120, 20], [2222, 'locked']),
  ('normal control 3', [{'core': 2500, 'surge': 15, 't': 5000}, 4995, 15], [3750, 'requoted']),
  ('normal control 4', [{'core': 1111, 'surge': 10, 't': 5000}, 5120, 15], [1111, 'locked'])],
 [('regression: lock expiry instant', [{'core': 2500, 'surge': 20, 't': 5000}, 5300, 15], [3750, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 2500, 'surge': 10, 't': 5000}, 5900, 12],
   [3000, 'requoted']),
  ('second regression', [{'core': 1111, 'surge': 10, 't': 5000}, 5301, 25], [2778, 'requoted']),
  ('normal control 1', [{'core': 2500, 'surge': 10, 't': 5000}, 5000, 12], [2500, 'locked']),
  ('normal control 2', [{'core': 999, 'surge': 10, 't': 5000}, 5000, 25], [999, 'locked']),
  ('normal control 3', [{'core': 1111, 'surge': 20, 't': 5000}, 4995, 25], [2778, 'requoted']),
  ('normal control 4', [{'core': 2500, 'surge': 15, 't': 5000}, 5299, 20], [3750, 'locked'])],
 [('regression: lock expiry instant', [{'core': 1111, 'surge': 15, 't': 5000}, 5300, 12], [1333, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 10],
   [999, 'requoted']),
  ('second regression', [{'core': 1111, 'surge': 15, 't': 5000}, 5301, 10], [1111, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 15, 't': 5000}, 4995, 20], [1998, 'requoted']),
  ('normal control 2', [{'core': 2500, 'surge': 20, 't': 5000}, 5120, 10], [2500, 'locked']),
  ('normal control 3', [{'core': 1111, 'surge': 10, 't': 5000}, 5299, 10], [1111, 'locked']),
  ('normal control 4', [{'core': 1111, 'surge': 10, 't': 5000}, 5001, 12], [1111, 'locked'])],
 [('regression: lock expiry instant', [{'core': 999, 'surge': 15, 't': 5000}, 5300, 20], [1998, 'requoted']),
  ('partial repair probe: lock expiry instant', [{'core': 1111, 'surge': 20, 't': 5000}, 5900, 15],
   [1667, 'requoted']),
  ('second regression', [{'core': 999, 'surge': 20, 't': 5000}, 5900, 10], [999, 'requoted']),
  ('normal control 1', [{'core': 999, 'surge': 10, 't': 5000}, 5120, 20], [999, 'locked']),
  ('normal control 2', [{'core': 999, 'surge': 20, 't': 5000}, 5120, 25], [1998, 'locked']),
  ('normal control 3', [{'core': 999, 'surge': 15, 't': 5000}, 5120, 15], [1499, 'locked']),
  ('normal control 4', [{'core': 1111, 'surge': 20, 't': 5000}, 5001, 15], [1667, '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 fixtureActualExpectedOutcome
regression: lock expiry instant[1998, 'requoted'][1998, 'requoted']Passed
partial repair probe: lock expiry instant[3750, 'requoted'][3750, 'requoted']Passed
second regression[1998, 'requoted'][1998, 'requoted']Passed
normal control 1[1499, 'locked'][1499, 'locked']Passed
normal control 2[2500, 'locked'][2500, 'locked']Passed
normal control 3[1998, 'locked'][1998, 'locked']Passed
normal control 4[3750, 'locked'][3750, 'locked']Passed

SHA-256 / ececd8caadab15460f74e1a1ffc94f3f298572c765c1dbfa7c7745405a8922a4

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

Case digest / f5d33eea009da61ca44a5cff607e825ddb6c1ea1874c71fbea8cebaa15f3e3a7