{"abstract":"Two 2-minute stops are billed although each is within its allowance.","category":"Ride-hailing fare and surge pricing","checks":7,"contract":"Intermediate stops each add stop_fee; up to max_stops stops are allowed, more is an error. Each stop has its own free waiting allowance of free_wait seconds; waiting beyond it at that stop is billed per started minute at per_min. Return the stop fee total in cents.","evaluation_group":"w2-ride-hailing-fare-surge-multi-stop-fees","failed_approach":"Pooling with a per-stop allowance still lets one long stop use another stop's allowance.","family":"w2-ride-hailing-fare-surge-multi-stop-fees-per-stop-free-wait","id":"FA-85706","implementations":{"attempt":{"sha256":"591b76cb7fedaee317fcff21dccc85b7295c4ef27fdb0277e2691819f48e6fff","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(stops, policy):\n    if len(stops) > policy['max_stops']:\n        return {'error': 'too_many_stops'}\n    waits = [s['wait_s'] for s in stops]\n    fee = policy['stop_fee'] * len(stops)\n    for w in [sum(waits) - policy['free_wait'] * (len(waits) - 1)]:\n        over = w - policy['free_wait']\n        if over > 0:\n            fee += -(-over // 60) * policy['per_min']\n    return {'fee': fee}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 180}, {'wait_s': 240}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 390}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 420}, {'wait_s': 0}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 460}),\n  ('second regression',\n   [[{'wait_s': 181}, {'wait_s': 300}, {'wait_s': 170}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 390}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 0}),\n  ('normal control 2', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 3',\n   [[{'wait_s': 0}, {'wait_s': 181}, {'wait_s': 420}, {'wait_s': 180}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'error': 'too_many_stops'}),\n  ('normal control 4',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 150})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 0}, {'wait_s': 300}, {'wait_s': 60}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 380}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 60}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 280}),\n  ('second regression',\n   [[{'wait_s': 300}, {'wait_s': 420}, {'wait_s': 300}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 770}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 2',\n   [[{'wait_s': 181}, {'wait_s': 170}, {'wait_s': 170}, {'wait_s': 300}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'error': 'too_many_stops'}),\n  ('normal control 3',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 150}),\n  ('normal control 4',\n   [[{'wait_s': 170}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}], {'fee': 100})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 240}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 320}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 0}, {'wait_s': 60}, {'wait_s': 240}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 330}),\n  ('second regression',\n   [[{'wait_s': 300}, {'wait_s': 240}, {'wait_s': 170}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 390}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 2',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 100}),\n  ('normal control 3',\n   [[{'wait_s': 0}, {'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 200}),\n  ('normal control 4', [[{'wait_s': 0}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 150})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 240}, {'wait_s': 420}, {'wait_s': 420}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 810}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 420}, {'wait_s': 300}, {'wait_s': 60}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 480}),\n  ('second regression',\n   [[{'wait_s': 240}, {'wait_s': 300}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 320}),\n  ('normal control 1',\n   [[{'wait_s': 0}, {'wait_s': 180}, {'wait_s': 420}, {'wait_s': 0}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'error': 'too_many_stops'}),\n  ('normal control 2',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 150}),\n  ('normal control 3',\n   [[{'wait_s': 60}, {'wait_s': 240}, {'wait_s': 181}, {'wait_s': 181}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'error': 'too_many_stops'}),\n  ('normal control 4',\n   [[{'wait_s': 420}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 220})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 181}, {'wait_s': 300}, {'wait_s': 240}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 420}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 240}, {'wait_s': 60}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}],\n   {'fee': 540}),\n  ('second regression',\n   [[{'wait_s': 170}, {'wait_s': 300}, {'wait_s': 420}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 540}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 2',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 150}),\n  ('normal control 3',\n   [[{'wait_s': 0}, {'wait_s': 170}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 300}),\n  ('normal control 4', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 0})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"9111bdc60aa37a3910b68d1d148fa96ebb47772323497fe44c5cb6f426a0b5e4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(stops, policy):\n    if len(stops) > policy['max_stops']:\n        return {'error': 'too_many_stops'}\n    waits = [s['wait_s'] for s in stops]\n    fee = policy['stop_fee'] * len(stops)\n    for w in [sum(waits)]:\n        over = w - policy['free_wait']\n        if over > 0:\n            fee += -(-over // 60) * policy['per_min']\n    return {'fee': fee}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 180}, {'wait_s': 240}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 390}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 420}, {'wait_s': 0}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 460}),\n  ('second regression',\n   [[{'wait_s': 181}, {'wait_s': 300}, {'wait_s': 170}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 390}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 0}),\n  ('normal control 2', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 3',\n   [[{'wait_s': 0}, {'wait_s': 181}, {'wait_s': 420}, {'wait_s': 180}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'error': 'too_many_stops'}),\n  ('normal control 4',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 150})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 0}, {'wait_s': 300}, {'wait_s': 60}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 380}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 60}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 280}),\n  ('second regression',\n   [[{'wait_s': 300}, {'wait_s': 420}, {'wait_s': 300}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 770}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 2',\n   [[{'wait_s': 181}, {'wait_s': 170}, {'wait_s': 170}, {'wait_s': 300}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'error': 'too_many_stops'}),\n  ('normal control 3',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 150}),\n  ('normal control 4',\n   [[{'wait_s': 170}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}], {'fee': 100})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 240}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 320}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 0}, {'wait_s': 60}, {'wait_s': 240}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 330}),\n  ('second regression',\n   [[{'wait_s': 300}, {'wait_s': 240}, {'wait_s': 170}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 390}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 2',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 100}),\n  ('normal control 3',\n   [[{'wait_s': 0}, {'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 200}),\n  ('normal control 4', [[{'wait_s': 0}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 150})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 240}, {'wait_s': 420}, {'wait_s': 420}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 810}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 420}, {'wait_s': 300}, {'wait_s': 60}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 480}),\n  ('second regression',\n   [[{'wait_s': 240}, {'wait_s': 300}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 320}),\n  ('normal control 1',\n   [[{'wait_s': 0}, {'wait_s': 180}, {'wait_s': 420}, {'wait_s': 0}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'error': 'too_many_stops'}),\n  ('normal control 2',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 150}),\n  ('normal control 3',\n   [[{'wait_s': 60}, {'wait_s': 240}, {'wait_s': 181}, {'wait_s': 181}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'error': 'too_many_stops'}),\n  ('normal control 4',\n   [[{'wait_s': 420}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 220})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 181}, {'wait_s': 300}, {'wait_s': 240}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 420}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 240}, {'wait_s': 60}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}],\n   {'fee': 540}),\n  ('second regression',\n   [[{'wait_s': 170}, {'wait_s': 300}, {'wait_s': 420}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 540}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 2',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 150}),\n  ('normal control 3',\n   [[{'wait_s': 0}, {'wait_s': 170}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 300}),\n  ('normal control 4', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 0})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"1931e98a97bfff929ec5059abc45be230619ea32cbb4a684b61e416a0408004f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(stops, policy):\n    if len(stops) > policy['max_stops']:\n        return {'error': 'too_many_stops'}\n    waits = [s['wait_s'] for s in stops]\n    fee = policy['stop_fee'] * len(stops)\n    for w in waits:\n        over = w - policy['free_wait']\n        if over > 0:\n            fee += -(-over // 60) * policy['per_min']\n    return {'fee': fee}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 180}, {'wait_s': 240}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 390}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 420}, {'wait_s': 0}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 460}),\n  ('second regression',\n   [[{'wait_s': 181}, {'wait_s': 300}, {'wait_s': 170}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 390}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 0}),\n  ('normal control 2', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 3',\n   [[{'wait_s': 0}, {'wait_s': 181}, {'wait_s': 420}, {'wait_s': 180}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'error': 'too_many_stops'}),\n  ('normal control 4',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 150})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 0}, {'wait_s': 300}, {'wait_s': 60}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 380}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 60}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 280}),\n  ('second regression',\n   [[{'wait_s': 300}, {'wait_s': 420}, {'wait_s': 300}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 770}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 2',\n   [[{'wait_s': 181}, {'wait_s': 170}, {'wait_s': 170}, {'wait_s': 300}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'error': 'too_many_stops'}),\n  ('normal control 3',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 150}),\n  ('normal control 4',\n   [[{'wait_s': 170}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}], {'fee': 100})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 240}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 320}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 0}, {'wait_s': 60}, {'wait_s': 240}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 330}),\n  ('second regression',\n   [[{'wait_s': 300}, {'wait_s': 240}, {'wait_s': 170}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 390}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 2',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 100}),\n  ('normal control 3',\n   [[{'wait_s': 0}, {'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 200}),\n  ('normal control 4', [[{'wait_s': 0}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 150})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 240}, {'wait_s': 420}, {'wait_s': 420}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 810}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 420}, {'wait_s': 300}, {'wait_s': 60}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 480}),\n  ('second regression',\n   [[{'wait_s': 240}, {'wait_s': 300}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 320}),\n  ('normal control 1',\n   [[{'wait_s': 0}, {'wait_s': 180}, {'wait_s': 420}, {'wait_s': 0}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'error': 'too_many_stops'}),\n  ('normal control 2',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 150}),\n  ('normal control 3',\n   [[{'wait_s': 60}, {'wait_s': 240}, {'wait_s': 181}, {'wait_s': 181}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'error': 'too_many_stops'}),\n  ('normal control 4',\n   [[{'wait_s': 420}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 220})],\n [('regression: per-stop free wait',\n   [[{'wait_s': 181}, {'wait_s': 300}, {'wait_s': 240}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}],\n   {'fee': 420}),\n  ('partial repair probe: per-stop free wait',\n   [[{'wait_s': 300}, {'wait_s': 240}, {'wait_s': 60}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}],\n   {'fee': 540}),\n  ('second regression',\n   [[{'wait_s': 170}, {'wait_s': 300}, {'wait_s': 420}],\n    {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 100}],\n   {'fee': 540}),\n  ('normal control 1', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}], {'fee': 0}),\n  ('normal control 2',\n   [[{'wait_s': 180}], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 150}], {'fee': 150}),\n  ('normal control 3',\n   [[{'wait_s': 0}, {'wait_s': 170}], {'free_wait': 180, 'max_stops': 3, 'per_min': 40, 'stop_fee': 150}],\n   {'fee': 300}),\n  ('normal control 4', [[], {'free_wait': 180, 'max_stops': 3, 'per_min': 30, 'stop_fee': 100}], {'fee': 0})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-ride-hailing-fare-surge-multi-stop-fees-per-stop-free-wait","generated_at":"2026-09-29T14:50:42.884994+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ride-hailing prices are computed per trip at scale; ordering, unit and boundary slips become systematic over- or under-charging.","repair":"Apply the free allowance and minute rounding per stop.","root_cause":"Waits are summed and the allowance is granted only once.","sha256":"c6ede2029a429e1a0c9847dabd31ad682386e10c9b64ad549f28a08800342c69","title":"Free waiting pooled across all stops · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.395,"exit_code":1,"observations":[{"actual":{"fee":390},"check":"regression: per-stop free wait","expected":{"fee":390},"passed":true},{"actual":{"fee":340},"check":"partial repair probe: per-stop free wait","expected":{"fee":460},"passed":false},{"actual":{"fee":360},"check":"second regression","expected":{"fee":390},"passed":false},{"actual":{"fee":0},"check":"normal control 1","expected":{"fee":0},"passed":true},{"actual":{"fee":0},"check":"normal control 2","expected":{"fee":0},"passed":true},{"actual":{"error":"too_many_stops"},"check":"normal control 3","expected":{"error":"too_many_stops"},"passed":true},{"actual":{"fee":150},"check":"normal control 4","expected":{"fee":150},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: per-stop free wait\", \"actual\": {\"fee\": 390}, \"expected\": {\"fee\": 390}, \"passed\": true}, {\"check\": \"partial repair probe: per-stop free wait\", \"actual\": {\"fee\": 340}, \"expected\": {\"fee\": 460}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"fee\": 360}, \"expected\": {\"fee\": 390}, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": {\"fee\": 0}, \"expected\": {\"fee\": 0}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"fee\": 0}, \"expected\": {\"fee\": 0}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"error\": \"too_many_stops\"}, \"expected\": {\"error\": \"too_many_stops\"}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"fee\": 150}, \"expected\": {\"fee\": 150}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.544,"exit_code":1,"observations":[{"actual":{"fee":570},"check":"regression: per-stop free wait","expected":{"fee":390},"passed":false},{"actual":{"fee":460},"check":"partial repair probe: per-stop free wait","expected":{"fee":460},"passed":true},{"actual":{"fee":540},"check":"second regression","expected":{"fee":390},"passed":false},{"actual":{"fee":0},"check":"normal control 1","expected":{"fee":0},"passed":true},{"actual":{"fee":0},"check":"normal control 2","expected":{"fee":0},"passed":true},{"actual":{"error":"too_many_stops"},"check":"normal control 3","expected":{"error":"too_many_stops"},"passed":true},{"actual":{"fee":150},"check":"normal control 4","expected":{"fee":150},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: per-stop free wait\", \"actual\": {\"fee\": 570}, \"expected\": {\"fee\": 390}, \"passed\": false}, {\"check\": \"partial repair probe: per-stop free wait\", \"actual\": {\"fee\": 460}, \"expected\": {\"fee\": 460}, \"passed\": true}, {\"check\": \"second regression\", \"actual\": {\"fee\": 540}, \"expected\": {\"fee\": 390}, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": {\"fee\": 0}, \"expected\": {\"fee\": 0}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"fee\": 0}, \"expected\": {\"fee\": 0}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"error\": \"too_many_stops\"}, \"expected\": {\"error\": \"too_many_stops\"}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"fee\": 150}, \"expected\": {\"fee\": 150}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.207,"exit_code":0,"observations":[{"actual":{"fee":390},"check":"regression: per-stop free wait","expected":{"fee":390},"passed":true},{"actual":{"fee":460},"check":"partial repair probe: per-stop free wait","expected":{"fee":460},"passed":true},{"actual":{"fee":390},"check":"second regression","expected":{"fee":390},"passed":true},{"actual":{"fee":0},"check":"normal control 1","expected":{"fee":0},"passed":true},{"actual":{"fee":0},"check":"normal control 2","expected":{"fee":0},"passed":true},{"actual":{"error":"too_many_stops"},"check":"normal control 3","expected":{"error":"too_many_stops"},"passed":true},{"actual":{"fee":150},"check":"normal control 4","expected":{"fee":150},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: per-stop free wait\", \"actual\": {\"fee\": 390}, \"expected\": {\"fee\": 390}, \"passed\": true}, {\"check\": \"partial repair probe: per-stop free wait\", \"actual\": {\"fee\": 460}, \"expected\": {\"fee\": 460}, \"passed\": true}, {\"check\": \"second regression\", \"actual\": {\"fee\": 390}, \"expected\": {\"fee\": 390}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"fee\": 0}, \"expected\": {\"fee\": 0}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"fee\": 0}, \"expected\": {\"fee\": 0}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"error\": \"too_many_stops\"}, \"expected\": {\"error\": \"too_many_stops\"}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"fee\": 150}, \"expected\": {\"fee\": 150}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}