{"abstract":"An up-travelling car stops for passengers who want to go down.","category":"Elevator dispatch scheduling","checks":8,"contract":"A car stopped at floor with direction up, down or idle chooses its next stop. Travelling up it stops at the nearest car call or up hall call above; failing that it runs to the highest down hall call above; failing that it reverses and applies the mirrored rule downwards (nearest car call or down call below, else lowest up call below). An idle car heads towards the nearest call other than its own floor (ties to the lower floor). Returns [floor, travel direction] or [None, idle].","contract_signature":"x","evaluation_group":"w2-elevator_dispatch_scheduling-collective-next-stop","failed_approach":"Dropping car calls from the set makes passengers ride past their floor.","family":"w2-elevator_dispatch_scheduling-collective-next-stop-same-direction-call-set","id":"FA-67341","implementations":{"attempt":{"sha256":"5a6ab6897799d4f882780297e6fc80b295ac9d24a55914a61a8d63d41925c4ee","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    f = x['floor']\n    cc = set(x['car_calls'])\n    up = set(x['hall_up'])\n    dn = set(x['hall_down'])\n    def ahead(sd):\n        if sd == 'up':\n            same = [c for c in up if c > f]\n            if same:\n                return [min(same), 'up']\n            opp = [c for c in dn if c > f]\n            if opp:\n                return [max(opp), 'up']\n        else:\n            same = [c for c in cc | dn if c < f]\n            if same:\n                return [max(same), 'down']\n            opp = [c for c in up if c < f]\n            if opp:\n                return [min(opp), 'down']\n        return None\n    d = x['dir']\n    if d == 'idle':\n        allc = [c for c in sorted(cc | up | dn, key=lambda c: (abs(c - f), c)) if c != f]\n        if not allc:\n            return [None, 'idle']\n        d = 'up' if allc[0] > f else 'down'\n    r = ahead(d)\n    if r is None:\n        r = ahead('down' if d == 'up' else 'up')\n    return r if r is not None else [None, 'idle']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 17', {'floor': 9, 'dir': 'up', 'car_calls': [], 'hall_up': [9, 6, 1], 'hall_down': [10, 9, 11]}, [11, 'up']), ('sampled regression 1', {'floor': 1, 'dir': 'down', 'car_calls': [7, 4, 8], 'hall_up': [], 'hall_down': [10, 5, 3]}, [4, 'up']), ('boundary: car call ahead of an up call', {'floor': 2, 'dir': 'up', 'car_calls': [6], 'hall_up': [4], 'hall_down': []}, [4, 'up']), ('regression: highest down call is the reversal', {'floor': 1, 'dir': 'up', 'car_calls': [], 'hall_up': [], 'hall_down': [4, 9]}, [9, 'up']), ('control 4', {'floor': 4, 'dir': 'down', 'car_calls': [10], 'hall_up': [6, 0], 'hall_down': [10]}, [0, 'down']), ('control 7', {'floor': 3, 'dir': 'down', 'car_calls': [7, 3], 'hall_up': [10], 'hall_down': [2, 4, 7]}, [2, 'down']), ('control 10', {'floor': 10, 'dir': 'down', 'car_calls': [], 'hall_up': [], 'hall_down': [3]}, [3, 'down'])], [('regression: highest down call is the reversal', {'floor': 1, 'dir': 'up', 'car_calls': [], 'hall_up': [], 'hall_down': [4, 9]}, [9, 'up']), ('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 76', {'floor': 0, 'dir': 'idle', 'car_calls': [6, 0, 9], 'hall_up': [2, 6], 'hall_down': [1]}, [2, 'up']), ('control 22', {'floor': 2, 'dir': 'idle', 'car_calls': [0, 3, 4], 'hall_up': [], 'hall_down': []}, [3, 'up']), ('boundary: idle car equidistant calls', {'floor': 5, 'dir': 'idle', 'car_calls': [3, 7], 'hall_up': [], 'hall_down': []}, [3, 'down']), ('control 12', {'floor': 5, 'dir': 'idle', 'car_calls': [6, 9], 'hall_up': [6, 10], 'hall_down': [6, 2, 7]}, [6, 'up']), ('control 15', {'floor': 3, 'dir': 'down', 'car_calls': [], 'hall_up': [2, 4, 10], 'hall_down': [6, 5, 8]}, [2, 'down']), ('control 18', {'floor': 1, 'dir': 'idle', 'car_calls': [1], 'hall_up': [10, 1, 2], 'hall_down': [5]}, [2, 'up'])], [('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 39', {'floor': 0, 'dir': 'down', 'car_calls': [9, 2], 'hall_up': [5], 'hall_down': [6, 1, 7]}, [2, 'up']), ('control 71', {'floor': 9, 'dir': 'up', 'car_calls': [10, 2], 'hall_up': [], 'hall_down': [2, 5]}, [10, 'up']), ('boundary: idle car nearest call above', {'floor': 5, 'dir': 'idle', 'car_calls': [], 'hall_up': [6], 'hall_down': [1]}, [6, 'up']), ('boundary: down car with nothing below', {'floor': 6, 'dir': 'down', 'car_calls': [], 'hall_up': [9], 'hall_down': []}, [9, 'up']), ('control 23', {'floor': 1, 'dir': 'idle', 'car_calls': [], 'hall_up': [5], 'hall_down': []}, [5, 'up']), ('control 26', {'floor': 7, 'dir': 'idle', 'car_calls': [9], 'hall_up': [3], 'hall_down': [10, 5, 9]}, [5, 'down']), ('control 29', {'floor': 4, 'dir': 'down', 'car_calls': [2], 'hall_up': [5], 'hall_down': []}, [2, 'down'])], [('regression: highest down call is the reversal', {'floor': 1, 'dir': 'up', 'car_calls': [], 'hall_up': [], 'hall_down': [4, 9]}, [9, 'up']), ('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 1', {'floor': 1, 'dir': 'down', 'car_calls': [7, 4, 8], 'hall_up': [], 'hall_down': [10, 5, 3]}, [4, 'up']), ('control 16', {'floor': 3, 'dir': 'up', 'car_calls': [0, 6, 5], 'hall_up': [10], 'hall_down': []}, [5, 'up']), ('boundary: up car with nothing above', {'floor': 6, 'dir': 'up', 'car_calls': [2], 'hall_up': [1], 'hall_down': []}, [2, 'down']), ('control 34', {'floor': 11, 'dir': 'down', 'car_calls': [10], 'hall_up': [4, 5], 'hall_down': []}, [10, 'down']), ('control 37', {'floor': 5, 'dir': 'idle', 'car_calls': [], 'hall_up': [0, 1], 'hall_down': [1, 7]}, [7, 'up']), ('control 40', {'floor': 9, 'dir': 'up', 'car_calls': [1, 9], 'hall_up': [8, 10, 5], 'hall_down': []}, [10, 'up'])], [('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 49', {'floor': 2, 'dir': 'idle', 'car_calls': [], 'hall_up': [9, 10], 'hall_down': [7]}, [9, 'up']), ('control 52', {'floor': 5, 'dir': 'idle', 'car_calls': [8], 'hall_up': [5, 10], 'hall_down': []}, [8, 'up']), ('boundary: car call ahead of an up call', {'floor': 2, 'dir': 'up', 'car_calls': [6], 'hall_up': [4], 'hall_down': []}, [4, 'up']), ('regression: highest down call is the reversal', {'floor': 1, 'dir': 'up', 'car_calls': [], 'hall_up': [], 'hall_down': [4, 9]}, [9, 'up']), ('control 45', {'floor': 9, 'dir': 'idle', 'car_calls': [9, 0], 'hall_up': [7], 'hall_down': [2, 6, 1]}, [6, 'down']), ('control 48', {'floor': 4, 'dir': 'down', 'car_calls': [9], 'hall_up': [4, 2, 1], 'hall_down': []}, [1, 'down']), ('control 51', {'floor': 6, 'dir': 'idle', 'car_calls': [6], 'hall_up': [9], 'hall_down': []}, [9, 'up'])]]\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":"933a3a15080da81dbae88776d232c87ba9882b91039ddbc8adbc8d3cb287e440","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    f = x['floor']\n    cc = set(x['car_calls'])\n    up = set(x['hall_up'])\n    dn = set(x['hall_down'])\n    def ahead(sd):\n        if sd == 'up':\n            same = [c for c in cc | up | dn if c > f]\n            if same:\n                return [min(same), 'up']\n            opp = [c for c in dn if c > f]\n            if opp:\n                return [max(opp), 'up']\n        else:\n            same = [c for c in cc | dn if c < f]\n            if same:\n                return [max(same), 'down']\n            opp = [c for c in up if c < f]\n            if opp:\n                return [min(opp), 'down']\n        return None\n    d = x['dir']\n    if d == 'idle':\n        allc = [c for c in sorted(cc | up | dn, key=lambda c: (abs(c - f), c)) if c != f]\n        if not allc:\n            return [None, 'idle']\n        d = 'up' if allc[0] > f else 'down'\n    r = ahead(d)\n    if r is None:\n        r = ahead('down' if d == 'up' else 'up')\n    return r if r is not None else [None, 'idle']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 17', {'floor': 9, 'dir': 'up', 'car_calls': [], 'hall_up': [9, 6, 1], 'hall_down': [10, 9, 11]}, [11, 'up']), ('sampled regression 1', {'floor': 1, 'dir': 'down', 'car_calls': [7, 4, 8], 'hall_up': [], 'hall_down': [10, 5, 3]}, [4, 'up']), ('boundary: car call ahead of an up call', {'floor': 2, 'dir': 'up', 'car_calls': [6], 'hall_up': [4], 'hall_down': []}, [4, 'up']), ('regression: highest down call is the reversal', {'floor': 1, 'dir': 'up', 'car_calls': [], 'hall_up': [], 'hall_down': [4, 9]}, [9, 'up']), ('control 4', {'floor': 4, 'dir': 'down', 'car_calls': [10], 'hall_up': [6, 0], 'hall_down': [10]}, [0, 'down']), ('control 7', {'floor': 3, 'dir': 'down', 'car_calls': [7, 3], 'hall_up': [10], 'hall_down': [2, 4, 7]}, [2, 'down']), ('control 10', {'floor': 10, 'dir': 'down', 'car_calls': [], 'hall_up': [], 'hall_down': [3]}, [3, 'down'])], [('regression: highest down call is the reversal', {'floor': 1, 'dir': 'up', 'car_calls': [], 'hall_up': [], 'hall_down': [4, 9]}, [9, 'up']), ('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 76', {'floor': 0, 'dir': 'idle', 'car_calls': [6, 0, 9], 'hall_up': [2, 6], 'hall_down': [1]}, [2, 'up']), ('control 22', {'floor': 2, 'dir': 'idle', 'car_calls': [0, 3, 4], 'hall_up': [], 'hall_down': []}, [3, 'up']), ('boundary: idle car equidistant calls', {'floor': 5, 'dir': 'idle', 'car_calls': [3, 7], 'hall_up': [], 'hall_down': []}, [3, 'down']), ('control 12', {'floor': 5, 'dir': 'idle', 'car_calls': [6, 9], 'hall_up': [6, 10], 'hall_down': [6, 2, 7]}, [6, 'up']), ('control 15', {'floor': 3, 'dir': 'down', 'car_calls': [], 'hall_up': [2, 4, 10], 'hall_down': [6, 5, 8]}, [2, 'down']), ('control 18', {'floor': 1, 'dir': 'idle', 'car_calls': [1], 'hall_up': [10, 1, 2], 'hall_down': [5]}, [2, 'up'])], [('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 39', {'floor': 0, 'dir': 'down', 'car_calls': [9, 2], 'hall_up': [5], 'hall_down': [6, 1, 7]}, [2, 'up']), ('control 71', {'floor': 9, 'dir': 'up', 'car_calls': [10, 2], 'hall_up': [], 'hall_down': [2, 5]}, [10, 'up']), ('boundary: idle car nearest call above', {'floor': 5, 'dir': 'idle', 'car_calls': [], 'hall_up': [6], 'hall_down': [1]}, [6, 'up']), ('boundary: down car with nothing below', {'floor': 6, 'dir': 'down', 'car_calls': [], 'hall_up': [9], 'hall_down': []}, [9, 'up']), ('control 23', {'floor': 1, 'dir': 'idle', 'car_calls': [], 'hall_up': [5], 'hall_down': []}, [5, 'up']), ('control 26', {'floor': 7, 'dir': 'idle', 'car_calls': [9], 'hall_up': [3], 'hall_down': [10, 5, 9]}, [5, 'down']), ('control 29', {'floor': 4, 'dir': 'down', 'car_calls': [2], 'hall_up': [5], 'hall_down': []}, [2, 'down'])], [('regression: highest down call is the reversal', {'floor': 1, 'dir': 'up', 'car_calls': [], 'hall_up': [], 'hall_down': [4, 9]}, [9, 'up']), ('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 1', {'floor': 1, 'dir': 'down', 'car_calls': [7, 4, 8], 'hall_up': [], 'hall_down': [10, 5, 3]}, [4, 'up']), ('control 16', {'floor': 3, 'dir': 'up', 'car_calls': [0, 6, 5], 'hall_up': [10], 'hall_down': []}, [5, 'up']), ('boundary: up car with nothing above', {'floor': 6, 'dir': 'up', 'car_calls': [2], 'hall_up': [1], 'hall_down': []}, [2, 'down']), ('control 34', {'floor': 11, 'dir': 'down', 'car_calls': [10], 'hall_up': [4, 5], 'hall_down': []}, [10, 'down']), ('control 37', {'floor': 5, 'dir': 'idle', 'car_calls': [], 'hall_up': [0, 1], 'hall_down': [1, 7]}, [7, 'up']), ('control 40', {'floor': 9, 'dir': 'up', 'car_calls': [1, 9], 'hall_up': [8, 10, 5], 'hall_down': []}, [10, 'up'])], [('regression: down call passed on the way up', {'floor': 3, 'dir': 'up', 'car_calls': [8], 'hall_up': [], 'hall_down': [5]}, [8, 'up']), ('sampled regression 49', {'floor': 2, 'dir': 'idle', 'car_calls': [], 'hall_up': [9, 10], 'hall_down': [7]}, [9, 'up']), ('control 52', {'floor': 5, 'dir': 'idle', 'car_calls': [8], 'hall_up': [5, 10], 'hall_down': []}, [8, 'up']), ('boundary: car call ahead of an up call', {'floor': 2, 'dir': 'up', 'car_calls': [6], 'hall_up': [4], 'hall_down': []}, [4, 'up']), ('regression: highest down call is the reversal', {'floor': 1, 'dir': 'up', 'car_calls': [], 'hall_up': [], 'hall_down': [4, 9]}, [9, 'up']), ('control 45', {'floor': 9, 'dir': 'idle', 'car_calls': [9, 0], 'hall_up': [7], 'hall_down': [2, 6, 1]}, [6, 'down']), ('control 48', {'floor': 4, 'dir': 'down', 'car_calls': [9], 'hall_up': [4, 2, 1], 'hall_down': []}, [1, 'down']), ('control 51', {'floor': 6, 'dir': 'idle', 'car_calls': [6], 'hall_up': [9], 'hall_down': []}, [9, 'up'])]]\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":"Stipulated toy lift-control contract for a bounded teaching model; it makes no claim of conformance to any lift code or vendor dispatcher and omits real safety cases. 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-elevator_dispatch_scheduling-collective-next-stop-same-direction-call-set","generated_at":"2026-09-29T14:47:51.990011+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Lift group controllers make these decisions many times per minute; a wrong answer strands passengers, wastes trips or overrides a safety rule.","root_cause":"Down hall calls are included among the same-direction stops on the way up.","sha256":"c5237b9ee709ac464538a5b07ddb17a94c5a339ad05ed24abb612d699070e6e5","title":"Directional collective next stop: same-direction call set · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.061,"exit_code":1,"observations":[{"actual":[5,"up"],"check":"regression: down call passed on the way up","expected":[8,"up"],"passed":false},{"actual":[11,"up"],"check":"sampled regression 17","expected":[11,"up"],"passed":true},{"actual":[10,"up"],"check":"sampled regression 1","expected":[4,"up"],"passed":false},{"actual":[4,"up"],"check":"boundary: car call ahead of an up call","expected":[4,"up"],"passed":true},{"actual":[9,"up"],"check":"regression: highest down call is the reversal","expected":[9,"up"],"passed":true},{"actual":[0,"down"],"check":"control 4","expected":[0,"down"],"passed":true},{"actual":[2,"down"],"check":"control 7","expected":[2,"down"],"passed":true},{"actual":[3,"down"],"check":"control 10","expected":[3,"down"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: down call passed on the way up\", \"actual\": [5, \"up\"], \"expected\": [8, \"up\"], \"passed\": false}, {\"check\": \"sampled regression 17\", \"actual\": [11, \"up\"], \"expected\": [11, \"up\"], \"passed\": true}, {\"check\": \"sampled regression 1\", \"actual\": [10, \"up\"], \"expected\": [4, \"up\"], \"passed\": false}, {\"check\": \"boundary: car call ahead of an up call\", \"actual\": [4, \"up\"], \"expected\": [4, \"up\"], \"passed\": true}, {\"check\": \"regression: highest down call is the reversal\", \"actual\": [9, \"up\"], \"expected\": [9, \"up\"], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [0, \"down\"], \"expected\": [0, \"down\"], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [2, \"down\"], \"expected\": [2, \"down\"], \"passed\": true}, {\"check\": \"control 10\", \"actual\": [3, \"down\"], \"expected\": [3, \"down\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.177,"exit_code":1,"observations":[{"actual":[5,"up"],"check":"regression: down call passed on the way up","expected":[8,"up"],"passed":false},{"actual":[10,"up"],"check":"sampled regression 17","expected":[11,"up"],"passed":false},{"actual":[3,"up"],"check":"sampled regression 1","expected":[4,"up"],"passed":false},{"actual":[4,"up"],"check":"boundary: car call ahead of an up call","expected":[4,"up"],"passed":true},{"actual":[4,"up"],"check":"regression: highest down call is the reversal","expected":[9,"up"],"passed":false},{"actual":[0,"down"],"check":"control 4","expected":[0,"down"],"passed":true},{"actual":[2,"down"],"check":"control 7","expected":[2,"down"],"passed":true},{"actual":[3,"down"],"check":"control 10","expected":[3,"down"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: down call passed on the way up\", \"actual\": [5, \"up\"], \"expected\": [8, \"up\"], \"passed\": false}, {\"check\": \"sampled regression 17\", \"actual\": [10, \"up\"], \"expected\": [11, \"up\"], \"passed\": false}, {\"check\": \"sampled regression 1\", \"actual\": [3, \"up\"], \"expected\": [4, \"up\"], \"passed\": false}, {\"check\": \"boundary: car call ahead of an up call\", \"actual\": [4, \"up\"], \"expected\": [4, \"up\"], \"passed\": true}, {\"check\": \"regression: highest down call is the reversal\", \"actual\": [4, \"up\"], \"expected\": [9, \"up\"], \"passed\": false}, {\"check\": \"control 4\", \"actual\": [0, \"down\"], \"expected\": [0, \"down\"], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [2, \"down\"], \"expected\": [2, \"down\"], \"passed\": true}, {\"check\": \"control 10\", \"actual\": [3, \"down\"], \"expected\": [3, \"down\"], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}