{"abstract":"A single surviving channel is trusted to declare the section clear.","category":"Railway interlocking logic","checks":8,"contract":"Three channels report occupancy (True/False) or None when failed. A channel isolated earlier counts as None. With fewer than two healthy channels the vote is occupied. Otherwise the vote is occupied when occupied reports are at least as many as clear ones (ties are occupied). A healthy channel that disagrees with the vote increments its discrepancy count, otherwise (agreeing or None) the count resets; a channel is isolated for good when its count reaches isolate_after. Return all votes and isolated channel indices.","evaluation_group":"w2-railway_interlocking_logic-two-out-of-three-voting","failed_approach":"Forcing occupied with two healthy channels ignores two agreeing clear reports.","family":"w2-railway_interlocking_logic-two-out-of-three-voting-minimum-healthy-channels","id":"FA-67111","implementations":{"attempt":{"sha256":"251b1f22642d9f30550050980f43573a472873cb644c1f09d1c386e9696ce78a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    k = x['isolate_after']\n    bad = [0, 0, 0]\n    iso = [False, False, False]\n    votes = []\n    for cyc in x['cycles']:\n        vals = [None if iso[i] else cyc[i] for i in range(3)]\n        healthy = [v for v in vals if v is not None]\n        if len(healthy) <= 2:\n            vote = True\n        else:\n            t = sum(1 for v in healthy if v)\n            f = len(healthy) - t\n            vote = t >= f\n        votes.append(vote)\n        for i in range(3):\n            if vals[i] is not None and vals[i] != vote:\n                bad[i] += 1\n                if bad[i] >= k:\n                    iso[i] = True\n            else:\n                bad[i] = 0\n    return {'votes': votes, 'isolated': [i for i in range(3) if iso[i]]}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: two healthy channels agree clear', {'isolate_after': 3, 'cycles': [[False, False, None]]}, {'votes': [False], 'isolated': []}), ('sampled regression 9', {'isolate_after': 3, 'cycles': [[None, False, False], [None, True, False], [False, None, None], [False, False, True], [True, None, False], [True, True, True], [None, False, None], [False, False, False], [True, None, False]]}, {'votes': [False, True, True, False, True, True, True, False, True], 'isolated': []}), ('boundary: persistent dissenter', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, False, False]]}, {'votes': [False, False, False], 'isolated': [0]}), ('boundary: two healthy channels disagree', {'isolate_after': 3, 'cycles': [[True, False, None]]}, {'votes': [True], 'isolated': []}), ('control 1', {'isolate_after': 2, 'cycles': [[False, False, False], [True, None, True], [True, True, True], [None, False, False]]}, {'votes': [False, True, True, False], 'isolated': []}), ('control 4', {'isolate_after': 2, 'cycles': [[False, True, True], [False, False, False], [False, False, False], [True, True, False], [True, True, True], [True, False, True], [False, False, False], [False, False, None], [True, True, True]]}, {'votes': [True, False, False, True, True, True, False, False, True], 'isolated': []}), ('control 7', {'isolate_after': 3, 'cycles': [[False, False, True], [False, False, False], [True, True, True], [False, True, True], [True, True, None], [False, False, False], [True, True, True], [False, False, False]]}, {'votes': [False, False, True, True, True, False, True, False], 'isolated': []})], [('regression: two dissenters in turn', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, True, False], [False, True, False], [False, False, False]]}, {'votes': [False, False, True, True, True], 'isolated': [0, 2]}), ('boundary: persistent dissenter', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, False, False]]}, {'votes': [False, False, False], 'isolated': [0]}), ('control 4', {'isolate_after': 2, 'cycles': [[False, True, True], [False, False, False], [False, False, False], [True, True, False], [True, True, True], [True, False, True], [False, False, False], [False, False, None], [True, True, True]]}, {'votes': [True, False, False, True, True, True, False, False, True], 'isolated': []}), ('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: dissent interrupted by failure', {'isolate_after': 2, 'cycles': [[True, False, False], [None, False, False], [True, False, False]]}, {'votes': [False, False, False], 'isolated': []}), ('control 12', {'isolate_after': 3, 'cycles': [[False, False, False], [False, True, False], [True, False, True], [True, False, True], [False, False, True], [False, False, False], [True, False, True], [True, True, True]]}, {'votes': [False, False, True, True, True, False, True, True], 'isolated': [1]}), ('control 15', {'isolate_after': 3, 'cycles': [[False, False, False], [False, None, False], [True, False, False], [True, None, False]]}, {'votes': [False, False, False, True], 'isolated': []}), ('control 18', {'isolate_after': 2, 'cycles': [[False, False, False], [None, False, True], [False, False, True], [True, False, False], [True, False, True], [False, False, False], [False, True, None], [False, False, False], [False, False, False]]}, {'votes': [False, True, False, False, True, False, True, False, False], 'isolated': []})], [('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: dissent interrupted by failure', {'isolate_after': 2, 'cycles': [[True, False, False], [None, False, False], [True, False, False]]}, {'votes': [False, False, False], 'isolated': []}), ('sampled regression 66', {'isolate_after': 3, 'cycles': [[False, False, False], [False, False, None], [False, None, None], [True, False, None], [None, False, False], [False, False, False], [False, True, False], [False, False, True], [True, True, False]]}, {'votes': [False, False, True, True, False, False, False, False, True], 'isolated': []}), ('control 13', {'isolate_after': 3, 'cycles': [[False, False, False], [True, None, True], [True, True, True], [False, None, False], [False, False, True]]}, {'votes': [False, True, True, False, False], 'isolated': []}), ('regression: two dissenters in turn', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, True, False], [False, True, False], [False, False, False]]}, {'votes': [False, False, True, True, True], 'isolated': [0, 2]}), ('control 23', {'isolate_after': 2, 'cycles': [[True, False, True], [None, False, False], [False, False, False], [False, False, False], [False, False, None], [False, False, False], [True, None, True]]}, {'votes': [True, False, False, False, False, False, True], 'isolated': []}), ('control 26', {'isolate_after': 2, 'cycles': [[True, True, True], [False, False, False], [False, False, True], [False, False, None]]}, {'votes': [True, False, False, False], 'isolated': []}), ('control 29', {'isolate_after': 2, 'cycles': [[False, False, True], [False, False, False], [False, False, True], [False, True, False], [False, True, True]]}, {'votes': [False, False, False, False, True], 'isolated': []})], [('regression: two dissenters in turn', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, True, False], [False, True, False], [False, False, False]]}, {'votes': [False, False, True, True, True], 'isolated': [0, 2]}), ('boundary: two healthy channels agree clear', {'isolate_after': 3, 'cycles': [[False, False, None]]}, {'votes': [False], 'isolated': []}), ('sampled regression 40', {'isolate_after': 2, 'cycles': [[True, None, True], [False, False, None], [False, True, False], [False, True, False], [True, True, True], [True, None, False], [None, False, False], [True, True, True]]}, {'votes': [True, False, False, False, True, True, True, True], 'isolated': [1, 2]}), ('control 21', {'isolate_after': 3, 'cycles': [[True, True, True], [False, True, False], [True, True, True], [True, True, False], [None, False, False], [False, False, False], [False, False, False]]}, {'votes': [True, False, True, True, False, False, False], 'isolated': []}), ('boundary: isolated channel keeps reporting', {'isolate_after': 1, 'cycles': [[True, False, False], [True, True, False]]}, {'votes': [False, True], 'isolated': [0, 2]}), ('control 34', {'isolate_after': 2, 'cycles': [[True, True, False], [False, True, False], [True, True, True], [True, True, True], [True, False, True], [False, False, False], [True, False, True]]}, {'votes': [True, False, True, True, True, False, True], 'isolated': []}), ('control 37', {'isolate_after': 3, 'cycles': [[True, True, True], [False, False, False], [False, False, False], [False, True, False], [True, False, False], [False, False, False]]}, {'votes': [True, False, False, False, False, False], 'isolated': []}), ('control 43', {'isolate_after': 3, 'cycles': [[True, False, True], [True, None, False], [False, True, False], [False, False, False], [True, False, False]]}, {'votes': [True, True, False, False, False], 'isolated': []})], [('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: persistent dissenter', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, False, False]]}, {'votes': [False, False, False], 'isolated': [0]}), ('sampled regression 19', {'isolate_after': 2, 'cycles': [[True, True, True], [True, False, None], [True, False, True], [None, False, False], [True, True, None], [True, False, False], [False, False, True], [True, True, True]]}, {'votes': [True, True, True, True, True, True, True, True], 'isolated': [1]}), ('control 32', {'isolate_after': 3, 'cycles': [[False, True, True], [False, False, False], [False, False, None], [True, True, None], [False, False, False], [True, True, False], [True, None, True]]}, {'votes': [True, False, False, True, False, True, True], 'isolated': []}), ('boundary: two healthy channels agree clear', {'isolate_after': 3, 'cycles': [[False, False, None]]}, {'votes': [False], 'isolated': []}), ('control 45', {'isolate_after': 2, 'cycles': [[True, True, True], [False, False, False], [False, False, False], [False, True, False], [None, True, False], [None, True, False], [True, False, False]]}, {'votes': [True, False, False, False, True, True, True], 'isolated': [2]}), ('control 48', {'isolate_after': 2, 'cycles': [[False, False, False], [False, False, False], [False, True, True], [True, True, None], [False, True, False], [True, True, True], [False, False, False], [False, False, False], [False, True, False]]}, {'votes': [False, False, True, True, False, True, False, False, False], 'isolated': []}), ('control 51', {'isolate_after': 3, 'cycles': [[False, False, False], [True, False, False], [True, True, True], [True, True, True], [True, True, True], [True, True, True], [True, False, True], [True, False, False], [True, True, True]]}, {'votes': [False, False, True, True, True, True, True, False, True], 'isolated': []})]]\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":"a6a14be2f5031d678fef18227407f0315cb30e6092d00eaf6cf78e73e127d687","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    k = x['isolate_after']\n    bad = [0, 0, 0]\n    iso = [False, False, False]\n    votes = []\n    for cyc in x['cycles']:\n        vals = [None if iso[i] else cyc[i] for i in range(3)]\n        healthy = [v for v in vals if v is not None]\n        if len(healthy) < 1:\n            vote = True\n        else:\n            t = sum(1 for v in healthy if v)\n            f = len(healthy) - t\n            vote = t >= f\n        votes.append(vote)\n        for i in range(3):\n            if vals[i] is not None and vals[i] != vote:\n                bad[i] += 1\n                if bad[i] >= k:\n                    iso[i] = True\n            else:\n                bad[i] = 0\n    return {'votes': votes, 'isolated': [i for i in range(3) if iso[i]]}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: two healthy channels agree clear', {'isolate_after': 3, 'cycles': [[False, False, None]]}, {'votes': [False], 'isolated': []}), ('sampled regression 9', {'isolate_after': 3, 'cycles': [[None, False, False], [None, True, False], [False, None, None], [False, False, True], [True, None, False], [True, True, True], [None, False, None], [False, False, False], [True, None, False]]}, {'votes': [False, True, True, False, True, True, True, False, True], 'isolated': []}), ('boundary: persistent dissenter', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, False, False]]}, {'votes': [False, False, False], 'isolated': [0]}), ('boundary: two healthy channels disagree', {'isolate_after': 3, 'cycles': [[True, False, None]]}, {'votes': [True], 'isolated': []}), ('control 1', {'isolate_after': 2, 'cycles': [[False, False, False], [True, None, True], [True, True, True], [None, False, False]]}, {'votes': [False, True, True, False], 'isolated': []}), ('control 4', {'isolate_after': 2, 'cycles': [[False, True, True], [False, False, False], [False, False, False], [True, True, False], [True, True, True], [True, False, True], [False, False, False], [False, False, None], [True, True, True]]}, {'votes': [True, False, False, True, True, True, False, False, True], 'isolated': []}), ('control 7', {'isolate_after': 3, 'cycles': [[False, False, True], [False, False, False], [True, True, True], [False, True, True], [True, True, None], [False, False, False], [True, True, True], [False, False, False]]}, {'votes': [False, False, True, True, True, False, True, False], 'isolated': []})], [('regression: two dissenters in turn', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, True, False], [False, True, False], [False, False, False]]}, {'votes': [False, False, True, True, True], 'isolated': [0, 2]}), ('boundary: persistent dissenter', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, False, False]]}, {'votes': [False, False, False], 'isolated': [0]}), ('control 4', {'isolate_after': 2, 'cycles': [[False, True, True], [False, False, False], [False, False, False], [True, True, False], [True, True, True], [True, False, True], [False, False, False], [False, False, None], [True, True, True]]}, {'votes': [True, False, False, True, True, True, False, False, True], 'isolated': []}), ('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: dissent interrupted by failure', {'isolate_after': 2, 'cycles': [[True, False, False], [None, False, False], [True, False, False]]}, {'votes': [False, False, False], 'isolated': []}), ('control 12', {'isolate_after': 3, 'cycles': [[False, False, False], [False, True, False], [True, False, True], [True, False, True], [False, False, True], [False, False, False], [True, False, True], [True, True, True]]}, {'votes': [False, False, True, True, True, False, True, True], 'isolated': [1]}), ('control 15', {'isolate_after': 3, 'cycles': [[False, False, False], [False, None, False], [True, False, False], [True, None, False]]}, {'votes': [False, False, False, True], 'isolated': []}), ('control 18', {'isolate_after': 2, 'cycles': [[False, False, False], [None, False, True], [False, False, True], [True, False, False], [True, False, True], [False, False, False], [False, True, None], [False, False, False], [False, False, False]]}, {'votes': [False, True, False, False, True, False, True, False, False], 'isolated': []})], [('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: dissent interrupted by failure', {'isolate_after': 2, 'cycles': [[True, False, False], [None, False, False], [True, False, False]]}, {'votes': [False, False, False], 'isolated': []}), ('sampled regression 66', {'isolate_after': 3, 'cycles': [[False, False, False], [False, False, None], [False, None, None], [True, False, None], [None, False, False], [False, False, False], [False, True, False], [False, False, True], [True, True, False]]}, {'votes': [False, False, True, True, False, False, False, False, True], 'isolated': []}), ('control 13', {'isolate_after': 3, 'cycles': [[False, False, False], [True, None, True], [True, True, True], [False, None, False], [False, False, True]]}, {'votes': [False, True, True, False, False], 'isolated': []}), ('regression: two dissenters in turn', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, True, False], [False, True, False], [False, False, False]]}, {'votes': [False, False, True, True, True], 'isolated': [0, 2]}), ('control 23', {'isolate_after': 2, 'cycles': [[True, False, True], [None, False, False], [False, False, False], [False, False, False], [False, False, None], [False, False, False], [True, None, True]]}, {'votes': [True, False, False, False, False, False, True], 'isolated': []}), ('control 26', {'isolate_after': 2, 'cycles': [[True, True, True], [False, False, False], [False, False, True], [False, False, None]]}, {'votes': [True, False, False, False], 'isolated': []}), ('control 29', {'isolate_after': 2, 'cycles': [[False, False, True], [False, False, False], [False, False, True], [False, True, False], [False, True, True]]}, {'votes': [False, False, False, False, True], 'isolated': []})], [('regression: two dissenters in turn', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, True, False], [False, True, False], [False, False, False]]}, {'votes': [False, False, True, True, True], 'isolated': [0, 2]}), ('boundary: two healthy channels agree clear', {'isolate_after': 3, 'cycles': [[False, False, None]]}, {'votes': [False], 'isolated': []}), ('sampled regression 40', {'isolate_after': 2, 'cycles': [[True, None, True], [False, False, None], [False, True, False], [False, True, False], [True, True, True], [True, None, False], [None, False, False], [True, True, True]]}, {'votes': [True, False, False, False, True, True, True, True], 'isolated': [1, 2]}), ('control 21', {'isolate_after': 3, 'cycles': [[True, True, True], [False, True, False], [True, True, True], [True, True, False], [None, False, False], [False, False, False], [False, False, False]]}, {'votes': [True, False, True, True, False, False, False], 'isolated': []}), ('boundary: isolated channel keeps reporting', {'isolate_after': 1, 'cycles': [[True, False, False], [True, True, False]]}, {'votes': [False, True], 'isolated': [0, 2]}), ('control 34', {'isolate_after': 2, 'cycles': [[True, True, False], [False, True, False], [True, True, True], [True, True, True], [True, False, True], [False, False, False], [True, False, True]]}, {'votes': [True, False, True, True, True, False, True], 'isolated': []}), ('control 37', {'isolate_after': 3, 'cycles': [[True, True, True], [False, False, False], [False, False, False], [False, True, False], [True, False, False], [False, False, False]]}, {'votes': [True, False, False, False, False, False], 'isolated': []}), ('control 43', {'isolate_after': 3, 'cycles': [[True, False, True], [True, None, False], [False, True, False], [False, False, False], [True, False, False]]}, {'votes': [True, True, False, False, False], 'isolated': []})], [('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: persistent dissenter', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, False, False]]}, {'votes': [False, False, False], 'isolated': [0]}), ('sampled regression 19', {'isolate_after': 2, 'cycles': [[True, True, True], [True, False, None], [True, False, True], [None, False, False], [True, True, None], [True, False, False], [False, False, True], [True, True, True]]}, {'votes': [True, True, True, True, True, True, True, True], 'isolated': [1]}), ('control 32', {'isolate_after': 3, 'cycles': [[False, True, True], [False, False, False], [False, False, None], [True, True, None], [False, False, False], [True, True, False], [True, None, True]]}, {'votes': [True, False, False, True, False, True, True], 'isolated': []}), ('boundary: two healthy channels agree clear', {'isolate_after': 3, 'cycles': [[False, False, None]]}, {'votes': [False], 'isolated': []}), ('control 45', {'isolate_after': 2, 'cycles': [[True, True, True], [False, False, False], [False, False, False], [False, True, False], [None, True, False], [None, True, False], [True, False, False]]}, {'votes': [True, False, False, False, True, True, True], 'isolated': [2]}), ('control 48', {'isolate_after': 2, 'cycles': [[False, False, False], [False, False, False], [False, True, True], [True, True, None], [False, True, False], [True, True, True], [False, False, False], [False, False, False], [False, True, False]]}, {'votes': [False, False, True, True, False, True, False, False, False], 'isolated': []}), ('control 51', {'isolate_after': 3, 'cycles': [[False, False, False], [True, False, False], [True, True, True], [True, True, True], [True, True, True], [True, True, True], [True, False, True], [True, False, False], [True, True, True]]}, {'votes': [False, False, True, True, True, True, True, False, True], 'isolated': []})]]\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":"6d26f9b8043ac2e5ac0b2d3300cb52305fc88aa44b031b8b029c0e041b39c5a1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    k = x['isolate_after']\n    bad = [0, 0, 0]\n    iso = [False, False, False]\n    votes = []\n    for cyc in x['cycles']:\n        vals = [None if iso[i] else cyc[i] for i in range(3)]\n        healthy = [v for v in vals if v is not None]\n        if len(healthy) < 2:\n            vote = True\n        else:\n            t = sum(1 for v in healthy if v)\n            f = len(healthy) - t\n            vote = t >= f\n        votes.append(vote)\n        for i in range(3):\n            if vals[i] is not None and vals[i] != vote:\n                bad[i] += 1\n                if bad[i] >= k:\n                    iso[i] = True\n            else:\n                bad[i] = 0\n    return {'votes': votes, 'isolated': [i for i in range(3) if iso[i]]}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: two healthy channels agree clear', {'isolate_after': 3, 'cycles': [[False, False, None]]}, {'votes': [False], 'isolated': []}), ('sampled regression 9', {'isolate_after': 3, 'cycles': [[None, False, False], [None, True, False], [False, None, None], [False, False, True], [True, None, False], [True, True, True], [None, False, None], [False, False, False], [True, None, False]]}, {'votes': [False, True, True, False, True, True, True, False, True], 'isolated': []}), ('boundary: persistent dissenter', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, False, False]]}, {'votes': [False, False, False], 'isolated': [0]}), ('boundary: two healthy channels disagree', {'isolate_after': 3, 'cycles': [[True, False, None]]}, {'votes': [True], 'isolated': []}), ('control 1', {'isolate_after': 2, 'cycles': [[False, False, False], [True, None, True], [True, True, True], [None, False, False]]}, {'votes': [False, True, True, False], 'isolated': []}), ('control 4', {'isolate_after': 2, 'cycles': [[False, True, True], [False, False, False], [False, False, False], [True, True, False], [True, True, True], [True, False, True], [False, False, False], [False, False, None], [True, True, True]]}, {'votes': [True, False, False, True, True, True, False, False, True], 'isolated': []}), ('control 7', {'isolate_after': 3, 'cycles': [[False, False, True], [False, False, False], [True, True, True], [False, True, True], [True, True, None], [False, False, False], [True, True, True], [False, False, False]]}, {'votes': [False, False, True, True, True, False, True, False], 'isolated': []})], [('regression: two dissenters in turn', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, True, False], [False, True, False], [False, False, False]]}, {'votes': [False, False, True, True, True], 'isolated': [0, 2]}), ('boundary: persistent dissenter', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, False, False]]}, {'votes': [False, False, False], 'isolated': [0]}), ('control 4', {'isolate_after': 2, 'cycles': [[False, True, True], [False, False, False], [False, False, False], [True, True, False], [True, True, True], [True, False, True], [False, False, False], [False, False, None], [True, True, True]]}, {'votes': [True, False, False, True, True, True, False, False, True], 'isolated': []}), ('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: dissent interrupted by failure', {'isolate_after': 2, 'cycles': [[True, False, False], [None, False, False], [True, False, False]]}, {'votes': [False, False, False], 'isolated': []}), ('control 12', {'isolate_after': 3, 'cycles': [[False, False, False], [False, True, False], [True, False, True], [True, False, True], [False, False, True], [False, False, False], [True, False, True], [True, True, True]]}, {'votes': [False, False, True, True, True, False, True, True], 'isolated': [1]}), ('control 15', {'isolate_after': 3, 'cycles': [[False, False, False], [False, None, False], [True, False, False], [True, None, False]]}, {'votes': [False, False, False, True], 'isolated': []}), ('control 18', {'isolate_after': 2, 'cycles': [[False, False, False], [None, False, True], [False, False, True], [True, False, False], [True, False, True], [False, False, False], [False, True, None], [False, False, False], [False, False, False]]}, {'votes': [False, True, False, False, True, False, True, False, False], 'isolated': []})], [('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: dissent interrupted by failure', {'isolate_after': 2, 'cycles': [[True, False, False], [None, False, False], [True, False, False]]}, {'votes': [False, False, False], 'isolated': []}), ('sampled regression 66', {'isolate_after': 3, 'cycles': [[False, False, False], [False, False, None], [False, None, None], [True, False, None], [None, False, False], [False, False, False], [False, True, False], [False, False, True], [True, True, False]]}, {'votes': [False, False, True, True, False, False, False, False, True], 'isolated': []}), ('control 13', {'isolate_after': 3, 'cycles': [[False, False, False], [True, None, True], [True, True, True], [False, None, False], [False, False, True]]}, {'votes': [False, True, True, False, False], 'isolated': []}), ('regression: two dissenters in turn', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, True, False], [False, True, False], [False, False, False]]}, {'votes': [False, False, True, True, True], 'isolated': [0, 2]}), ('control 23', {'isolate_after': 2, 'cycles': [[True, False, True], [None, False, False], [False, False, False], [False, False, False], [False, False, None], [False, False, False], [True, None, True]]}, {'votes': [True, False, False, False, False, False, True], 'isolated': []}), ('control 26', {'isolate_after': 2, 'cycles': [[True, True, True], [False, False, False], [False, False, True], [False, False, None]]}, {'votes': [True, False, False, False], 'isolated': []}), ('control 29', {'isolate_after': 2, 'cycles': [[False, False, True], [False, False, False], [False, False, True], [False, True, False], [False, True, True]]}, {'votes': [False, False, False, False, True], 'isolated': []})], [('regression: two dissenters in turn', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, True, False], [False, True, False], [False, False, False]]}, {'votes': [False, False, True, True, True], 'isolated': [0, 2]}), ('boundary: two healthy channels agree clear', {'isolate_after': 3, 'cycles': [[False, False, None]]}, {'votes': [False], 'isolated': []}), ('sampled regression 40', {'isolate_after': 2, 'cycles': [[True, None, True], [False, False, None], [False, True, False], [False, True, False], [True, True, True], [True, None, False], [None, False, False], [True, True, True]]}, {'votes': [True, False, False, False, True, True, True, True], 'isolated': [1, 2]}), ('control 21', {'isolate_after': 3, 'cycles': [[True, True, True], [False, True, False], [True, True, True], [True, True, False], [None, False, False], [False, False, False], [False, False, False]]}, {'votes': [True, False, True, True, False, False, False], 'isolated': []}), ('boundary: isolated channel keeps reporting', {'isolate_after': 1, 'cycles': [[True, False, False], [True, True, False]]}, {'votes': [False, True], 'isolated': [0, 2]}), ('control 34', {'isolate_after': 2, 'cycles': [[True, True, False], [False, True, False], [True, True, True], [True, True, True], [True, False, True], [False, False, False], [True, False, True]]}, {'votes': [True, False, True, True, True, False, True], 'isolated': []}), ('control 37', {'isolate_after': 3, 'cycles': [[True, True, True], [False, False, False], [False, False, False], [False, True, False], [True, False, False], [False, False, False]]}, {'votes': [True, False, False, False, False, False], 'isolated': []}), ('control 43', {'isolate_after': 3, 'cycles': [[True, False, True], [True, None, False], [False, True, False], [False, False, False], [True, False, False]]}, {'votes': [True, True, False, False, False], 'isolated': []})], [('regression: single healthy channel says clear', {'isolate_after': 3, 'cycles': [[False, None, None]]}, {'votes': [True], 'isolated': []}), ('boundary: persistent dissenter', {'isolate_after': 2, 'cycles': [[True, False, False], [True, False, False], [False, False, False]]}, {'votes': [False, False, False], 'isolated': [0]}), ('sampled regression 19', {'isolate_after': 2, 'cycles': [[True, True, True], [True, False, None], [True, False, True], [None, False, False], [True, True, None], [True, False, False], [False, False, True], [True, True, True]]}, {'votes': [True, True, True, True, True, True, True, True], 'isolated': [1]}), ('control 32', {'isolate_after': 3, 'cycles': [[False, True, True], [False, False, False], [False, False, None], [True, True, None], [False, False, False], [True, True, False], [True, None, True]]}, {'votes': [True, False, False, True, False, True, True], 'isolated': []}), ('boundary: two healthy channels agree clear', {'isolate_after': 3, 'cycles': [[False, False, None]]}, {'votes': [False], 'isolated': []}), ('control 45', {'isolate_after': 2, 'cycles': [[True, True, True], [False, False, False], [False, False, False], [False, True, False], [None, True, False], [None, True, False], [True, False, False]]}, {'votes': [True, False, False, False, True, True, True], 'isolated': [2]}), ('control 48', {'isolate_after': 2, 'cycles': [[False, False, False], [False, False, False], [False, True, True], [True, True, None], [False, True, False], [True, True, True], [False, False, False], [False, False, False], [False, True, False]]}, {'votes': [False, False, True, True, False, True, False, False, False], 'isolated': []}), ('control 51', {'isolate_after': 3, 'cycles': [[False, False, False], [True, False, False], [True, True, True], [True, True, True], [True, True, True], [True, True, True], [True, False, True], [True, False, False], [True, True, True]]}, {'votes': [False, False, True, True, True, True, True, False, True], 'isolated': []})]]\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-two-out-of-three-voting-minimum-healthy-channels","generated_at":"2026-09-29T14:47:49.897808+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":"Force occupied when fewer than two channels are healthy.","root_cause":"Voting proceeds with only one healthy channel.","sha256":"7192974aebed8b8db971413f3db8a5b5a1ef2d313e290746a1349afc4bd2bc7b","title":"Two-out-of-three occupancy voting: minimum healthy channels · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":36.525,"exit_code":1,"observations":[{"actual":{"isolated":[],"votes":[true]},"check":"regression: single healthy channel says clear","expected":{"isolated":[],"votes":[true]},"passed":true},{"actual":{"isolated":[],"votes":[true]},"check":"boundary: two healthy channels agree clear","expected":{"isolated":[],"votes":[false]},"passed":false},{"actual":{"isolated":[],"votes":[true,true,true,false,true,true,true,false,true]},"check":"sampled regression 9","expected":{"isolated":[],"votes":[false,true,true,false,true,true,true,false,true]},"passed":false},{"actual":{"isolated":[0],"votes":[false,false,true]},"check":"boundary: persistent dissenter","expected":{"isolated":[0],"votes":[false,false,false]},"passed":false},{"actual":{"isolated":[],"votes":[true]},"check":"boundary: two healthy channels disagree","expected":{"isolated":[],"votes":[true]},"passed":true},{"actual":{"isolated":[],"votes":[false,true,true,true]},"check":"control 1","expected":{"isolated":[],"votes":[false,true,true,false]},"passed":false},{"actual":{"isolated":[],"votes":[true,false,false,true,true,true,false,true,true]},"check":"control 4","expected":{"isolated":[],"votes":[true,false,false,true,true,true,false,false,true]},"passed":false},{"actual":{"isolated":[],"votes":[false,false,true,true,true,false,true,false]},"check":"control 7","expected":{"isolated":[],"votes":[false,false,true,true,true,false,true,false]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: single healthy channel says clear\", \"actual\": {\"votes\": [true], \"isolated\": []}, \"expected\": {\"votes\": [true], \"isolated\": []}, \"passed\": true}, {\"check\": \"boundary: two healthy channels agree clear\", \"actual\": {\"votes\": [true], \"isolated\": []}, \"expected\": {\"votes\": [false], \"isolated\": []}, \"passed\": false}, {\"check\": \"sampled regression 9\", \"actual\": {\"votes\": [true, true, true, false, true, true, true, false, true], \"isolated\": []}, \"expected\": {\"votes\": [false, true, true, false, true, true, true, false, true], \"isolated\": []}, \"passed\": false}, {\"check\": \"boundary: persistent dissenter\", \"actual\": {\"votes\": [false, false, true], \"isolated\": [0]}, \"expected\": {\"votes\": [false, false, false], \"isolated\": [0]}, \"passed\": false}, {\"check\": \"boundary: two healthy channels disagree\", \"actual\": {\"votes\": [true], \"isolated\": []}, \"expected\": {\"votes\": [true], \"isolated\": []}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"votes\": [false, true, true, true], \"isolated\": []}, \"expected\": {\"votes\": [false, true, true, false], \"isolated\": []}, \"passed\": false}, {\"check\": \"control 4\", \"actual\": {\"votes\": [true, false, false, true, true, true, false, true, true], \"isolated\": []}, \"expected\": {\"votes\": [true, false, false, true, true, true, false, false, true], \"isolated\": []}, \"passed\": false}, {\"check\": \"control 7\", \"actual\": {\"votes\": [false, false, true, true, true, false, true, false], \"isolated\": []}, \"expected\": {\"votes\": [false, false, true, true, true, false, true, false], \"isolated\": []}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":36.867,"exit_code":1,"observations":[{"actual":{"isolated":[],"votes":[false]},"check":"regression: single healthy channel says clear","expected":{"isolated":[],"votes":[true]},"passed":false},{"actual":{"isolated":[],"votes":[false]},"check":"boundary: two healthy channels agree clear","expected":{"isolated":[],"votes":[false]},"passed":true},{"actual":{"isolated":[],"votes":[false,true,false,false,true,true,false,false,true]},"check":"sampled regression 9","expected":{"isolated":[],"votes":[false,true,true,false,true,true,true,false,true]},"passed":false},{"actual":{"isolated":[0],"votes":[false,false,false]},"check":"boundary: persistent dissenter","expected":{"isolated":[0],"votes":[false,false,false]},"passed":true},{"actual":{"isolated":[],"votes":[true]},"check":"boundary: two healthy channels disagree","expected":{"isolated":[],"votes":[true]},"passed":true},{"actual":{"isolated":[],"votes":[false,true,true,false]},"check":"control 1","expected":{"isolated":[],"votes":[false,true,true,false]},"passed":true},{"actual":{"isolated":[],"votes":[true,false,false,true,true,true,false,false,true]},"check":"control 4","expected":{"isolated":[],"votes":[true,false,false,true,true,true,false,false,true]},"passed":true},{"actual":{"isolated":[],"votes":[false,false,true,true,true,false,true,false]},"check":"control 7","expected":{"isolated":[],"votes":[false,false,true,true,true,false,true,false]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: single healthy channel says clear\", \"actual\": {\"votes\": [false], \"isolated\": []}, \"expected\": {\"votes\": [true], \"isolated\": []}, \"passed\": false}, {\"check\": \"boundary: two healthy channels agree clear\", \"actual\": {\"votes\": [false], \"isolated\": []}, \"expected\": {\"votes\": [false], \"isolated\": []}, \"passed\": true}, {\"check\": \"sampled regression 9\", \"actual\": {\"votes\": [false, true, false, false, true, true, false, false, true], \"isolated\": []}, \"expected\": {\"votes\": [false, true, true, false, true, true, true, false, true], \"isolated\": []}, \"passed\": false}, {\"check\": \"boundary: persistent dissenter\", \"actual\": {\"votes\": [false, false, false], \"isolated\": [0]}, \"expected\": {\"votes\": [false, false, false], \"isolated\": [0]}, \"passed\": true}, {\"check\": \"boundary: two healthy channels disagree\", \"actual\": {\"votes\": [true], \"isolated\": []}, \"expected\": {\"votes\": [true], \"isolated\": []}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"votes\": [false, true, true, false], \"isolated\": []}, \"expected\": {\"votes\": [false, true, true, false], \"isolated\": []}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"votes\": [true, false, false, true, true, true, false, false, true], \"isolated\": []}, \"expected\": {\"votes\": [true, false, false, true, true, true, false, false, true], \"isolated\": []}, \"passed\": true}, {\"check\": \"control 7\", \"actual\": {\"votes\": [false, false, true, true, true, false, true, false], \"isolated\": []}, \"expected\": {\"votes\": [false, false, true, true, true, false, true, false], \"isolated\": []}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.307,"exit_code":0,"observations":[{"actual":{"isolated":[],"votes":[true]},"check":"regression: single healthy channel says clear","expected":{"isolated":[],"votes":[true]},"passed":true},{"actual":{"isolated":[],"votes":[false]},"check":"boundary: two healthy channels agree clear","expected":{"isolated":[],"votes":[false]},"passed":true},{"actual":{"isolated":[],"votes":[false,true,true,false,true,true,true,false,true]},"check":"sampled regression 9","expected":{"isolated":[],"votes":[false,true,true,false,true,true,true,false,true]},"passed":true},{"actual":{"isolated":[0],"votes":[false,false,false]},"check":"boundary: persistent dissenter","expected":{"isolated":[0],"votes":[false,false,false]},"passed":true},{"actual":{"isolated":[],"votes":[true]},"check":"boundary: two healthy channels disagree","expected":{"isolated":[],"votes":[true]},"passed":true},{"actual":{"isolated":[],"votes":[false,true,true,false]},"check":"control 1","expected":{"isolated":[],"votes":[false,true,true,false]},"passed":true},{"actual":{"isolated":[],"votes":[true,false,false,true,true,true,false,false,true]},"check":"control 4","expected":{"isolated":[],"votes":[true,false,false,true,true,true,false,false,true]},"passed":true},{"actual":{"isolated":[],"votes":[false,false,true,true,true,false,true,false]},"check":"control 7","expected":{"isolated":[],"votes":[false,false,true,true,true,false,true,false]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: single healthy channel says clear\", \"actual\": {\"votes\": [true], \"isolated\": []}, \"expected\": {\"votes\": [true], \"isolated\": []}, \"passed\": true}, {\"check\": \"boundary: two healthy channels agree clear\", \"actual\": {\"votes\": [false], \"isolated\": []}, \"expected\": {\"votes\": [false], \"isolated\": []}, \"passed\": true}, {\"check\": \"sampled regression 9\", \"actual\": {\"votes\": [false, true, true, false, true, true, true, false, true], \"isolated\": []}, \"expected\": {\"votes\": [false, true, true, false, true, true, true, false, true], \"isolated\": []}, \"passed\": true}, {\"check\": \"boundary: persistent dissenter\", \"actual\": {\"votes\": [false, false, false], \"isolated\": [0]}, \"expected\": {\"votes\": [false, false, false], \"isolated\": [0]}, \"passed\": true}, {\"check\": \"boundary: two healthy channels disagree\", \"actual\": {\"votes\": [true], \"isolated\": []}, \"expected\": {\"votes\": [true], \"isolated\": []}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"votes\": [false, true, true, false], \"isolated\": []}, \"expected\": {\"votes\": [false, true, true, false], \"isolated\": []}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"votes\": [true, false, false, true, true, true, false, false, true], \"isolated\": []}, \"expected\": {\"votes\": [true, false, false, true, true, true, false, false, true], \"isolated\": []}, \"passed\": true}, {\"check\": \"control 7\", \"actual\": {\"votes\": [false, false, true, true, true, false, true, false], \"isolated\": []}, \"expected\": {\"votes\": [false, false, true, true, true, false, true, false], \"isolated\": []}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}