FA-85806 / Ride-hailing fare and surge pricing / Open access
Expired memberships still receive benefits · case 01
Former members keep the surge cap after lapsing.
ROOT CAUSE
The expiry day is not checked.
VERIFIED REPAIR
Require today to be on or before the expiry day.
Unsuccessful approach: A strict comparison ends the membership a day early.
Case contract
Membership is active if the flag is set and today is on or before the expiry day. Active members have surge capped at 2.0x (20 tenths) and, when the (capped) surge is at most 1.5x, get 10% off the surged fare (floored); fees are never discounted. Return the amount due 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(fare, member, now):
active = member['active']
surge = fare['surge']
if active:
surge = min(surge, 20)
surged = (fare['core'] * surge * 2 + 10) // 20
disc = 0
if active and surge <= 15:
disc = surged // 10
return surged - disc + fare['fees']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: membership expiry',
[{'core': 2555, 'fees': 245, 'surge': 10}, {'active': True, 'expires': 100}, 101], 2800),
('partial repair probe: membership expiry',
[{'core': 2555, 'fees': 0, 'surge': 25}, {'active': True, 'expires': 100}, 100], 5110),
('second regression', [{'core': 1234, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 100],
2468),
('normal control 1', [{'core': 2555, 'fees': 199, 'surge': 20}, {'active': True, 'expires': 100}, 100],
5309),
('normal control 2', [{'core': 999, 'fees': 250, 'surge': 20}, {'active': True, 'expires': 100}, 100],
2248),
('normal control 3', [{'core': 2555, 'fees': 199, 'surge': 30}, {'active': False, 'expires': 100}, 100],
7864),
('normal control 4', [{'core': 2555, 'fees': 199, 'surge': 10}, {'active': False, 'expires': 100}, 100],
2754)],
[('regression: membership expiry',
[{'core': 1000, 'fees': 0, 'surge': 25}, {'active': True, 'expires': 100}, 101], 2500),
('partial repair probe: membership expiry',
[{'core': 2555, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100], 3649),
('second regression', [{'core': 1234, 'fees': 199, 'surge': 30}, {'active': True, 'expires': 100}, 100],
2667),
('normal control 1', [{'core': 1234, 'fees': 250, 'surge': 30}, {'active': False, 'expires': 100}, 101],
3952),
('normal control 2', [{'core': 1000, 'fees': 0, 'surge': 17}, {'active': True, 'expires': 100}, 100], 1700),
('normal control 3', [{'core': 1000, 'fees': 250, 'surge': 15}, {'active': False, 'expires': 100}, 100],
1750),
('normal control 4', [{'core': 1234, 'fees': 0, 'surge': 30}, {'active': False, 'expires': 100}, 101],
3702)],
[('regression: membership expiry',
[{'core': 1234, 'fees': 0, 'surge': 12}, {'active': True, 'expires': 100}, 101], 1481),
('partial repair probe: membership expiry',
[{'core': 1234, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100], 2718),
('second regression', [{'core': 2555, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 100],
5110),
('normal control 1', [{'core': 1234, 'fees': 250, 'surge': 20}, {'active': False, 'expires': 100}, 100],
2718),
('normal control 2', [{'core': 999, 'fees': 199, 'surge': 20}, {'active': True, 'expires': 100}, 100],
2197),
('normal control 3', [{'core': 2555, 'fees': 0, 'surge': 17}, {'active': True, 'expires': 100}, 100], 4344),
('normal control 4', [{'core': 2555, 'fees': 250, 'surge': 12}, {'active': False, 'expires': 100}, 100],
3316)],
[('regression: membership expiry',
[{'core': 1234, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 101], 3702),
('partial repair probe: membership expiry',
[{'core': 2555, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 100], 5110),
('second regression', [{'core': 999, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100],
2248),
('normal control 1', [{'core': 1234, 'fees': 199, 'surge': 12}, {'active': True, 'expires': 100}, 99],
1532),
('normal control 2', [{'core': 2555, 'fees': 0, 'surge': 17}, {'active': True, 'expires': 100}, 100], 4344),
('normal control 3', [{'core': 2555, 'fees': 0, 'surge': 15}, {'active': False, 'expires': 100}, 101],
3833),
('normal control 4', [{'core': 1234, 'fees': 199, 'surge': 10}, {'active': True, 'expires': 100}, 99],
1310)],
[('regression: membership expiry',
[{'core': 999, 'fees': 0, 'surge': 12}, {'active': True, 'expires': 100}, 101], 1199),
('partial repair probe: membership expiry',
[{'core': 1000, 'fees': 250, 'surge': 10}, {'active': True, 'expires': 100}, 100], 1150),
('second regression', [{'core': 2555, 'fees': 245, 'surge': 10}, {'active': True, 'expires': 100}, 100],
2545),
('normal control 1', [{'core': 1234, 'fees': 0, 'surge': 17}, {'active': False, 'expires': 100}, 101],
2098),
('normal control 2', [{'core': 1000, 'fees': 250, 'surge': 17}, {'active': False, 'expires': 100}, 101],
1950),
('normal control 3', [{'core': 2555, 'fees': 250, 'surge': 15}, {'active': False, 'expires': 100}, 101],
4083),
('normal control 4', [{'core': 1000, 'fees': 199, 'surge': 12}, {'active': True, 'expires': 100}, 99],
1279)]]
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: membership expiry | 2545 | 2800 | Failed |
| partial repair probe: membership expiry | 5110 | 5110 | Passed |
| second regression | 2468 | 2468 | Passed |
| normal control 1 | 5309 | 5309 | Passed |
| normal control 2 | 2248 | 2248 | Passed |
| normal control 3 | 7864 | 7864 | Passed |
| normal control 4 | 2754 | 2754 | Passed |
SHA-256 / f5e2cd8631d2f2602707a930846e5832ad76f970e4cb46181c8cc975ca5a4800
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(fare, member, now):
active = member['active'] and now < member['expires']
surge = fare['surge']
if active:
surge = min(surge, 20)
surged = (fare['core'] * surge * 2 + 10) // 20
disc = 0
if active and surge <= 15:
disc = surged // 10
return surged - disc + fare['fees']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: membership expiry',
[{'core': 2555, 'fees': 245, 'surge': 10}, {'active': True, 'expires': 100}, 101], 2800),
('partial repair probe: membership expiry',
[{'core': 2555, 'fees': 0, 'surge': 25}, {'active': True, 'expires': 100}, 100], 5110),
('second regression', [{'core': 1234, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 100],
2468),
('normal control 1', [{'core': 2555, 'fees': 199, 'surge': 20}, {'active': True, 'expires': 100}, 100],
5309),
('normal control 2', [{'core': 999, 'fees': 250, 'surge': 20}, {'active': True, 'expires': 100}, 100],
2248),
('normal control 3', [{'core': 2555, 'fees': 199, 'surge': 30}, {'active': False, 'expires': 100}, 100],
7864),
('normal control 4', [{'core': 2555, 'fees': 199, 'surge': 10}, {'active': False, 'expires': 100}, 100],
2754)],
[('regression: membership expiry',
[{'core': 1000, 'fees': 0, 'surge': 25}, {'active': True, 'expires': 100}, 101], 2500),
('partial repair probe: membership expiry',
[{'core': 2555, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100], 3649),
('second regression', [{'core': 1234, 'fees': 199, 'surge': 30}, {'active': True, 'expires': 100}, 100],
2667),
('normal control 1', [{'core': 1234, 'fees': 250, 'surge': 30}, {'active': False, 'expires': 100}, 101],
3952),
('normal control 2', [{'core': 1000, 'fees': 0, 'surge': 17}, {'active': True, 'expires': 100}, 100], 1700),
('normal control 3', [{'core': 1000, 'fees': 250, 'surge': 15}, {'active': False, 'expires': 100}, 100],
1750),
('normal control 4', [{'core': 1234, 'fees': 0, 'surge': 30}, {'active': False, 'expires': 100}, 101],
3702)],
[('regression: membership expiry',
[{'core': 1234, 'fees': 0, 'surge': 12}, {'active': True, 'expires': 100}, 101], 1481),
('partial repair probe: membership expiry',
[{'core': 1234, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100], 2718),
('second regression', [{'core': 2555, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 100],
5110),
('normal control 1', [{'core': 1234, 'fees': 250, 'surge': 20}, {'active': False, 'expires': 100}, 100],
2718),
('normal control 2', [{'core': 999, 'fees': 199, 'surge': 20}, {'active': True, 'expires': 100}, 100],
2197),
('normal control 3', [{'core': 2555, 'fees': 0, 'surge': 17}, {'active': True, 'expires': 100}, 100], 4344),
('normal control 4', [{'core': 2555, 'fees': 250, 'surge': 12}, {'active': False, 'expires': 100}, 100],
3316)],
[('regression: membership expiry',
[{'core': 1234, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 101], 3702),
('partial repair probe: membership expiry',
[{'core': 2555, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 100], 5110),
('second regression', [{'core': 999, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100],
2248),
('normal control 1', [{'core': 1234, 'fees': 199, 'surge': 12}, {'active': True, 'expires': 100}, 99],
1532),
('normal control 2', [{'core': 2555, 'fees': 0, 'surge': 17}, {'active': True, 'expires': 100}, 100], 4344),
('normal control 3', [{'core': 2555, 'fees': 0, 'surge': 15}, {'active': False, 'expires': 100}, 101],
3833),
('normal control 4', [{'core': 1234, 'fees': 199, 'surge': 10}, {'active': True, 'expires': 100}, 99],
1310)],
[('regression: membership expiry',
[{'core': 999, 'fees': 0, 'surge': 12}, {'active': True, 'expires': 100}, 101], 1199),
('partial repair probe: membership expiry',
[{'core': 1000, 'fees': 250, 'surge': 10}, {'active': True, 'expires': 100}, 100], 1150),
('second regression', [{'core': 2555, 'fees': 245, 'surge': 10}, {'active': True, 'expires': 100}, 100],
2545),
('normal control 1', [{'core': 1234, 'fees': 0, 'surge': 17}, {'active': False, 'expires': 100}, 101],
2098),
('normal control 2', [{'core': 1000, 'fees': 250, 'surge': 17}, {'active': False, 'expires': 100}, 101],
1950),
('normal control 3', [{'core': 2555, 'fees': 250, 'surge': 15}, {'active': False, 'expires': 100}, 101],
4083),
('normal control 4', [{'core': 1000, 'fees': 199, 'surge': 12}, {'active': True, 'expires': 100}, 99],
1279)]]
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: membership expiry | 2800 | 2800 | Passed |
| partial repair probe: membership expiry | 6388 | 5110 | Failed |
| second regression | 3702 | 2468 | Failed |
| normal control 1 | 5309 | 5309 | Passed |
| normal control 2 | 2248 | 2248 | Passed |
| normal control 3 | 7864 | 7864 | Passed |
| normal control 4 | 2754 | 2754 | Passed |
SHA-256 / ea4c1d7a47a9fd78b050a9f66bcb84cead20ac9ed2fc4a00efb92fb783c10536
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(fare, member, now):
active = member['active'] and now <= member['expires']
surge = fare['surge']
if active:
surge = min(surge, 20)
surged = (fare['core'] * surge * 2 + 10) // 20
disc = 0
if active and surge <= 15:
disc = surged // 10
return surged - disc + fare['fees']
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: membership expiry',
[{'core': 2555, 'fees': 245, 'surge': 10}, {'active': True, 'expires': 100}, 101], 2800),
('partial repair probe: membership expiry',
[{'core': 2555, 'fees': 0, 'surge': 25}, {'active': True, 'expires': 100}, 100], 5110),
('second regression', [{'core': 1234, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 100],
2468),
('normal control 1', [{'core': 2555, 'fees': 199, 'surge': 20}, {'active': True, 'expires': 100}, 100],
5309),
('normal control 2', [{'core': 999, 'fees': 250, 'surge': 20}, {'active': True, 'expires': 100}, 100],
2248),
('normal control 3', [{'core': 2555, 'fees': 199, 'surge': 30}, {'active': False, 'expires': 100}, 100],
7864),
('normal control 4', [{'core': 2555, 'fees': 199, 'surge': 10}, {'active': False, 'expires': 100}, 100],
2754)],
[('regression: membership expiry',
[{'core': 1000, 'fees': 0, 'surge': 25}, {'active': True, 'expires': 100}, 101], 2500),
('partial repair probe: membership expiry',
[{'core': 2555, 'fees': 199, 'surge': 15}, {'active': True, 'expires': 100}, 100], 3649),
('second regression', [{'core': 1234, 'fees': 199, 'surge': 30}, {'active': True, 'expires': 100}, 100],
2667),
('normal control 1', [{'core': 1234, 'fees': 250, 'surge': 30}, {'active': False, 'expires': 100}, 101],
3952),
('normal control 2', [{'core': 1000, 'fees': 0, 'surge': 17}, {'active': True, 'expires': 100}, 100], 1700),
('normal control 3', [{'core': 1000, 'fees': 250, 'surge': 15}, {'active': False, 'expires': 100}, 100],
1750),
('normal control 4', [{'core': 1234, 'fees': 0, 'surge': 30}, {'active': False, 'expires': 100}, 101],
3702)],
[('regression: membership expiry',
[{'core': 1234, 'fees': 0, 'surge': 12}, {'active': True, 'expires': 100}, 101], 1481),
('partial repair probe: membership expiry',
[{'core': 1234, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100], 2718),
('second regression', [{'core': 2555, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 100],
5110),
('normal control 1', [{'core': 1234, 'fees': 250, 'surge': 20}, {'active': False, 'expires': 100}, 100],
2718),
('normal control 2', [{'core': 999, 'fees': 199, 'surge': 20}, {'active': True, 'expires': 100}, 100],
2197),
('normal control 3', [{'core': 2555, 'fees': 0, 'surge': 17}, {'active': True, 'expires': 100}, 100], 4344),
('normal control 4', [{'core': 2555, 'fees': 250, 'surge': 12}, {'active': False, 'expires': 100}, 100],
3316)],
[('regression: membership expiry',
[{'core': 1234, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 101], 3702),
('partial repair probe: membership expiry',
[{'core': 2555, 'fees': 0, 'surge': 30}, {'active': True, 'expires': 100}, 100], 5110),
('second regression', [{'core': 999, 'fees': 250, 'surge': 30}, {'active': True, 'expires': 100}, 100],
2248),
('normal control 1', [{'core': 1234, 'fees': 199, 'surge': 12}, {'active': True, 'expires': 100}, 99],
1532),
('normal control 2', [{'core': 2555, 'fees': 0, 'surge': 17}, {'active': True, 'expires': 100}, 100], 4344),
('normal control 3', [{'core': 2555, 'fees': 0, 'surge': 15}, {'active': False, 'expires': 100}, 101],
3833),
('normal control 4', [{'core': 1234, 'fees': 199, 'surge': 10}, {'active': True, 'expires': 100}, 99],
1310)],
[('regression: membership expiry',
[{'core': 999, 'fees': 0, 'surge': 12}, {'active': True, 'expires': 100}, 101], 1199),
('partial repair probe: membership expiry',
[{'core': 1000, 'fees': 250, 'surge': 10}, {'active': True, 'expires': 100}, 100], 1150),
('second regression', [{'core': 2555, 'fees': 245, 'surge': 10}, {'active': True, 'expires': 100}, 100],
2545),
('normal control 1', [{'core': 1234, 'fees': 0, 'surge': 17}, {'active': False, 'expires': 100}, 101],
2098),
('normal control 2', [{'core': 1000, 'fees': 250, 'surge': 17}, {'active': False, 'expires': 100}, 101],
1950),
('normal control 3', [{'core': 2555, 'fees': 250, 'surge': 15}, {'active': False, 'expires': 100}, 101],
4083),
('normal control 4', [{'core': 1000, 'fees': 199, 'surge': 12}, {'active': True, 'expires': 100}, 99],
1279)]]
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: membership expiry | 2800 | 2800 | Passed |
| partial repair probe: membership expiry | 5110 | 5110 | Passed |
| second regression | 2468 | 2468 | Passed |
| normal control 1 | 5309 | 5309 | Passed |
| normal control 2 | 2248 | 2248 | Passed |
| normal control 3 | 7864 | 7864 | Passed |
| normal control 4 | 2754 | 2754 | Passed |
SHA-256 / 66368a53e6c7fdb5072c3450fe296fba76b5c2c543095c601a331afc454bf82c
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:43.758024+00:00.
Case digest / 923634f6833db77c255fce15e6a6cd86be6116e3ac9f1d0b5c2975a774e14dce