{"abstract":"Release resumes after a track circuit clears without having been occupied.","category":"Railway interlocking logic","checks":8,"contract":"Sections of a locked route are released in route order as the train passes. A section is released when it clears, it was seen occupied earlier, its predecessor is already released (or it is the first), and the next route section is currently occupied (or it is the last). A clear of a never-occupied route section latches a fault that stops all further release. Events for sections outside the route are ignored. Output released sections in release order and the fault flag.","contract_signature":"x","evaluation_group":"w2-railway_interlocking_logic-sectional-release","failed_approach":"Exempting the first section still misses a phantom clear at the route entrance.","family":"w2-railway_interlocking_logic-sectional-release-fault-latch","id":"FA-66951","implementations":{"attempt":{"sha256":"5e7fb27964bb862ad038c9e6274f6704918f911cea16b76292f6fedbdbae1a65","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    route = x['route']\n    seen = set()\n    released = []\n    fault = False\n    occ = set()\n    for sec, ev in x['events']:\n        if sec not in route:\n            continue\n        if ev == 'occ':\n            occ.add(sec)\n            seen.add(sec)\n        else:\n            if sec not in seen and sec != route[0]:\n                fault = True\n            occ.discard(sec)\n            i = route.index(sec)\n            nxt_ok = i == len(route) - 1 or route[i + 1] in occ\n            prev_ok = i == 0 or route[i - 1] in released\n            if not fault and nxt_ok and prev_ok and sec not in released:\n                released.append(sec)\n    return {'released': released, 'fault': fault}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: phantom clear then passage', {'route': ['T1', 'T2'], 'events': [['T2', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': [], 'fault': True}), ('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 7', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'clr'], ['Z9', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['T3', 'occ'], ['T2', 'clr'], ['T3', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 58', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ'], ['T2', 'occ']]}, {'released': [], 'fault': True}), ('boundary: next section flickered earlier', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T2', 'clr'], ['T1', 'clr']]}, {'released': [], 'fault': False}), ('control 1', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['Z9', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False}), ('control 4', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False}), ('control 10', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False})], [('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 48', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['Z9', 'occ'], ['T2', 'clr'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('boundary: middle section clears before first', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T3', 'occ'], ['T2', 'clr'], ['T1', 'clr']]}, {'released': [], 'fault': False}), ('regression: phantom clear then passage', {'route': ['T1', 'T2'], 'events': [['T2', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': [], 'fault': True}), ('boundary: re-occupation after release', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1'], 'fault': False}), ('control 12', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T3', 'occ'], ['T1', 'occ'], ['T1', 'clr'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T3', 'clr']]}, {'released': ['T1', 'T2', 'T3'], 'fault': False}), ('control 15', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['T3', 'clr'], ['T4', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1', 'T2', 'T3', 'T4'], 'fault': False}), ('control 18', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T1', 'occ'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False})], [('regression: phantom clear then passage', {'route': ['T1', 'T2'], 'events': [['T2', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': [], 'fault': True}), ('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 13', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T4', 'clr'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['Z9', 'occ'], ['T1', 'occ'], ['T4', 'occ'], ['T3', 'clr'], ['T4', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 58', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ'], ['T2', 'occ']]}, {'released': [], 'fault': True}), ('boundary: re-occupation after release', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1'], 'fault': False}), ('sampled regression 23', {'route': ['T1', 'T2', 'T3'], 'events': [['T3', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['Z9', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'occ'], ['T2', 'clr'], ['T3', 'clr']]}, {'released': [], 'fault': True}), ('control 26', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['T3', 'clr'], ['T1', 'clr'], ['T4', 'clr'], ['T4', 'occ']]}, {'released': ['T1', 'T2', 'T3', 'T4'], 'fault': False}), ('control 29', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False})], [('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 58', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ'], ['T2', 'occ']]}, {'released': [], 'fault': True}), ('boundary: single section route', {'route': ['T1'], 'events': [['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1'], 'fault': False}), ('boundary: foreign section noise', {'route': ['T1', 'T2'], 'events': [['Z9', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False}), ('boundary: next section flickered earlier', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T2', 'clr'], ['T1', 'clr']]}, {'released': [], 'fault': False}), ('control 34', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'occ'], ['Z9', 'clr'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ']]}, {'released': ['T1', 'T2'], 'fault': False}), ('control 37', {'route': ['T1', 'T2', 'T3', 'T4', 'T5'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['T3', 'clr'], ['T5', 'occ'], ['T4', 'clr'], ['T5', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1', 'T2', 'T3', 'T4', 'T5'], 'fault': False}), ('control 40', {'route': ['T1', 'T2'], 'events': [['T2', 'occ'], ['T1', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['T2', 'occ'], ['T2', 'clr']]}, {'released': [], 'fault': False})], [('regression: phantom clear then passage', {'route': ['T1', 'T2'], 'events': [['T2', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': [], 'fault': True}), ('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 19', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T1', 'clr'], ['T2', 'occ'], ['T3', 'clr'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['T3', 'clr'], ['T4', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 58', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ'], ['T2', 'occ']]}, {'released': [], 'fault': True}), ('boundary: next section flickered earlier', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T2', 'clr'], ['T1', 'clr']]}, {'released': [], 'fault': False}), ('control 45', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T3', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['Z9', 'occ'], ['T3', 'clr'], ['T4', 'clr']]}, {'released': ['T1', 'T2', 'T3', 'T4'], 'fault': False}), ('sampled regression 48', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['Z9', 'occ'], ['T2', 'clr'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('control 51', {'route': ['T1', 'T2', 'T3'], 'events': [['Z9', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T3', 'occ'], ['T2', 'clr'], ['T2', 'occ'], ['T3', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1', 'T2', 'T3'], 'fault': False})]]\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":"a999b5a272873b9ec50804c85616908170a4d7d428dc476fc3d0a5f6f067a0e6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    route = x['route']\n    seen = set()\n    released = []\n    fault = False\n    occ = set()\n    for sec, ev in x['events']:\n        if sec not in route:\n            continue\n        if ev == 'occ':\n            occ.add(sec)\n            seen.add(sec)\n        else:\n            fault = sec not in seen\n            occ.discard(sec)\n            i = route.index(sec)\n            nxt_ok = i == len(route) - 1 or route[i + 1] in occ\n            prev_ok = i == 0 or route[i - 1] in released\n            if not fault and nxt_ok and prev_ok and sec not in released:\n                released.append(sec)\n    return {'released': released, 'fault': fault}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: phantom clear then passage', {'route': ['T1', 'T2'], 'events': [['T2', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': [], 'fault': True}), ('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 7', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'clr'], ['Z9', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['T3', 'occ'], ['T2', 'clr'], ['T3', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 58', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ'], ['T2', 'occ']]}, {'released': [], 'fault': True}), ('boundary: next section flickered earlier', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T2', 'clr'], ['T1', 'clr']]}, {'released': [], 'fault': False}), ('control 1', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['Z9', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False}), ('control 4', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False}), ('control 10', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False})], [('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 48', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['Z9', 'occ'], ['T2', 'clr'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('boundary: middle section clears before first', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T3', 'occ'], ['T2', 'clr'], ['T1', 'clr']]}, {'released': [], 'fault': False}), ('regression: phantom clear then passage', {'route': ['T1', 'T2'], 'events': [['T2', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': [], 'fault': True}), ('boundary: re-occupation after release', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1'], 'fault': False}), ('control 12', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T3', 'occ'], ['T1', 'occ'], ['T1', 'clr'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T3', 'clr']]}, {'released': ['T1', 'T2', 'T3'], 'fault': False}), ('control 15', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['T3', 'clr'], ['T4', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1', 'T2', 'T3', 'T4'], 'fault': False}), ('control 18', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T1', 'occ'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False})], [('regression: phantom clear then passage', {'route': ['T1', 'T2'], 'events': [['T2', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': [], 'fault': True}), ('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 13', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T4', 'clr'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['Z9', 'occ'], ['T1', 'occ'], ['T4', 'occ'], ['T3', 'clr'], ['T4', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 58', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ'], ['T2', 'occ']]}, {'released': [], 'fault': True}), ('boundary: re-occupation after release', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1'], 'fault': False}), ('sampled regression 23', {'route': ['T1', 'T2', 'T3'], 'events': [['T3', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['Z9', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'occ'], ['T2', 'clr'], ['T3', 'clr']]}, {'released': [], 'fault': True}), ('control 26', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['T3', 'clr'], ['T1', 'clr'], ['T4', 'clr'], ['T4', 'occ']]}, {'released': ['T1', 'T2', 'T3', 'T4'], 'fault': False}), ('control 29', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False})], [('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 58', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ'], ['T2', 'occ']]}, {'released': [], 'fault': True}), ('boundary: single section route', {'route': ['T1'], 'events': [['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1'], 'fault': False}), ('boundary: foreign section noise', {'route': ['T1', 'T2'], 'events': [['Z9', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': ['T1', 'T2'], 'fault': False}), ('boundary: next section flickered earlier', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T2', 'clr'], ['T1', 'clr']]}, {'released': [], 'fault': False}), ('control 34', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'occ'], ['Z9', 'clr'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ']]}, {'released': ['T1', 'T2'], 'fault': False}), ('control 37', {'route': ['T1', 'T2', 'T3', 'T4', 'T5'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['T3', 'clr'], ['T5', 'occ'], ['T4', 'clr'], ['T5', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1', 'T2', 'T3', 'T4', 'T5'], 'fault': False}), ('control 40', {'route': ['T1', 'T2'], 'events': [['T2', 'occ'], ['T1', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['T2', 'occ'], ['T2', 'clr']]}, {'released': [], 'fault': False})], [('regression: phantom clear then passage', {'route': ['T1', 'T2'], 'events': [['T2', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr']]}, {'released': [], 'fault': True}), ('regression: phantom clear on first section', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 19', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T1', 'clr'], ['T2', 'occ'], ['T3', 'clr'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['T3', 'clr'], ['T4', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('sampled regression 58', {'route': ['T1', 'T2'], 'events': [['T1', 'clr'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['Z9', 'occ'], ['T2', 'occ']]}, {'released': [], 'fault': True}), ('boundary: next section flickered earlier', {'route': ['T1', 'T2', 'T3'], 'events': [['T1', 'occ'], ['T2', 'occ'], ['T2', 'clr'], ['T1', 'clr']]}, {'released': [], 'fault': False}), ('control 45', {'route': ['T1', 'T2', 'T3', 'T4'], 'events': [['T1', 'occ'], ['T3', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T1', 'clr'], ['T3', 'occ'], ['T2', 'clr'], ['T4', 'occ'], ['Z9', 'occ'], ['T3', 'clr'], ['T4', 'clr']]}, {'released': ['T1', 'T2', 'T3', 'T4'], 'fault': False}), ('sampled regression 48', {'route': ['T1', 'T2'], 'events': [['T1', 'occ'], ['Z9', 'occ'], ['T2', 'clr'], ['T2', 'occ'], ['T1', 'clr'], ['T2', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': [], 'fault': True}), ('control 51', {'route': ['T1', 'T2', 'T3'], 'events': [['Z9', 'occ'], ['T1', 'occ'], ['T2', 'occ'], ['T1', 'clr'], ['T3', 'occ'], ['T3', 'occ'], ['T2', 'clr'], ['T2', 'occ'], ['T3', 'clr'], ['T1', 'occ'], ['T1', 'clr']]}, {'released': ['T1', 'T2', 'T3'], 'fault': False})]]\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-sectional-release-fault-latch","generated_at":"2026-09-29T14:47:48.436540+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.","root_cause":"The fault flag is recomputed at every clear instead of being latched.","sha256":"a096d30f28b23e5fcff6f8021f005488a332eb8c51b109a3e7cbc9235214d161","title":"Sectional route release: fault latch · 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":39.517,"exit_code":1,"observations":[{"actual":{"fault":true,"released":[]},"check":"regression: phantom clear then passage","expected":{"fault":true,"released":[]},"passed":true},{"actual":{"fault":false,"released":["T1"]},"check":"regression: phantom clear on first section","expected":{"fault":true,"released":[]},"passed":false},{"actual":{"fault":true,"released":[]},"check":"sampled regression 7","expected":{"fault":true,"released":[]},"passed":true},{"actual":{"fault":false,"released":["T1","T2"]},"check":"sampled regression 58","expected":{"fault":true,"released":[]},"passed":false},{"actual":{"fault":false,"released":[]},"check":"boundary: next section flickered earlier","expected":{"fault":false,"released":[]},"passed":true},{"actual":{"fault":false,"released":["T1","T2"]},"check":"control 1","expected":{"fault":false,"released":["T1","T2"]},"passed":true},{"actual":{"fault":false,"released":["T1","T2"]},"check":"control 4","expected":{"fault":false,"released":["T1","T2"]},"passed":true},{"actual":{"fault":false,"released":["T1","T2"]},"check":"control 10","expected":{"fault":false,"released":["T1","T2"]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: phantom clear then passage\", \"actual\": {\"released\": [], \"fault\": true}, \"expected\": {\"released\": [], \"fault\": true}, \"passed\": true}, {\"check\": \"regression: phantom clear on first section\", \"actual\": {\"released\": [\"T1\"], \"fault\": false}, \"expected\": {\"released\": [], \"fault\": true}, \"passed\": false}, {\"check\": \"sampled regression 7\", \"actual\": {\"released\": [], \"fault\": true}, \"expected\": {\"released\": [], \"fault\": true}, \"passed\": true}, {\"check\": \"sampled regression 58\", \"actual\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"expected\": {\"released\": [], \"fault\": true}, \"passed\": false}, {\"check\": \"boundary: next section flickered earlier\", \"actual\": {\"released\": [], \"fault\": false}, \"expected\": {\"released\": [], \"fault\": false}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"expected\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"expected\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"passed\": true}, {\"check\": \"control 10\", \"actual\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"expected\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.729,"exit_code":1,"observations":[{"actual":{"fault":false,"released":["T1","T2"]},"check":"regression: phantom clear then passage","expected":{"fault":true,"released":[]},"passed":false},{"actual":{"fault":false,"released":["T1"]},"check":"regression: phantom clear on first section","expected":{"fault":true,"released":[]},"passed":false},{"actual":{"fault":false,"released":[]},"check":"sampled regression 7","expected":{"fault":true,"released":[]},"passed":false},{"actual":{"fault":false,"released":["T1","T2"]},"check":"sampled regression 58","expected":{"fault":true,"released":[]},"passed":false},{"actual":{"fault":false,"released":[]},"check":"boundary: next section flickered earlier","expected":{"fault":false,"released":[]},"passed":true},{"actual":{"fault":false,"released":["T1","T2"]},"check":"control 1","expected":{"fault":false,"released":["T1","T2"]},"passed":true},{"actual":{"fault":false,"released":["T1","T2"]},"check":"control 4","expected":{"fault":false,"released":["T1","T2"]},"passed":true},{"actual":{"fault":false,"released":["T1","T2"]},"check":"control 10","expected":{"fault":false,"released":["T1","T2"]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: phantom clear then passage\", \"actual\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"expected\": {\"released\": [], \"fault\": true}, \"passed\": false}, {\"check\": \"regression: phantom clear on first section\", \"actual\": {\"released\": [\"T1\"], \"fault\": false}, \"expected\": {\"released\": [], \"fault\": true}, \"passed\": false}, {\"check\": \"sampled regression 7\", \"actual\": {\"released\": [], \"fault\": false}, \"expected\": {\"released\": [], \"fault\": true}, \"passed\": false}, {\"check\": \"sampled regression 58\", \"actual\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"expected\": {\"released\": [], \"fault\": true}, \"passed\": false}, {\"check\": \"boundary: next section flickered earlier\", \"actual\": {\"released\": [], \"fault\": false}, \"expected\": {\"released\": [], \"fault\": false}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"expected\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"expected\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"passed\": true}, {\"check\": \"control 10\", \"actual\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"expected\": {\"released\": [\"T1\", \"T2\"], \"fault\": false}, \"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."}}