FAILURE MAP
← Case archive

FA-66986 / Railway interlocking logic / Open access

Track circuit pick-up delay: shunt restart · case 01

A section clears after a train has bobbed the shunt without enough consecutive clear samples.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The pick-up count is not restarted by a new shunt, so clear time accumulates across shunts.

THE FAILURE

The pick-up count is not restarted by a new shunt, so clear time accumulates across shunts.

Unsuccessful approach: Restarting only on a clear-to-occupied transition still accumulates across shunts while already occupied.

Case contract

Samples arrive every period_ms: True is shunted, False unshunted, None a power or receiver failure. The section starts occupied. A shunt or a failure makes it occupied immediately and restarts the pick-up count; it becomes clear once consecutive unshunted samples span at least pickup_ms (count*period_ms >= pickup_ms). Output the state after every sample.

Why this case matters

Interlocking logic decides whether trains may be given authority; a wrong decision at this point either grants unsafe movements or strands traffic.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    state = 'occ'
    run = 0
    out = []
    for s in x['samples']:
        if s is None or s:
            state = 'occ'
        else:
            run += 1
            if state == 'occ' and run * x['period_ms'] >= x['pickup_ms']:
                state = 'clr'
        out.append(state)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: bobbing shunt while occupied', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 3', {'period_ms': 250, 'pickup_ms': 750, 'samples': [True, False, False, False, False, False, False, False, True, True, False, True, False, False]}, ['occ', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('regression: receiver failure mid pick-up', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('boundary: pick-up exactly at the delay', {'period_ms': 250, 'pickup_ms': 500, 'samples': [False, False, False]}, ['occ', 'clr', 'clr']), ('regression: receiver failure on a clear section', {'period_ms': 100, 'pickup_ms': 200, 'samples': [False, False, None, False]}, ['occ', 'clr', 'occ', 'occ']), ('control 1', {'period_ms': 100, 'pickup_ms': 1000, 'samples': [False, False, False, None, False, False, True, False, True, False, None, None]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 4', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, False, False, False, True, True, False, False, True, False, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('control 7', {'period_ms': 100, 'pickup_ms': 500, 'samples': [False, False, True, False, None, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ'])], [('regression: receiver failure mid pick-up', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 14', {'period_ms': 100, 'pickup_ms': 300, 'samples': [None, None, False, False, False, True, False, None, True, True, False]}, ['occ', 'occ', 'occ', 'occ', 'clr', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 9', {'period_ms': 100, 'pickup_ms': 500, 'samples': [False, False, False, True, False, None, None, False, False, True, True, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('regression: receiver failure on a clear section', {'period_ms': 100, 'pickup_ms': 200, 'samples': [False, False, None, False]}, ['occ', 'clr', 'occ', 'occ']), ('boundary: never clears', {'period_ms': 250, 'pickup_ms': 1000, 'samples': [False, False, False]}, ['occ', 'occ', 'occ']), ('control 12', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, False, True, False, False, None, None, False, True, True]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 15', {'period_ms': 250, 'pickup_ms': 750, 'samples': [False, False, True, True, None, True, None, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 18', {'period_ms': 250, 'pickup_ms': 500, 'samples': [True, None, False, False, None, False, False, False, False, False, False, False, None, False]}, ['occ', 'occ', 'occ', 'clr', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ'])], [('regression: receiver failure on a clear section', {'period_ms': 100, 'pickup_ms': 200, 'samples': [False, False, None, False]}, ['occ', 'clr', 'occ', 'occ']), ('regression: bobbing shunt while occupied', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 26', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, None, False, False, True, None, None, False, False, True, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('boundary: never clears', {'period_ms': 250, 'pickup_ms': 1000, 'samples': [False, False, False]}, ['occ', 'occ', 'occ']), ('boundary: train arrives on a clear section', {'period_ms': 100, 'pickup_ms': 100, 'samples': [False, True, False]}, ['clr', 'occ', 'clr']), ('control 23', {'period_ms': 100, 'pickup_ms': 1000, 'samples': [False, False, None, None, False, True, False, True, False, False, None]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('control 29', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, False, True, False, False, False, True, True, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 32', {'period_ms': 100, 'pickup_ms': 300, 'samples': [None, False, False, None, False, True, False, True, True, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'clr'])], [('regression: bobbing shunt while occupied', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('regression: receiver failure mid pick-up', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 44', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 37', {'period_ms': 250, 'pickup_ms': 300, 'samples': [False, True, False, False, False, False, False, False, False, False, True, False, False]}, ['occ', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ', 'clr']), ('boundary: pick-up exactly at the delay', {'period_ms': 250, 'pickup_ms': 500, 'samples': [False, False, False]}, ['occ', 'clr', 'clr']), ('control 34', {'period_ms': 250, 'pickup_ms': 300, 'samples': [True, False, False, False, False, False, False, True]}, ['occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ']), ('control 40', {'period_ms': 100, 'pickup_ms': 1000, 'samples': [False, False, None, False, False, False, False, True, None, False, False, None, True]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 43', {'period_ms': 250, 'pickup_ms': 1000, 'samples': [True, False, None, None, False, False, True, False, None, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ'])], [('regression: receiver failure mid pick-up', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('regression: bobbing shunt while occupied', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 59', {'period_ms': 250, 'pickup_ms': 1000, 'samples': [False, True, None, False, True, False, None, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 54', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, False, None, False, None, False, False, None, False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('regression: receiver failure on a clear section', {'period_ms': 100, 'pickup_ms': 200, 'samples': [False, False, None, False]}, ['occ', 'clr', 'occ', 'occ']), ('sampled regression 45', {'period_ms': 250, 'pickup_ms': 500, 'samples': [True, False, False, False, True, False, None, False, False, None, True, False]}, ['occ', 'occ', 'clr', 'clr', 'occ', 'occ', 'occ', 'occ', 'clr', 'occ', 'occ', 'occ']), ('control 48', {'period_ms': 250, 'pickup_ms': 750, 'samples': [False, False, True, True]}, ['occ', 'occ', 'occ', 'occ']), ('control 51', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, None, True, False, False, False, True, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ'])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: bobbing shunt while occupied['occ', 'occ', 'occ', 'clr', 'clr', 'clr']['occ', 'occ', 'occ', 'occ', 'occ', 'clr']Failed
sampled regression 3['occ', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ', 'clr', 'occ', 'clr', 'clr']['occ', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']Failed
regression: receiver failure mid pick-up['occ', 'occ', 'occ', 'clr', 'clr', 'clr']['occ', 'occ', 'occ', 'occ', 'occ', 'clr']Failed
boundary: pick-up exactly at the delay['occ', 'clr', 'clr']['occ', 'clr', 'clr']Passed
regression: receiver failure on a clear section['occ', 'clr', 'occ', 'clr']['occ', 'clr', 'occ', 'occ']Failed
control 1['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']Passed
sampled regression 4['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'clr', 'clr', 'clr']['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']Failed
control 7['occ', 'occ', 'occ', 'occ', 'occ', 'occ']['occ', 'occ', 'occ', 'occ', 'occ', 'occ']Passed

SHA-256 / 7dda904b9e613479e915295cc08759ec1c60e688c41cf0616e5debad3811c6fd

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    state = 'occ'
    run = 0
    out = []
    for s in x['samples']:
        if s is None or s:
            if state == 'clr':
                run = 0
            state = 'occ'
        else:
            run += 1
            if state == 'occ' and run * x['period_ms'] >= x['pickup_ms']:
                state = 'clr'
        out.append(state)
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: bobbing shunt while occupied', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 3', {'period_ms': 250, 'pickup_ms': 750, 'samples': [True, False, False, False, False, False, False, False, True, True, False, True, False, False]}, ['occ', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('regression: receiver failure mid pick-up', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('boundary: pick-up exactly at the delay', {'period_ms': 250, 'pickup_ms': 500, 'samples': [False, False, False]}, ['occ', 'clr', 'clr']), ('regression: receiver failure on a clear section', {'period_ms': 100, 'pickup_ms': 200, 'samples': [False, False, None, False]}, ['occ', 'clr', 'occ', 'occ']), ('control 1', {'period_ms': 100, 'pickup_ms': 1000, 'samples': [False, False, False, None, False, False, True, False, True, False, None, None]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 4', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, False, False, False, True, True, False, False, True, False, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('control 7', {'period_ms': 100, 'pickup_ms': 500, 'samples': [False, False, True, False, None, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ'])], [('regression: receiver failure mid pick-up', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 14', {'period_ms': 100, 'pickup_ms': 300, 'samples': [None, None, False, False, False, True, False, None, True, True, False]}, ['occ', 'occ', 'occ', 'occ', 'clr', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 9', {'period_ms': 100, 'pickup_ms': 500, 'samples': [False, False, False, True, False, None, None, False, False, True, True, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('regression: receiver failure on a clear section', {'period_ms': 100, 'pickup_ms': 200, 'samples': [False, False, None, False]}, ['occ', 'clr', 'occ', 'occ']), ('boundary: never clears', {'period_ms': 250, 'pickup_ms': 1000, 'samples': [False, False, False]}, ['occ', 'occ', 'occ']), ('control 12', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, False, True, False, False, None, None, False, True, True]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 15', {'period_ms': 250, 'pickup_ms': 750, 'samples': [False, False, True, True, None, True, None, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 18', {'period_ms': 250, 'pickup_ms': 500, 'samples': [True, None, False, False, None, False, False, False, False, False, False, False, None, False]}, ['occ', 'occ', 'occ', 'clr', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ'])], [('regression: receiver failure on a clear section', {'period_ms': 100, 'pickup_ms': 200, 'samples': [False, False, None, False]}, ['occ', 'clr', 'occ', 'occ']), ('regression: bobbing shunt while occupied', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 26', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, None, False, False, True, None, None, False, False, True, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('boundary: never clears', {'period_ms': 250, 'pickup_ms': 1000, 'samples': [False, False, False]}, ['occ', 'occ', 'occ']), ('boundary: train arrives on a clear section', {'period_ms': 100, 'pickup_ms': 100, 'samples': [False, True, False]}, ['clr', 'occ', 'clr']), ('control 23', {'period_ms': 100, 'pickup_ms': 1000, 'samples': [False, False, None, None, False, True, False, True, False, False, None]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('control 29', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, False, True, False, False, False, True, True, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 32', {'period_ms': 100, 'pickup_ms': 300, 'samples': [None, False, False, None, False, True, False, True, True, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'clr'])], [('regression: bobbing shunt while occupied', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('regression: receiver failure mid pick-up', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 44', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 37', {'period_ms': 250, 'pickup_ms': 300, 'samples': [False, True, False, False, False, False, False, False, False, False, True, False, False]}, ['occ', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ', 'clr']), ('boundary: pick-up exactly at the delay', {'period_ms': 250, 'pickup_ms': 500, 'samples': [False, False, False]}, ['occ', 'clr', 'clr']), ('control 34', {'period_ms': 250, 'pickup_ms': 300, 'samples': [True, False, False, False, False, False, False, True]}, ['occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ']), ('control 40', {'period_ms': 100, 'pickup_ms': 1000, 'samples': [False, False, None, False, False, False, False, True, None, False, False, None, True]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 43', {'period_ms': 250, 'pickup_ms': 1000, 'samples': [True, False, None, None, False, False, True, False, None, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ'])], [('regression: receiver failure mid pick-up', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('regression: bobbing shunt while occupied', {'period_ms': 100, 'pickup_ms': 300, 'samples': [False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'clr']), ('sampled regression 59', {'period_ms': 250, 'pickup_ms': 1000, 'samples': [False, True, None, False, True, False, None, None, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('sampled regression 54', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, False, None, False, None, False, False, None, False, False, True, False, False, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']), ('regression: receiver failure on a clear section', {'period_ms': 100, 'pickup_ms': 200, 'samples': [False, False, None, False]}, ['occ', 'clr', 'occ', 'occ']), ('sampled regression 45', {'period_ms': 250, 'pickup_ms': 500, 'samples': [True, False, False, False, True, False, None, False, False, None, True, False]}, ['occ', 'occ', 'clr', 'clr', 'occ', 'occ', 'occ', 'occ', 'clr', 'occ', 'occ', 'occ']), ('control 48', {'period_ms': 250, 'pickup_ms': 750, 'samples': [False, False, True, True]}, ['occ', 'occ', 'occ', 'occ']), ('control 51', {'period_ms': 100, 'pickup_ms': 750, 'samples': [False, None, True, False, False, False, True, False]}, ['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ'])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: bobbing shunt while occupied['occ', 'occ', 'occ', 'clr', 'clr', 'clr']['occ', 'occ', 'occ', 'occ', 'occ', 'clr']Failed
sampled regression 3['occ', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ', 'occ', 'occ', 'occ', 'clr']['occ', 'occ', 'occ', 'clr', 'clr', 'clr', 'clr', 'clr', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']Failed
regression: receiver failure mid pick-up['occ', 'occ', 'occ', 'clr', 'clr', 'clr']['occ', 'occ', 'occ', 'occ', 'occ', 'clr']Failed
boundary: pick-up exactly at the delay['occ', 'clr', 'clr']['occ', 'clr', 'clr']Passed
regression: receiver failure on a clear section['occ', 'clr', 'occ', 'occ']['occ', 'clr', 'occ', 'occ']Passed
control 1['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']Passed
sampled regression 4['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'clr', 'clr', 'clr']['occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ', 'occ']Failed
control 7['occ', 'occ', 'occ', 'occ', 'occ', 'occ']['occ', 'occ', 'occ', 'occ', 'occ', 'occ']Passed

SHA-256 / b9c0abdc8965a57daebb2cc00bf53f0c94899fb1827a6830bb4ea907252b62df

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 8 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.

Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.

Member access is invitation-based. Sign in with your invited account to inspect the repair.

Sign in to the archive ↗

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:47:48.773783+00:00.

Case digest / 80cfaabc66802edad4c064556f0e83c837e762dac09b5934fb6cfa8640e13130