{"abstract":"An approach-released signal clears before the train arrives on the approach.","category":"Railway interlocking logic","checks":8,"contract":"Each step gives [section beyond occupied, route set, approach occupied]. An auto signal behaves as permanently routed. A signal shows danger whenever the section beyond is occupied; a signal that was clear when a train occupies that section latches a stick that keeps it at danger until the route is set afresh (off then on); auto signals drop the stick every step. Otherwise it clears when routed, not stuck, and for approach-released signals only with the approach occupied. Output the state per step.","evaluation_group":"w2-railway_interlocking_logic-signal-replacement-stick","failed_approach":"Requiring the approach for automatic signals as well stops them clearing for the next train.","family":"w2-railway_interlocking_logic-signal-replacement-stick-approach-release-condition","id":"FA-67186","implementations":{"attempt":{"sha256":"94e3cf4faa4ce59b9a0354e0a58c0a6d1767907ed87a6cc848181e1d2e3ba09a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    mode = x['mode']\n    state = 'danger'\n    stick = False\n    prev_route = False\n    out = []\n    for occ, route, appr in x['steps']:\n        if mode == 'auto':\n            route = True\n        if (route and not prev_route) or mode == 'auto':\n            stick = False\n        if occ:\n            if state == 'clear':\n                stick = True\n            state = 'danger'\n        elif route and not stick and (mode == 'controlled' or appr):\n            state = 'clear'\n        else:\n            state = 'danger'\n        prev_route = route\n        out.append(state)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: automatic signal re-clears', {'mode': 'auto', 'steps': [[False, False, False], [True, False, True], [False, False, False]]}, ['clear', 'danger', 'clear']), ('sampled regression 7', {'mode': 'approach', 'steps': [[False, False, False], [False, False, False], [False, False, True], [False, False, True], [False, True, False], [False, False, True], [False, True, True], [False, True, True], [False, True, True], [True, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear', 'clear', 'clear', 'danger']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('boundary: second train behind on the same route', {'mode': 'controlled', 'steps': [[False, True, True], [True, True, True], [False, True, True]]}, ['clear', 'danger', 'danger']), ('control 1', {'mode': 'auto', 'steps': [[False, True, False], [False, False, True], [False, True, False], [False, False, True], [False, False, False]]}, ['clear', 'clear', 'clear', 'clear', 'clear']), ('control 4', {'mode': 'controlled', 'steps': [[False, False, False], [False, True, True], [True, True, True], [False, True, True], [False, False, False]]}, ['danger', 'clear', 'danger', 'danger', 'danger']), ('control 10', {'mode': 'controlled', 'steps': [[False, True, False], [True, False, True], [False, False, True], [False, False, True], [False, False, False], [True, False, True], [True, False, True]]}, ['clear', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('sampled regression 33', {'mode': 'approach', 'steps': [[False, True, False], [True, False, True], [False, True, False], [False, False, True], [True, False, False], [False, False, False], [True, False, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 25', {'mode': 'auto', 'steps': [[False, False, True], [False, True, True], [False, False, True], [False, True, True], [False, True, False], [False, False, True], [False, True, True], [False, True, False]]}, ['clear', 'clear', 'clear', 'clear', 'clear', 'clear', 'clear', 'clear']), ('boundary: approach-released signal replaced by train', {'mode': 'approach', 'steps': [[False, True, True], [True, True, True], [False, True, True]]}, ['clear', 'danger', 'danger']), ('control 12', {'mode': 'controlled', 'steps': [[False, False, True], [False, True, True], [True, False, True], [False, False, False], [False, False, True], [True, True, True], [True, False, False]]}, ['danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger']), ('sampled regression 15', {'mode': 'approach', 'steps': [[False, True, True], [False, True, False], [False, True, True]]}, ['clear', 'danger', 'clear']), ('sampled regression 18', {'mode': 'approach', 'steps': [[False, True, False], [False, False, False], [False, False, False], [True, True, False], [False, True, False], [True, True, True], [False, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: automatic signal re-clears', {'mode': 'auto', 'steps': [[False, False, False], [True, False, True], [False, False, False]]}, ['clear', 'danger', 'clear']), ('sampled regression 52', {'mode': 'approach', 'steps': [[False, True, False], [True, True, False], [True, True, False], [True, True, False], [True, True, False], [False, True, False]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 47', {'mode': 'auto', 'steps': [[True, True, True], [False, False, True], [True, False, False], [False, False, True], [False, False, True], [True, True, False], [False, True, True], [True, True, False], [False, False, False], [False, False, False]]}, ['danger', 'clear', 'danger', 'clear', 'clear', 'danger', 'clear', 'danger', 'clear', 'clear']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('control 23', {'mode': 'controlled', 'steps': [[False, True, True], [False, True, False], [False, True, True], [True, True, False], [False, True, False]]}, ['clear', 'clear', 'clear', 'danger', 'danger']), ('sampled regression 26', {'mode': 'approach', 'steps': [[False, False, False], [False, True, True], [True, True, False], [True, False, True], [True, True, False], [True, False, True], [False, False, False], [False, True, True], [False, False, True], [False, True, False]]}, ['danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear', 'danger', 'danger']), ('control 29', {'mode': 'auto', 'steps': [[True, False, False], [False, False, False], [True, False, False], [False, False, True], [False, False, False], [False, True, True], [False, True, True], [False, False, False], [True, False, True], [False, True, False]]}, ['danger', 'clear', 'danger', 'clear', 'clear', 'clear', 'clear', 'clear', 'danger', 'clear'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('sampled regression 78', {'mode': 'approach', 'steps': [[False, False, True], [False, True, True], [False, True, False], [False, True, False], [False, True, False], [True, True, True], [True, False, True], [True, True, True]]}, ['danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 65', {'mode': 'auto', 'steps': [[False, False, True], [False, False, False], [True, False, False], [False, False, False], [False, True, False], [True, False, False], [False, False, False], [False, False, False], [False, False, True]]}, ['clear', 'clear', 'danger', 'clear', 'clear', 'danger', 'clear', 'clear', 'clear']), ('boundary: controlled signal with a standing train', {'mode': 'controlled', 'steps': [[True, True, True], [False, True, True]]}, ['danger', 'clear']), ('control 34', {'mode': 'approach', 'steps': [[False, True, True], [False, False, False], [False, True, True], [False, False, False], [True, False, True], [False, False, True], [True, False, False], [True, False, True]]}, ['clear', 'danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 37', {'mode': 'approach', 'steps': [[False, False, True], [True, False, False], [False, False, True], [False, False, True], [True, False, True], [False, False, False], [False, False, True], [False, False, True], [False, False, False]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 40', {'mode': 'auto', 'steps': [[False, True, True], [True, True, True], [False, True, True], [False, True, False], [True, False, True], [True, False, True], [True, False, True]]}, ['clear', 'danger', 'clear', 'clear', 'danger', 'danger', 'danger'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: automatic signal re-clears', {'mode': 'auto', 'steps': [[False, False, False], [True, False, True], [False, False, False]]}, ['clear', 'danger', 'clear']), ('sampled regression 18', {'mode': 'approach', 'steps': [[False, True, False], [False, False, False], [False, False, False], [True, True, False], [False, True, False], [True, True, True], [False, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear']), ('control 74', {'mode': 'auto', 'steps': [[True, False, True], [False, False, True], [False, False, True], [True, True, False], [True, True, True], [False, True, False], [False, False, True]]}, ['danger', 'clear', 'clear', 'danger', 'danger', 'clear', 'clear']), ('boundary: route re-set after a train', {'mode': 'controlled', 'steps': [[False, True, True], [True, True, True], [False, False, True], [False, True, True]]}, ['clear', 'danger', 'danger', 'clear']), ('sampled regression 45', {'mode': 'approach', 'steps': [[False, False, False], [False, False, False], [False, True, False], [False, True, False], [True, True, False], [False, True, False], [False, True, False], [False, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear']), ('control 48', {'mode': 'approach', 'steps': [[True, True, False], [False, True, True], [False, False, False], [False, False, True], [False, True, True], [True, True, False]]}, ['danger', 'clear', 'danger', 'danger', 'clear', 'danger']), ('control 51', {'mode': 'controlled', 'steps': [[False, False, True], [False, False, False], [False, True, False], [False, True, True], [True, False, True], [False, False, True], [True, True, False]]}, ['danger', 'danger', 'clear', 'clear', 'danger', 'danger', 'danger'])]]\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":"77409df949dc59510c3668fe8ef77cdd3cbfb9cde934646ad70e71dab012045b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    mode = x['mode']\n    state = 'danger'\n    stick = False\n    prev_route = False\n    out = []\n    for occ, route, appr in x['steps']:\n        if mode == 'auto':\n            route = True\n        if (route and not prev_route) or mode == 'auto':\n            stick = False\n        if occ:\n            if state == 'clear':\n                stick = True\n            state = 'danger'\n        elif route and not stick:\n            state = 'clear'\n        else:\n            state = 'danger'\n        prev_route = route\n        out.append(state)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: automatic signal re-clears', {'mode': 'auto', 'steps': [[False, False, False], [True, False, True], [False, False, False]]}, ['clear', 'danger', 'clear']), ('sampled regression 7', {'mode': 'approach', 'steps': [[False, False, False], [False, False, False], [False, False, True], [False, False, True], [False, True, False], [False, False, True], [False, True, True], [False, True, True], [False, True, True], [True, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear', 'clear', 'clear', 'danger']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('boundary: second train behind on the same route', {'mode': 'controlled', 'steps': [[False, True, True], [True, True, True], [False, True, True]]}, ['clear', 'danger', 'danger']), ('control 1', {'mode': 'auto', 'steps': [[False, True, False], [False, False, True], [False, True, False], [False, False, True], [False, False, False]]}, ['clear', 'clear', 'clear', 'clear', 'clear']), ('control 4', {'mode': 'controlled', 'steps': [[False, False, False], [False, True, True], [True, True, True], [False, True, True], [False, False, False]]}, ['danger', 'clear', 'danger', 'danger', 'danger']), ('control 10', {'mode': 'controlled', 'steps': [[False, True, False], [True, False, True], [False, False, True], [False, False, True], [False, False, False], [True, False, True], [True, False, True]]}, ['clear', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('sampled regression 33', {'mode': 'approach', 'steps': [[False, True, False], [True, False, True], [False, True, False], [False, False, True], [True, False, False], [False, False, False], [True, False, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 25', {'mode': 'auto', 'steps': [[False, False, True], [False, True, True], [False, False, True], [False, True, True], [False, True, False], [False, False, True], [False, True, True], [False, True, False]]}, ['clear', 'clear', 'clear', 'clear', 'clear', 'clear', 'clear', 'clear']), ('boundary: approach-released signal replaced by train', {'mode': 'approach', 'steps': [[False, True, True], [True, True, True], [False, True, True]]}, ['clear', 'danger', 'danger']), ('control 12', {'mode': 'controlled', 'steps': [[False, False, True], [False, True, True], [True, False, True], [False, False, False], [False, False, True], [True, True, True], [True, False, False]]}, ['danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger']), ('sampled regression 15', {'mode': 'approach', 'steps': [[False, True, True], [False, True, False], [False, True, True]]}, ['clear', 'danger', 'clear']), ('sampled regression 18', {'mode': 'approach', 'steps': [[False, True, False], [False, False, False], [False, False, False], [True, True, False], [False, True, False], [True, True, True], [False, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: automatic signal re-clears', {'mode': 'auto', 'steps': [[False, False, False], [True, False, True], [False, False, False]]}, ['clear', 'danger', 'clear']), ('sampled regression 52', {'mode': 'approach', 'steps': [[False, True, False], [True, True, False], [True, True, False], [True, True, False], [True, True, False], [False, True, False]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 47', {'mode': 'auto', 'steps': [[True, True, True], [False, False, True], [True, False, False], [False, False, True], [False, False, True], [True, True, False], [False, True, True], [True, True, False], [False, False, False], [False, False, False]]}, ['danger', 'clear', 'danger', 'clear', 'clear', 'danger', 'clear', 'danger', 'clear', 'clear']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('control 23', {'mode': 'controlled', 'steps': [[False, True, True], [False, True, False], [False, True, True], [True, True, False], [False, True, False]]}, ['clear', 'clear', 'clear', 'danger', 'danger']), ('sampled regression 26', {'mode': 'approach', 'steps': [[False, False, False], [False, True, True], [True, True, False], [True, False, True], [True, True, False], [True, False, True], [False, False, False], [False, True, True], [False, False, True], [False, True, False]]}, ['danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear', 'danger', 'danger']), ('control 29', {'mode': 'auto', 'steps': [[True, False, False], [False, False, False], [True, False, False], [False, False, True], [False, False, False], [False, True, True], [False, True, True], [False, False, False], [True, False, True], [False, True, False]]}, ['danger', 'clear', 'danger', 'clear', 'clear', 'clear', 'clear', 'clear', 'danger', 'clear'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('sampled regression 78', {'mode': 'approach', 'steps': [[False, False, True], [False, True, True], [False, True, False], [False, True, False], [False, True, False], [True, True, True], [True, False, True], [True, True, True]]}, ['danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 65', {'mode': 'auto', 'steps': [[False, False, True], [False, False, False], [True, False, False], [False, False, False], [False, True, False], [True, False, False], [False, False, False], [False, False, False], [False, False, True]]}, ['clear', 'clear', 'danger', 'clear', 'clear', 'danger', 'clear', 'clear', 'clear']), ('boundary: controlled signal with a standing train', {'mode': 'controlled', 'steps': [[True, True, True], [False, True, True]]}, ['danger', 'clear']), ('control 34', {'mode': 'approach', 'steps': [[False, True, True], [False, False, False], [False, True, True], [False, False, False], [True, False, True], [False, False, True], [True, False, False], [True, False, True]]}, ['clear', 'danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 37', {'mode': 'approach', 'steps': [[False, False, True], [True, False, False], [False, False, True], [False, False, True], [True, False, True], [False, False, False], [False, False, True], [False, False, True], [False, False, False]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 40', {'mode': 'auto', 'steps': [[False, True, True], [True, True, True], [False, True, True], [False, True, False], [True, False, True], [True, False, True], [True, False, True]]}, ['clear', 'danger', 'clear', 'clear', 'danger', 'danger', 'danger'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: automatic signal re-clears', {'mode': 'auto', 'steps': [[False, False, False], [True, False, True], [False, False, False]]}, ['clear', 'danger', 'clear']), ('sampled regression 18', {'mode': 'approach', 'steps': [[False, True, False], [False, False, False], [False, False, False], [True, True, False], [False, True, False], [True, True, True], [False, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear']), ('control 74', {'mode': 'auto', 'steps': [[True, False, True], [False, False, True], [False, False, True], [True, True, False], [True, True, True], [False, True, False], [False, False, True]]}, ['danger', 'clear', 'clear', 'danger', 'danger', 'clear', 'clear']), ('boundary: route re-set after a train', {'mode': 'controlled', 'steps': [[False, True, True], [True, True, True], [False, False, True], [False, True, True]]}, ['clear', 'danger', 'danger', 'clear']), ('sampled regression 45', {'mode': 'approach', 'steps': [[False, False, False], [False, False, False], [False, True, False], [False, True, False], [True, True, False], [False, True, False], [False, True, False], [False, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear']), ('control 48', {'mode': 'approach', 'steps': [[True, True, False], [False, True, True], [False, False, False], [False, False, True], [False, True, True], [True, True, False]]}, ['danger', 'clear', 'danger', 'danger', 'clear', 'danger']), ('control 51', {'mode': 'controlled', 'steps': [[False, False, True], [False, False, False], [False, True, False], [False, True, True], [True, False, True], [False, False, True], [True, True, False]]}, ['danger', 'danger', 'clear', 'clear', 'danger', 'danger', 'danger'])]]\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":"a65a30b79f7472d95a05aaa9c21a53c93f182ab50206eda2f69bbe27a27db54f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    mode = x['mode']\n    state = 'danger'\n    stick = False\n    prev_route = False\n    out = []\n    for occ, route, appr in x['steps']:\n        if mode == 'auto':\n            route = True\n        if (route and not prev_route) or mode == 'auto':\n            stick = False\n        if occ:\n            if state == 'clear':\n                stick = True\n            state = 'danger'\n        elif route and not stick and (mode != 'approach' or appr):\n            state = 'clear'\n        else:\n            state = 'danger'\n        prev_route = route\n        out.append(state)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: automatic signal re-clears', {'mode': 'auto', 'steps': [[False, False, False], [True, False, True], [False, False, False]]}, ['clear', 'danger', 'clear']), ('sampled regression 7', {'mode': 'approach', 'steps': [[False, False, False], [False, False, False], [False, False, True], [False, False, True], [False, True, False], [False, False, True], [False, True, True], [False, True, True], [False, True, True], [True, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear', 'clear', 'clear', 'danger']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('boundary: second train behind on the same route', {'mode': 'controlled', 'steps': [[False, True, True], [True, True, True], [False, True, True]]}, ['clear', 'danger', 'danger']), ('control 1', {'mode': 'auto', 'steps': [[False, True, False], [False, False, True], [False, True, False], [False, False, True], [False, False, False]]}, ['clear', 'clear', 'clear', 'clear', 'clear']), ('control 4', {'mode': 'controlled', 'steps': [[False, False, False], [False, True, True], [True, True, True], [False, True, True], [False, False, False]]}, ['danger', 'clear', 'danger', 'danger', 'danger']), ('control 10', {'mode': 'controlled', 'steps': [[False, True, False], [True, False, True], [False, False, True], [False, False, True], [False, False, False], [True, False, True], [True, False, True]]}, ['clear', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('sampled regression 33', {'mode': 'approach', 'steps': [[False, True, False], [True, False, True], [False, True, False], [False, False, True], [True, False, False], [False, False, False], [True, False, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 25', {'mode': 'auto', 'steps': [[False, False, True], [False, True, True], [False, False, True], [False, True, True], [False, True, False], [False, False, True], [False, True, True], [False, True, False]]}, ['clear', 'clear', 'clear', 'clear', 'clear', 'clear', 'clear', 'clear']), ('boundary: approach-released signal replaced by train', {'mode': 'approach', 'steps': [[False, True, True], [True, True, True], [False, True, True]]}, ['clear', 'danger', 'danger']), ('control 12', {'mode': 'controlled', 'steps': [[False, False, True], [False, True, True], [True, False, True], [False, False, False], [False, False, True], [True, True, True], [True, False, False]]}, ['danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger']), ('sampled regression 15', {'mode': 'approach', 'steps': [[False, True, True], [False, True, False], [False, True, True]]}, ['clear', 'danger', 'clear']), ('sampled regression 18', {'mode': 'approach', 'steps': [[False, True, False], [False, False, False], [False, False, False], [True, True, False], [False, True, False], [True, True, True], [False, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: automatic signal re-clears', {'mode': 'auto', 'steps': [[False, False, False], [True, False, True], [False, False, False]]}, ['clear', 'danger', 'clear']), ('sampled regression 52', {'mode': 'approach', 'steps': [[False, True, False], [True, True, False], [True, True, False], [True, True, False], [True, True, False], [False, True, False]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 47', {'mode': 'auto', 'steps': [[True, True, True], [False, False, True], [True, False, False], [False, False, True], [False, False, True], [True, True, False], [False, True, True], [True, True, False], [False, False, False], [False, False, False]]}, ['danger', 'clear', 'danger', 'clear', 'clear', 'danger', 'clear', 'danger', 'clear', 'clear']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('control 23', {'mode': 'controlled', 'steps': [[False, True, True], [False, True, False], [False, True, True], [True, True, False], [False, True, False]]}, ['clear', 'clear', 'clear', 'danger', 'danger']), ('sampled regression 26', {'mode': 'approach', 'steps': [[False, False, False], [False, True, True], [True, True, False], [True, False, True], [True, True, False], [True, False, True], [False, False, False], [False, True, True], [False, False, True], [False, True, False]]}, ['danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear', 'danger', 'danger']), ('control 29', {'mode': 'auto', 'steps': [[True, False, False], [False, False, False], [True, False, False], [False, False, True], [False, False, False], [False, True, True], [False, True, True], [False, False, False], [True, False, True], [False, True, False]]}, ['danger', 'clear', 'danger', 'clear', 'clear', 'clear', 'clear', 'clear', 'danger', 'clear'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: occupied before clearing', {'mode': 'auto', 'steps': [[True, False, False], [True, False, False], [False, False, False]]}, ['danger', 'danger', 'clear']), ('sampled regression 78', {'mode': 'approach', 'steps': [[False, False, True], [False, True, True], [False, True, False], [False, True, False], [False, True, False], [True, True, True], [True, False, True], [True, True, True]]}, ['danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 65', {'mode': 'auto', 'steps': [[False, False, True], [False, False, False], [True, False, False], [False, False, False], [False, True, False], [True, False, False], [False, False, False], [False, False, False], [False, False, True]]}, ['clear', 'clear', 'danger', 'clear', 'clear', 'danger', 'clear', 'clear', 'clear']), ('boundary: controlled signal with a standing train', {'mode': 'controlled', 'steps': [[True, True, True], [False, True, True]]}, ['danger', 'clear']), ('control 34', {'mode': 'approach', 'steps': [[False, True, True], [False, False, False], [False, True, True], [False, False, False], [True, False, True], [False, False, True], [True, False, False], [True, False, True]]}, ['clear', 'danger', 'clear', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 37', {'mode': 'approach', 'steps': [[False, False, True], [True, False, False], [False, False, True], [False, False, True], [True, False, True], [False, False, False], [False, False, True], [False, False, True], [False, False, False]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger']), ('control 40', {'mode': 'auto', 'steps': [[False, True, True], [True, True, True], [False, True, True], [False, True, False], [True, False, True], [True, False, True], [True, False, True]]}, ['clear', 'danger', 'clear', 'clear', 'danger', 'danger', 'danger'])], [('regression: approach-released signal with empty approach', {'mode': 'approach', 'steps': [[False, True, False], [False, True, True]]}, ['danger', 'clear']), ('boundary: automatic signal re-clears', {'mode': 'auto', 'steps': [[False, False, False], [True, False, True], [False, False, False]]}, ['clear', 'danger', 'clear']), ('sampled regression 18', {'mode': 'approach', 'steps': [[False, True, False], [False, False, False], [False, False, False], [True, True, False], [False, True, False], [True, True, True], [False, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear']), ('control 74', {'mode': 'auto', 'steps': [[True, False, True], [False, False, True], [False, False, True], [True, True, False], [True, True, True], [False, True, False], [False, False, True]]}, ['danger', 'clear', 'clear', 'danger', 'danger', 'clear', 'clear']), ('boundary: route re-set after a train', {'mode': 'controlled', 'steps': [[False, True, True], [True, True, True], [False, False, True], [False, True, True]]}, ['clear', 'danger', 'danger', 'clear']), ('sampled regression 45', {'mode': 'approach', 'steps': [[False, False, False], [False, False, False], [False, True, False], [False, True, False], [True, True, False], [False, True, False], [False, True, False], [False, True, True]]}, ['danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'danger', 'clear']), ('control 48', {'mode': 'approach', 'steps': [[True, True, False], [False, True, True], [False, False, False], [False, False, True], [False, True, True], [True, True, False]]}, ['danger', 'clear', 'danger', 'danger', 'clear', 'danger']), ('control 51', {'mode': 'controlled', 'steps': [[False, False, True], [False, False, False], [False, True, False], [False, True, True], [True, False, True], [False, False, True], [True, True, False]]}, ['danger', 'danger', 'clear', 'clear', 'danger', 'danger', 'danger'])]]\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 interlocking contract for a bounded teaching model; it makes no claim of conformance to any railway signalling standard 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-railway_interlocking_logic-signal-replacement-stick-approach-release-condition","generated_at":"2026-09-29T14:47:50.540545+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Interlocking logic decides whether trains may be given authority; a wrong decision at this point either grants unsafe movements or strands traffic.","repair":"Clear approach-released signals only with the approach occupied.","root_cause":"The approach release condition is dropped.","sha256":"9342e1735d03150ddf948b6fcfc3799e014dcab3577b59c89c7188a51894aacc","title":"Signal replacement and stick control: approach release condition · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.796,"exit_code":1,"observations":[{"actual":["danger","clear"],"check":"regression: approach-released signal with empty approach","expected":["danger","clear"],"passed":true},{"actual":["danger","danger","danger"],"check":"boundary: automatic signal re-clears","expected":["clear","danger","clear"],"passed":false},{"actual":["danger","danger","danger","danger","danger","danger","clear","clear","clear","danger"],"check":"sampled regression 7","expected":["danger","danger","danger","danger","danger","danger","clear","clear","clear","danger"],"passed":true},{"actual":["danger","danger","danger"],"check":"boundary: occupied before clearing","expected":["danger","danger","clear"],"passed":false},{"actual":["clear","danger","danger"],"check":"boundary: second train behind on the same route","expected":["clear","danger","danger"],"passed":true},{"actual":["danger","clear","danger","clear","danger"],"check":"control 1","expected":["clear","clear","clear","clear","clear"],"passed":false},{"actual":["danger","clear","danger","danger","danger"],"check":"control 4","expected":["danger","clear","danger","danger","danger"],"passed":true},{"actual":["clear","danger","danger","danger","danger","danger","danger"],"check":"control 10","expected":["clear","danger","danger","danger","danger","danger","danger"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: approach-released signal with empty approach\", \"actual\": [\"danger\", \"clear\"], \"expected\": [\"danger\", \"clear\"], \"passed\": true}, {\"check\": \"boundary: automatic signal re-clears\", \"actual\": [\"danger\", \"danger\", \"danger\"], \"expected\": [\"clear\", \"danger\", \"clear\"], \"passed\": false}, {\"check\": \"sampled regression 7\", \"actual\": [\"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"clear\", \"clear\", \"clear\", \"danger\"], \"expected\": [\"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"clear\", \"clear\", \"clear\", \"danger\"], \"passed\": true}, {\"check\": \"boundary: occupied before clearing\", \"actual\": [\"danger\", \"danger\", \"danger\"], \"expected\": [\"danger\", \"danger\", \"clear\"], \"passed\": false}, {\"check\": \"boundary: second train behind on the same route\", \"actual\": [\"clear\", \"danger\", \"danger\"], \"expected\": [\"clear\", \"danger\", \"danger\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [\"danger\", \"clear\", \"danger\", \"clear\", \"danger\"], \"expected\": [\"clear\", \"clear\", \"clear\", \"clear\", \"clear\"], \"passed\": false}, {\"check\": \"control 4\", \"actual\": [\"danger\", \"clear\", \"danger\", \"danger\", \"danger\"], \"expected\": [\"danger\", \"clear\", \"danger\", \"danger\", \"danger\"], \"passed\": true}, {\"check\": \"control 10\", \"actual\": [\"clear\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\"], \"expected\": [\"clear\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.373,"exit_code":1,"observations":[{"actual":["clear","clear"],"check":"regression: approach-released signal with empty approach","expected":["danger","clear"],"passed":false},{"actual":["clear","danger","clear"],"check":"boundary: automatic signal re-clears","expected":["clear","danger","clear"],"passed":true},{"actual":["danger","danger","danger","danger","clear","danger","clear","clear","clear","danger"],"check":"sampled regression 7","expected":["danger","danger","danger","danger","danger","danger","clear","clear","clear","danger"],"passed":false},{"actual":["danger","danger","clear"],"check":"boundary: occupied before clearing","expected":["danger","danger","clear"],"passed":true},{"actual":["clear","danger","danger"],"check":"boundary: second train behind on the same route","expected":["clear","danger","danger"],"passed":true},{"actual":["clear","clear","clear","clear","clear"],"check":"control 1","expected":["clear","clear","clear","clear","clear"],"passed":true},{"actual":["danger","clear","danger","danger","danger"],"check":"control 4","expected":["danger","clear","danger","danger","danger"],"passed":true},{"actual":["clear","danger","danger","danger","danger","danger","danger"],"check":"control 10","expected":["clear","danger","danger","danger","danger","danger","danger"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: approach-released signal with empty approach\", \"actual\": [\"clear\", \"clear\"], \"expected\": [\"danger\", \"clear\"], \"passed\": false}, {\"check\": \"boundary: automatic signal re-clears\", \"actual\": [\"clear\", \"danger\", \"clear\"], \"expected\": [\"clear\", \"danger\", \"clear\"], \"passed\": true}, {\"check\": \"sampled regression 7\", \"actual\": [\"danger\", \"danger\", \"danger\", \"danger\", \"clear\", \"danger\", \"clear\", \"clear\", \"clear\", \"danger\"], \"expected\": [\"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"clear\", \"clear\", \"clear\", \"danger\"], \"passed\": false}, {\"check\": \"boundary: occupied before clearing\", \"actual\": [\"danger\", \"danger\", \"clear\"], \"expected\": [\"danger\", \"danger\", \"clear\"], \"passed\": true}, {\"check\": \"boundary: second train behind on the same route\", \"actual\": [\"clear\", \"danger\", \"danger\"], \"expected\": [\"clear\", \"danger\", \"danger\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [\"clear\", \"clear\", \"clear\", \"clear\", \"clear\"], \"expected\": [\"clear\", \"clear\", \"clear\", \"clear\", \"clear\"], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [\"danger\", \"clear\", \"danger\", \"danger\", \"danger\"], \"expected\": [\"danger\", \"clear\", \"danger\", \"danger\", \"danger\"], \"passed\": true}, {\"check\": \"control 10\", \"actual\": [\"clear\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\"], \"expected\": [\"clear\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.49,"exit_code":0,"observations":[{"actual":["danger","clear"],"check":"regression: approach-released signal with empty approach","expected":["danger","clear"],"passed":true},{"actual":["clear","danger","clear"],"check":"boundary: automatic signal re-clears","expected":["clear","danger","clear"],"passed":true},{"actual":["danger","danger","danger","danger","danger","danger","clear","clear","clear","danger"],"check":"sampled regression 7","expected":["danger","danger","danger","danger","danger","danger","clear","clear","clear","danger"],"passed":true},{"actual":["danger","danger","clear"],"check":"boundary: occupied before clearing","expected":["danger","danger","clear"],"passed":true},{"actual":["clear","danger","danger"],"check":"boundary: second train behind on the same route","expected":["clear","danger","danger"],"passed":true},{"actual":["clear","clear","clear","clear","clear"],"check":"control 1","expected":["clear","clear","clear","clear","clear"],"passed":true},{"actual":["danger","clear","danger","danger","danger"],"check":"control 4","expected":["danger","clear","danger","danger","danger"],"passed":true},{"actual":["clear","danger","danger","danger","danger","danger","danger"],"check":"control 10","expected":["clear","danger","danger","danger","danger","danger","danger"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: approach-released signal with empty approach\", \"actual\": [\"danger\", \"clear\"], \"expected\": [\"danger\", \"clear\"], \"passed\": true}, {\"check\": \"boundary: automatic signal re-clears\", \"actual\": [\"clear\", \"danger\", \"clear\"], \"expected\": [\"clear\", \"danger\", \"clear\"], \"passed\": true}, {\"check\": \"sampled regression 7\", \"actual\": [\"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"clear\", \"clear\", \"clear\", \"danger\"], \"expected\": [\"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"clear\", \"clear\", \"clear\", \"danger\"], \"passed\": true}, {\"check\": \"boundary: occupied before clearing\", \"actual\": [\"danger\", \"danger\", \"clear\"], \"expected\": [\"danger\", \"danger\", \"clear\"], \"passed\": true}, {\"check\": \"boundary: second train behind on the same route\", \"actual\": [\"clear\", \"danger\", \"danger\"], \"expected\": [\"clear\", \"danger\", \"danger\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [\"clear\", \"clear\", \"clear\", \"clear\", \"clear\"], \"expected\": [\"clear\", \"clear\", \"clear\", \"clear\", \"clear\"], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [\"danger\", \"clear\", \"danger\", \"danger\", \"danger\"], \"expected\": [\"danger\", \"clear\", \"danger\", \"danger\", \"danger\"], \"passed\": true}, {\"check\": \"control 10\", \"actual\": [\"clear\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\"], \"expected\": [\"clear\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\", \"danger\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}