{"abstract":"The overlap stays locked at the exact moment the timer expires.","category":"Railway interlocking logic","checks":8,"contract":"The overlap beyond a signal is locked. The release timer starts at the first berth occupation; the overlap is released when an event time reaches start + timer_s while the train has not overrun into the overlap. A berth clear before release cancels the timer (a later occupation restarts it); after release it has no effect. Entering the overlap before release marks an overrun and blocks release. query appends locked or released.","contract_signature":"x","evaluation_group":"w2-railway_interlocking_logic-overlap-timed-release","failed_approach":"Comparing whole minutes releases up to a minute early.","family":"w2-railway_interlocking_logic-overlap-timed-release-timer-expiry-boundary","id":"FA-67021","implementations":{"attempt":{"sha256":"2fe27c678942d12fecb436d1aac26274e9de6712a1ea1ca8239f7792bf222431","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    T = x['timer_s']\n    start = None\n    overran = False\n    released = False\n    out = []\n    for t, ev in x['events']:\n        if start is not None and not released and not overran and (t - start) // 60 >= T // 60:\n            released = True\n        if ev == 'berth_occ':\n            if start is None:\n                start = t\n        elif ev == 'berth_clr':\n            if not released:\n                start = None\n        elif ev == 'overlap_occ':\n            if not released:\n                overran = True\n        elif ev == 'query':\n            out.append('released' if released else 'locked')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: expiry exactly on time', {'timer_s': 60, 'events': [[10, 'berth_occ'], [70, 'query']]}, ['released']), ('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('regression: berth clears after release', {'timer_s': 60, 'events': [[0, 'berth_occ'], [60, 'query'], [65, 'berth_clr'], [70, 'query']]}, ['released', 'released']), ('control 24', {'timer_s': 90, 'events': [[30, 'query'], [60, 'berth_occ'], [120, 'overlap_occ'], [210, 'query'], [240, 'berth_clr'], [245, 'berth_occ'], [245, 'query'], [245, 'berth_clr'], [305, 'berth_occ'], [335, 'overlap_occ'], [395, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('regression: track circuit bob restarts nothing', {'timer_s': 60, 'events': [[0, 'berth_occ'], [40, 'berth_occ'], [60, 'query']]}, ['released']), ('control 1', {'timer_s': 45, 'events': [[5, 'overlap_occ'], [35, 'query'], [65, 'berth_clr'], [125, 'query'], [170, 'query'], [170, 'berth_clr'], [230, 'berth_occ'], [350, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('control 4', {'timer_s': 90, 'events': [[60, 'berth_clr'], [150, 'berth_occ'], [155, 'berth_occ'], [155, 'query']]}, ['locked']), ('control 7', {'timer_s': 45, 'events': [[5, 'query'], [65, 'overlap_occ'], [110, 'overlap_occ'], [170, 'query']]}, ['locked', 'locked'])], [('regression: track circuit bob restarts nothing', {'timer_s': 60, 'events': [[0, 'berth_occ'], [40, 'berth_occ'], [60, 'query']]}, ['released']), ('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('sampled regression 33', {'timer_s': 60, 'events': [[60, 'berth_occ'], [60, 'query'], [120, 'query'], [150, 'berth_occ'], [240, 'berth_clr'], [360, 'query']]}, ['locked', 'released', 'released']), ('control 62', {'timer_s': 90, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [75, 'query'], [120, 'query'], [150, 'overlap_occ'], [240, 'query'], [245, 'query'], [365, 'query']]}, ['locked', 'released', 'released', 'released', 'released']), ('regression: train stops at time zero', {'timer_s': 60, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [60, 'query']]}, ['released']), ('control 12', {'timer_s': 120, 'events': [[60, 'berth_occ'], [65, 'query'], [70, 'query'], [70, 'query'], [75, 'berth_occ'], [80, 'berth_occ'], [125, 'berth_clr'], [125, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('control 15', {'timer_s': 120, 'events': [[60, 'berth_clr'], [105, 'berth_clr'], [110, 'berth_clr'], [115, 'berth_clr'], [175, 'query'], [175, 'berth_clr'], [235, 'query'], [265, 'overlap_occ'], [270, 'berth_clr'], [390, 'query']]}, ['locked', 'locked', 'locked']), ('sampled regression 18', {'timer_s': 90, 'events': [[0, 'query'], [0, 'query'], [30, 'berth_occ'], [120, 'overlap_occ'], [210, 'berth_clr'], [215, 'query'], [245, 'berth_occ'], [365, 'query']]}, ['locked', 'locked', 'released', 'released'])], [('regression: train stops at time zero', {'timer_s': 60, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [60, 'query']]}, ['released']), ('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('control 24', {'timer_s': 90, 'events': [[30, 'query'], [60, 'berth_occ'], [120, 'overlap_occ'], [210, 'query'], [240, 'berth_clr'], [245, 'berth_occ'], [245, 'query'], [245, 'berth_clr'], [305, 'berth_occ'], [335, 'overlap_occ'], [395, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('regression: berth clears after release', {'timer_s': 60, 'events': [[0, 'berth_occ'], [60, 'query'], [65, 'berth_clr'], [70, 'query']]}, ['released', 'released']), ('boundary: overrun into the overlap', {'timer_s': 60, 'events': [[0, 'berth_occ'], [20, 'overlap_occ'], [120, 'query']]}, ['locked']), ('control 23', {'timer_s': 45, 'events': [[0, 'query'], [5, 'berth_occ'], [95, 'berth_occ'], [185, 'berth_occ'], [245, 'query']]}, ['locked', 'released']), ('control 26', {'timer_s': 60, 'events': [[30, 'query'], [60, 'query'], [150, 'overlap_occ'], [150, 'query']]}, ['locked', 'locked', 'locked']), ('control 29', {'timer_s': 90, 'events': [[90, 'overlap_occ'], [95, 'query'], [95, 'berth_occ'], [185, 'query'], [230, 'query'], [260, 'query'], [350, 'berth_occ'], [410, 'query']]}, ['locked', 'locked', 'locked', 'locked', 'locked'])], [('regression: berth clears after release', {'timer_s': 60, 'events': [[0, 'berth_occ'], [60, 'query'], [65, 'berth_clr'], [70, 'query']]}, ['released', 'released']), ('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('sampled regression 32', {'timer_s': 90, 'events': [[60, 'berth_occ'], [105, 'berth_clr'], [105, 'berth_occ'], [105, 'query'], [135, 'query'], [195, 'berth_clr'], [255, 'query']]}, ['locked', 'locked', 'released']), ('control 62', {'timer_s': 90, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [75, 'query'], [120, 'query'], [150, 'overlap_occ'], [240, 'query'], [245, 'query'], [365, 'query']]}, ['locked', 'released', 'released', 'released', 'released']), ('regression: expiry after a minute boundary', {'timer_s': 120, 'events': [[30, 'berth_occ'], [140, 'query'], [150, 'query']]}, ['locked', 'released']), ('control 34', {'timer_s': 60, 'events': [[5, 'query'], [35, 'query'], [80, 'berth_occ'], [170, 'berth_occ'], [260, 'berth_occ'], [320, 'berth_occ'], [350, 'overlap_occ'], [395, 'overlap_occ'], [440, 'query'], [500, 'query'], [560, 'query']]}, ['locked', 'locked', 'released', 'released', 'released']), ('control 37', {'timer_s': 120, 'events': [[30, 'query'], [60, 'overlap_occ'], [120, 'berth_occ'], [180, 'overlap_occ'], [185, 'overlap_occ'], [185, 'overlap_occ'], [245, 'query'], [275, 'query'], [280, 'overlap_occ'], [280, 'berth_occ'], [280, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('control 40', {'timer_s': 90, 'events': [[60, 'overlap_occ'], [90, 'query'], [135, 'berth_occ'], [195, 'overlap_occ'], [225, 'berth_occ'], [230, 'berth_clr'], [230, 'query']]}, ['locked', 'locked'])], [('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('regression: track circuit bob restarts nothing', {'timer_s': 60, 'events': [[0, 'berth_occ'], [40, 'berth_occ'], [60, 'query']]}, ['released']), ('control 24', {'timer_s': 90, 'events': [[30, 'query'], [60, 'berth_occ'], [120, 'overlap_occ'], [210, 'query'], [240, 'berth_clr'], [245, 'berth_occ'], [245, 'query'], [245, 'berth_clr'], [305, 'berth_occ'], [335, 'overlap_occ'], [395, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('regression: expiry exactly on time', {'timer_s': 60, 'events': [[10, 'berth_occ'], [70, 'query']]}, ['released']), ('regression: train stops at time zero', {'timer_s': 60, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [60, 'query']]}, ['released']), ('control 45', {'timer_s': 60, 'events': [[60, 'query'], [120, 'query'], [150, 'overlap_occ'], [155, 'berth_occ'], [245, 'overlap_occ'], [290, 'berth_occ'], [380, 'berth_clr'], [470, 'overlap_occ'], [470, 'query'], [475, 'berth_occ'], [595, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('control 48', {'timer_s': 45, 'events': [[60, 'overlap_occ'], [150, 'berth_occ'], [180, 'overlap_occ'], [180, 'berth_occ'], [270, 'berth_clr'], [275, 'berth_clr'], [275, 'overlap_occ'], [275, 'query']]}, ['locked']), ('control 51', {'timer_s': 90, 'events': [[90, 'berth_occ'], [150, 'berth_clr'], [195, 'query'], [255, 'berth_occ'], [315, 'query'], [320, 'query'], [320, 'overlap_occ'], [440, 'query']]}, ['locked', 'locked', 'locked', 'locked'])]]\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":"124dd7ecb1605fe89cc022c47b211dbe3fb4dd2dfc1baa85ea997ec7e197efa8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    T = x['timer_s']\n    start = None\n    overran = False\n    released = False\n    out = []\n    for t, ev in x['events']:\n        if start is not None and not released and not overran and t - start > T:\n            released = True\n        if ev == 'berth_occ':\n            if start is None:\n                start = t\n        elif ev == 'berth_clr':\n            if not released:\n                start = None\n        elif ev == 'overlap_occ':\n            if not released:\n                overran = True\n        elif ev == 'query':\n            out.append('released' if released else 'locked')\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: expiry exactly on time', {'timer_s': 60, 'events': [[10, 'berth_occ'], [70, 'query']]}, ['released']), ('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('regression: berth clears after release', {'timer_s': 60, 'events': [[0, 'berth_occ'], [60, 'query'], [65, 'berth_clr'], [70, 'query']]}, ['released', 'released']), ('control 24', {'timer_s': 90, 'events': [[30, 'query'], [60, 'berth_occ'], [120, 'overlap_occ'], [210, 'query'], [240, 'berth_clr'], [245, 'berth_occ'], [245, 'query'], [245, 'berth_clr'], [305, 'berth_occ'], [335, 'overlap_occ'], [395, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('regression: track circuit bob restarts nothing', {'timer_s': 60, 'events': [[0, 'berth_occ'], [40, 'berth_occ'], [60, 'query']]}, ['released']), ('control 1', {'timer_s': 45, 'events': [[5, 'overlap_occ'], [35, 'query'], [65, 'berth_clr'], [125, 'query'], [170, 'query'], [170, 'berth_clr'], [230, 'berth_occ'], [350, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('control 4', {'timer_s': 90, 'events': [[60, 'berth_clr'], [150, 'berth_occ'], [155, 'berth_occ'], [155, 'query']]}, ['locked']), ('control 7', {'timer_s': 45, 'events': [[5, 'query'], [65, 'overlap_occ'], [110, 'overlap_occ'], [170, 'query']]}, ['locked', 'locked'])], [('regression: track circuit bob restarts nothing', {'timer_s': 60, 'events': [[0, 'berth_occ'], [40, 'berth_occ'], [60, 'query']]}, ['released']), ('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('sampled regression 33', {'timer_s': 60, 'events': [[60, 'berth_occ'], [60, 'query'], [120, 'query'], [150, 'berth_occ'], [240, 'berth_clr'], [360, 'query']]}, ['locked', 'released', 'released']), ('control 62', {'timer_s': 90, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [75, 'query'], [120, 'query'], [150, 'overlap_occ'], [240, 'query'], [245, 'query'], [365, 'query']]}, ['locked', 'released', 'released', 'released', 'released']), ('regression: train stops at time zero', {'timer_s': 60, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [60, 'query']]}, ['released']), ('control 12', {'timer_s': 120, 'events': [[60, 'berth_occ'], [65, 'query'], [70, 'query'], [70, 'query'], [75, 'berth_occ'], [80, 'berth_occ'], [125, 'berth_clr'], [125, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('control 15', {'timer_s': 120, 'events': [[60, 'berth_clr'], [105, 'berth_clr'], [110, 'berth_clr'], [115, 'berth_clr'], [175, 'query'], [175, 'berth_clr'], [235, 'query'], [265, 'overlap_occ'], [270, 'berth_clr'], [390, 'query']]}, ['locked', 'locked', 'locked']), ('sampled regression 18', {'timer_s': 90, 'events': [[0, 'query'], [0, 'query'], [30, 'berth_occ'], [120, 'overlap_occ'], [210, 'berth_clr'], [215, 'query'], [245, 'berth_occ'], [365, 'query']]}, ['locked', 'locked', 'released', 'released'])], [('regression: train stops at time zero', {'timer_s': 60, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [60, 'query']]}, ['released']), ('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('control 24', {'timer_s': 90, 'events': [[30, 'query'], [60, 'berth_occ'], [120, 'overlap_occ'], [210, 'query'], [240, 'berth_clr'], [245, 'berth_occ'], [245, 'query'], [245, 'berth_clr'], [305, 'berth_occ'], [335, 'overlap_occ'], [395, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('regression: berth clears after release', {'timer_s': 60, 'events': [[0, 'berth_occ'], [60, 'query'], [65, 'berth_clr'], [70, 'query']]}, ['released', 'released']), ('boundary: overrun into the overlap', {'timer_s': 60, 'events': [[0, 'berth_occ'], [20, 'overlap_occ'], [120, 'query']]}, ['locked']), ('control 23', {'timer_s': 45, 'events': [[0, 'query'], [5, 'berth_occ'], [95, 'berth_occ'], [185, 'berth_occ'], [245, 'query']]}, ['locked', 'released']), ('control 26', {'timer_s': 60, 'events': [[30, 'query'], [60, 'query'], [150, 'overlap_occ'], [150, 'query']]}, ['locked', 'locked', 'locked']), ('control 29', {'timer_s': 90, 'events': [[90, 'overlap_occ'], [95, 'query'], [95, 'berth_occ'], [185, 'query'], [230, 'query'], [260, 'query'], [350, 'berth_occ'], [410, 'query']]}, ['locked', 'locked', 'locked', 'locked', 'locked'])], [('regression: berth clears after release', {'timer_s': 60, 'events': [[0, 'berth_occ'], [60, 'query'], [65, 'berth_clr'], [70, 'query']]}, ['released', 'released']), ('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('sampled regression 32', {'timer_s': 90, 'events': [[60, 'berth_occ'], [105, 'berth_clr'], [105, 'berth_occ'], [105, 'query'], [135, 'query'], [195, 'berth_clr'], [255, 'query']]}, ['locked', 'locked', 'released']), ('control 62', {'timer_s': 90, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [75, 'query'], [120, 'query'], [150, 'overlap_occ'], [240, 'query'], [245, 'query'], [365, 'query']]}, ['locked', 'released', 'released', 'released', 'released']), ('regression: expiry after a minute boundary', {'timer_s': 120, 'events': [[30, 'berth_occ'], [140, 'query'], [150, 'query']]}, ['locked', 'released']), ('control 34', {'timer_s': 60, 'events': [[5, 'query'], [35, 'query'], [80, 'berth_occ'], [170, 'berth_occ'], [260, 'berth_occ'], [320, 'berth_occ'], [350, 'overlap_occ'], [395, 'overlap_occ'], [440, 'query'], [500, 'query'], [560, 'query']]}, ['locked', 'locked', 'released', 'released', 'released']), ('control 37', {'timer_s': 120, 'events': [[30, 'query'], [60, 'overlap_occ'], [120, 'berth_occ'], [180, 'overlap_occ'], [185, 'overlap_occ'], [185, 'overlap_occ'], [245, 'query'], [275, 'query'], [280, 'overlap_occ'], [280, 'berth_occ'], [280, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('control 40', {'timer_s': 90, 'events': [[60, 'overlap_occ'], [90, 'query'], [135, 'berth_occ'], [195, 'overlap_occ'], [225, 'berth_occ'], [230, 'berth_clr'], [230, 'query']]}, ['locked', 'locked'])], [('regression: ninety second timer at one minute', {'timer_s': 90, 'events': [[0, 'berth_occ'], [60, 'query'], [89, 'query'], [90, 'query']]}, ['locked', 'locked', 'released']), ('regression: track circuit bob restarts nothing', {'timer_s': 60, 'events': [[0, 'berth_occ'], [40, 'berth_occ'], [60, 'query']]}, ['released']), ('control 24', {'timer_s': 90, 'events': [[30, 'query'], [60, 'berth_occ'], [120, 'overlap_occ'], [210, 'query'], [240, 'berth_clr'], [245, 'berth_occ'], [245, 'query'], [245, 'berth_clr'], [305, 'berth_occ'], [335, 'overlap_occ'], [395, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('regression: expiry exactly on time', {'timer_s': 60, 'events': [[10, 'berth_occ'], [70, 'query']]}, ['released']), ('regression: train stops at time zero', {'timer_s': 60, 'events': [[0, 'berth_occ'], [30, 'berth_occ'], [60, 'query']]}, ['released']), ('control 45', {'timer_s': 60, 'events': [[60, 'query'], [120, 'query'], [150, 'overlap_occ'], [155, 'berth_occ'], [245, 'overlap_occ'], [290, 'berth_occ'], [380, 'berth_clr'], [470, 'overlap_occ'], [470, 'query'], [475, 'berth_occ'], [595, 'query']]}, ['locked', 'locked', 'locked', 'locked']), ('control 48', {'timer_s': 45, 'events': [[60, 'overlap_occ'], [150, 'berth_occ'], [180, 'overlap_occ'], [180, 'berth_occ'], [270, 'berth_clr'], [275, 'berth_clr'], [275, 'overlap_occ'], [275, 'query']]}, ['locked']), ('control 51', {'timer_s': 90, 'events': [[90, 'berth_occ'], [150, 'berth_clr'], [195, 'query'], [255, 'berth_occ'], [315, 'query'], [320, 'query'], [320, 'overlap_occ'], [440, 'query']]}, ['locked', 'locked', 'locked', 'locked'])]]\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-overlap-timed-release-timer-expiry-boundary","generated_at":"2026-09-29T14:47:49.066140+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 elapsed time must strictly exceed the timer.","sha256":"ac8e3dd21325ea8804daa7a7dc081891e3bdc6d47442a5f4d9cb026d4d15b392","title":"Overlap timed release: timer expiry boundary · 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.748,"exit_code":1,"observations":[{"actual":["released"],"check":"regression: expiry exactly on time","expected":["released"],"passed":true},{"actual":["released","released","released"],"check":"regression: ninety second timer at one minute","expected":["locked","locked","released"],"passed":false},{"actual":["released","released"],"check":"regression: berth clears after release","expected":["released","released"],"passed":true},{"actual":["locked","released","released","released"],"check":"control 24","expected":["locked","locked","locked","locked"],"passed":false},{"actual":["released"],"check":"regression: track circuit bob restarts nothing","expected":["released"],"passed":true},{"actual":["locked","locked","locked","locked"],"check":"control 1","expected":["locked","locked","locked","locked"],"passed":true},{"actual":["locked"],"check":"control 4","expected":["locked"],"passed":true},{"actual":["locked","locked"],"check":"control 7","expected":["locked","locked"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: expiry exactly on time\", \"actual\": [\"released\"], \"expected\": [\"released\"], \"passed\": true}, {\"check\": \"regression: ninety second timer at one minute\", \"actual\": [\"released\", \"released\", \"released\"], \"expected\": [\"locked\", \"locked\", \"released\"], \"passed\": false}, {\"check\": \"regression: berth clears after release\", \"actual\": [\"released\", \"released\"], \"expected\": [\"released\", \"released\"], \"passed\": true}, {\"check\": \"control 24\", \"actual\": [\"locked\", \"released\", \"released\", \"released\"], \"expected\": [\"locked\", \"locked\", \"locked\", \"locked\"], \"passed\": false}, {\"check\": \"regression: track circuit bob restarts nothing\", \"actual\": [\"released\"], \"expected\": [\"released\"], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [\"locked\", \"locked\", \"locked\", \"locked\"], \"expected\": [\"locked\", \"locked\", \"locked\", \"locked\"], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [\"locked\"], \"expected\": [\"locked\"], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [\"locked\", \"locked\"], \"expected\": [\"locked\", \"locked\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.764,"exit_code":1,"observations":[{"actual":["locked"],"check":"regression: expiry exactly on time","expected":["released"],"passed":false},{"actual":["locked","locked","locked"],"check":"regression: ninety second timer at one minute","expected":["locked","locked","released"],"passed":false},{"actual":["locked","released"],"check":"regression: berth clears after release","expected":["released","released"],"passed":false},{"actual":["locked","locked","locked","locked"],"check":"control 24","expected":["locked","locked","locked","locked"],"passed":true},{"actual":["locked"],"check":"regression: track circuit bob restarts nothing","expected":["released"],"passed":false},{"actual":["locked","locked","locked","locked"],"check":"control 1","expected":["locked","locked","locked","locked"],"passed":true},{"actual":["locked"],"check":"control 4","expected":["locked"],"passed":true},{"actual":["locked","locked"],"check":"control 7","expected":["locked","locked"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: expiry exactly on time\", \"actual\": [\"locked\"], \"expected\": [\"released\"], \"passed\": false}, {\"check\": \"regression: ninety second timer at one minute\", \"actual\": [\"locked\", \"locked\", \"locked\"], \"expected\": [\"locked\", \"locked\", \"released\"], \"passed\": false}, {\"check\": \"regression: berth clears after release\", \"actual\": [\"locked\", \"released\"], \"expected\": [\"released\", \"released\"], \"passed\": false}, {\"check\": \"control 24\", \"actual\": [\"locked\", \"locked\", \"locked\", \"locked\"], \"expected\": [\"locked\", \"locked\", \"locked\", \"locked\"], \"passed\": true}, {\"check\": \"regression: track circuit bob restarts nothing\", \"actual\": [\"locked\"], \"expected\": [\"released\"], \"passed\": false}, {\"check\": \"control 1\", \"actual\": [\"locked\", \"locked\", \"locked\", \"locked\"], \"expected\": [\"locked\", \"locked\", \"locked\", \"locked\"], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [\"locked\"], \"expected\": [\"locked\"], \"passed\": true}, {\"check\": \"control 7\", \"actual\": [\"locked\", \"locked\"], \"expected\": [\"locked\", \"locked\"], \"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."}}