{"abstract":"Dual-ring barrier sequencing returns a wrong result when lead-lag is keyed on the second phase of the pair.","category":"Traffic signal timing plans","checks":8,"contract":"Input {ring1: [[1,d],[2,d],[3,d],[4,d]], ring2: [[5,d],[6,d],[7,d],[8,d]] with durations including clearance, calls, lag}. Phases 1-2/5-6 are left of the barrier and 3-4/7-8 right of it. On each side both rings start together at the barrier; if the first phase of a ring's pair is in lag the pair is swapped. Phases without calls are skipped and take no time. Both rings cross a barrier together when the slower ring finishes. Return {starts: sorted [phase, start], cycle}.","contract_signature":"x","evaluation_group":"w2-traffic_signal_timing_plans-ring-barrier","failed_approach":"Checking either phase only on the left side ignores lag settings on the right of the barrier.","family":"w2-traffic_signal_timing_plans-ring-barrier-lead-lag","id":"FA-68121","implementations":{"attempt":{"sha256":"e491b37705ca3fcbb3098c12cadd67bc1ae09985041137d7b3732c673c3b7e19","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    calls = set(x['calls'])\n    lag = set(x['lag'])\n    t0 = 0\n    starts = []\n    for side in (0, 1):\n        ends = []\n        for ring in (x['ring1'], x['ring2']):\n            pair = ring[2 * side:2 * side + 2]\n            if any(p in lag for p, _ in pair) and side == 0:\n                pair = [pair[1], pair[0]]\n            t = t0\n            for ph, dur in pair:\n                if ph in calls:\n                    starts.append([ph, t])\n                    t += dur\n            ends.append(t)\n        t0 = max(ends)\n    return {'starts': sorted(starts), 'cycle': t0}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'ring1': [[1, 29], [2, 20], [3, 11], [4, 24]], 'ring2': [[5, 27], [6, 10], [7, 13], [8, 10]], 'calls': [1, 2, 3, 4, 6, 7], 'lag': [5]}, {'starts': [[1, 0], [2, 29], [3, 49], [4, 60], [6, 0], [7, 49]], 'cycle': 84}), ({'ring1': [[1, 34], [2, 24], [3, 27], [4, 40]], 'ring2': [[5, 32], [6, 23], [7, 20], [8, 25]], 'calls': [2, 4, 5, 6, 8], 'lag': [1, 6, 7]}, {'starts': [[2, 0], [4, 55], [5, 0], [6, 32], [8, 55]], 'cycle': 95}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 14], [2, 11], [3, 27], [4, 39]], 'ring2': [[5, 34], [6, 26], [7, 10], [8, 39]], 'calls': [1, 2, 4, 5, 6, 7, 8], 'lag': [3, 7, 8]}, {'starts': [[1, 0], [2, 14], [4, 60], [5, 0], [6, 34], [7, 99], [8, 60]], 'cycle': 109}), ({'ring1': [[1, 31], [2, 8], [3, 38], [4, 22]], 'ring2': [[5, 32], [6, 9], [7, 12], [8, 36]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 8], [2, 0], [3, 41], [4, 79], [5, 0], [6, 32], [7, 41], [8, 53]], 'cycle': 101}), ({'ring1': [[1, 30], [2, 18], [3, 13], [4, 16]], 'ring2': [[5, 8], [6, 17], [7, 18], [8, 12]], 'calls': [3, 4, 6, 7, 8], 'lag': [1, 6]}, {'starts': [[3, 17], [4, 30], [6, 0], [7, 17], [8, 35]], 'cycle': 47}), ({'ring1': [[1, 13], [2, 29], [3, 19], [4, 40]], 'ring2': [[5, 20], [6, 14], [7, 40], [8, 21]], 'calls': [1, 2, 3, 4, 6, 7, 8], 'lag': [1, 5, 6]}, {'starts': [[1, 29], [2, 0], [3, 42], [4, 61], [6, 0], [7, 42], [8, 82]], 'cycle': 103})], [({'ring1': [[1, 40], [2, 36], [3, 35], [4, 14]], 'ring2': [[5, 13], [6, 30], [7, 27], [8, 28]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1, 2, 4, 5]}, {'starts': [[1, 36], [2, 0], [3, 76], [4, 111], [5, 30], [6, 0], [7, 76], [8, 103]], 'cycle': 131}), ({'ring1': [[1, 19], [2, 30], [3, 26], [4, 8]], 'ring2': [[5, 32], [6, 24], [7, 25], [8, 14]], 'calls': [1, 2, 3, 6, 7], 'lag': [3]}, {'starts': [[1, 0], [2, 19], [3, 49], [6, 0], [7, 49]], 'cycle': 75}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 35], [2, 14], [3, 39], [4, 40]], 'ring2': [[5, 26], [6, 37], [7, 22], [8, 14]], 'calls': [1, 2, 3, 4, 5, 8], 'lag': [7]}, {'starts': [[1, 0], [2, 35], [3, 49], [4, 88], [5, 0], [8, 49]], 'cycle': 128}), ({'ring1': [[1, 15], [2, 10], [3, 17], [4, 24]], 'ring2': [[5, 20], [6, 38], [7, 19], [8, 34]], 'calls': [2, 5, 6, 7, 8], 'lag': [2, 4, 5, 7, 8]}, {'starts': [[2, 0], [5, 38], [6, 0], [7, 92], [8, 58]], 'cycle': 111}), ({'ring1': [[1, 28], [2, 40], [3, 10], [4, 17]], 'ring2': [[5, 35], [6, 17], [7, 26], [8, 38]], 'calls': [1, 3, 5, 7, 8], 'lag': [1]}, {'starts': [[1, 0], [3, 35], [5, 0], [7, 35], [8, 61]], 'cycle': 99}), ({'ring1': [[1, 21], [2, 21], [3, 33], [4, 12]], 'ring2': [[5, 40], [6, 10], [7, 11], [8, 26]], 'calls': [1, 3, 4, 5, 6, 7, 8], 'lag': [3, 5]}, {'starts': [[1, 0], [3, 62], [4, 50], [5, 10], [6, 0], [7, 50], [8, 61]], 'cycle': 95})], [({'ring1': [[1, 21], [2, 14], [3, 14], [4, 24]], 'ring2': [[5, 15], [6, 12], [7, 13], [8, 16]], 'calls': [1, 2, 3, 5, 6, 7, 8], 'lag': [3, 6]}, {'starts': [[1, 0], [2, 21], [3, 35], [5, 0], [6, 15], [7, 35], [8, 48]], 'cycle': 64}), ({'ring1': [[1, 32], [2, 32], [3, 26], [4, 19]], 'ring2': [[5, 31], [6, 11], [7, 36], [8, 12]], 'calls': [1, 2, 3, 4, 5, 8], 'lag': [1, 7]}, {'starts': [[1, 32], [2, 0], [3, 64], [4, 90], [5, 0], [8, 64]], 'cycle': 109}), ({'ring1': [[1, 18], [2, 16], [3, 17], [4, 37]], 'ring2': [[5, 27], [6, 13], [7, 20], [8, 14]], 'calls': [1, 3, 5, 8], 'lag': [1, 2, 3, 5]}, {'starts': [[1, 0], [3, 27], [5, 0], [8, 27]], 'cycle': 44}), ({'ring1': [[1, 17], [2, 35], [3, 31], [4, 27]], 'ring2': [[5, 38], [6, 35], [7, 13], [8, 38]], 'calls': [2, 3, 4, 6, 7], 'lag': [7]}, {'starts': [[2, 0], [3, 35], [4, 66], [6, 0], [7, 35]], 'cycle': 93}), ({'ring1': [[1, 9], [2, 27], [3, 15], [4, 27]], 'ring2': [[5, 32], [6, 8], [7, 8], [8, 38]], 'calls': [2, 3, 4, 6, 7, 8], 'lag': [2]}, {'starts': [[2, 0], [3, 27], [4, 42], [6, 0], [7, 27], [8, 35]], 'cycle': 73}), ({'ring1': [[1, 21], [2, 12], [3, 28], [4, 27]], 'ring2': [[5, 20], [6, 25], [7, 40], [8, 40]], 'calls': [2, 3, 5, 6, 7, 8], 'lag': [4, 6, 7]}, {'starts': [[2, 0], [3, 45], [5, 0], [6, 20], [7, 85], [8, 45]], 'cycle': 125}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84})], [({'ring1': [[1, 40], [2, 32], [3, 40], [4, 35]], 'ring2': [[5, 28], [6, 35], [7, 36], [8, 38]], 'calls': [2, 3, 4, 8], 'lag': [1, 4]}, {'starts': [[2, 0], [3, 32], [4, 72], [8, 32]], 'cycle': 107}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 13], [2, 29], [3, 36], [4, 38]], 'ring2': [[5, 27], [6, 17], [7, 40], [8, 37]], 'calls': [2, 3, 4, 5, 6, 7, 8], 'lag': [1, 2, 5, 8]}, {'starts': [[2, 0], [3, 44], [4, 80], [5, 17], [6, 0], [7, 44], [8, 84]], 'cycle': 121}), ({'ring1': [[1, 32], [2, 27], [3, 14], [4, 40]], 'ring2': [[5, 23], [6, 10], [7, 15], [8, 25]], 'calls': [2, 5, 6, 7, 8], 'lag': [2, 3, 5, 6, 7]}, {'starts': [[2, 0], [5, 10], [6, 0], [7, 58], [8, 33]], 'cycle': 73}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 15], [3, 22], [4, 16]], 'ring2': [[5, 22], [6, 13], [7, 27], [8, 13]], 'calls': [1, 5, 6, 8], 'lag': []}, {'starts': [[1, 0], [5, 0], [6, 22], [8, 35]], 'cycle': 48}), ({'ring1': [[1, 25], [2, 35], [3, 33], [4, 17]], 'ring2': [[5, 26], [6, 22], [7, 37], [8, 17]], 'calls': [2, 3, 4, 7], 'lag': [3, 4, 7]}, {'starts': [[2, 0], [3, 52], [4, 35], [7, 35]], 'cycle': 85}), ({'ring1': [[1, 38], [2, 29], [3, 12], [4, 27]], 'ring2': [[5, 10], [6, 27], [7, 27], [8, 30]], 'calls': [2, 3, 4, 5, 7], 'lag': []}, {'starts': [[2, 0], [3, 29], [4, 41], [5, 0], [7, 29]], 'cycle': 68})], [({'ring1': [[1, 12], [2, 35], [3, 13], [4, 35]], 'ring2': [[5, 24], [6, 14], [7, 30], [8, 13]], 'calls': [1, 2, 3, 4, 6, 7, 8], 'lag': [1, 2, 3, 5, 8]}, {'starts': [[1, 35], [2, 0], [3, 82], [4, 47], [6, 0], [7, 47], [8, 77]], 'cycle': 95}), ({'ring1': [[1, 8], [2, 22], [3, 23], [4, 38]], 'ring2': [[5, 16], [6, 33], [7, 19], [8, 20]], 'calls': [1, 2, 3, 5, 6], 'lag': [1]}, {'starts': [[1, 22], [2, 0], [3, 49], [5, 0], [6, 16]], 'cycle': 72}), ({'ring1': [[1, 37], [2, 39], [3, 21], [4, 29]], 'ring2': [[5, 19], [6, 18], [7, 40], [8, 26]], 'calls': [1, 2, 5, 6, 7, 8], 'lag': [3]}, {'starts': [[1, 0], [2, 37], [5, 0], [6, 19], [7, 76], [8, 116]], 'cycle': 142}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 18], [2, 17], [3, 14], [4, 27]], 'ring2': [[5, 19], [6, 11], [7, 39], [8, 22]], 'calls': [1, 2, 3, 6, 8], 'lag': [3, 7]}, {'starts': [[1, 0], [2, 18], [3, 35], [6, 0], [8, 35]], 'cycle': 57}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 26], [2, 20], [3, 13], [4, 19]], 'ring2': [[5, 14], [6, 19], [7, 22], [8, 13]], 'calls': [3, 4, 5, 7], 'lag': [1, 4, 5]}, {'starts': [[3, 14], [4, 27], [5, 0], [7, 14]], 'cycle': 46}), ({'ring1': [[1, 8], [2, 18], [3, 20], [4, 27]], 'ring2': [[5, 16], [6, 16], [7, 28], [8, 16]], 'calls': [1, 2, 3, 4, 5, 6, 7], 'lag': [2]}, {'starts': [[1, 0], [2, 8], [3, 32], [4, 52], [5, 0], [6, 16], [7, 32]], 'cycle': 79})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, 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":"da007bae0b1da42bb77132e542367a1b691b95388f70cf56bece2c5b8e55777f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    calls = set(x['calls'])\n    lag = set(x['lag'])\n    t0 = 0\n    starts = []\n    for side in (0, 1):\n        ends = []\n        for ring in (x['ring1'], x['ring2']):\n            pair = ring[2 * side:2 * side + 2]\n            if pair[1][0] in lag:\n                pair = [pair[1], pair[0]]\n            t = t0\n            for ph, dur in pair:\n                if ph in calls:\n                    starts.append([ph, t])\n                    t += dur\n            ends.append(t)\n        t0 = max(ends)\n    return {'starts': sorted(starts), 'cycle': t0}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'ring1': [[1, 29], [2, 20], [3, 11], [4, 24]], 'ring2': [[5, 27], [6, 10], [7, 13], [8, 10]], 'calls': [1, 2, 3, 4, 6, 7], 'lag': [5]}, {'starts': [[1, 0], [2, 29], [3, 49], [4, 60], [6, 0], [7, 49]], 'cycle': 84}), ({'ring1': [[1, 34], [2, 24], [3, 27], [4, 40]], 'ring2': [[5, 32], [6, 23], [7, 20], [8, 25]], 'calls': [2, 4, 5, 6, 8], 'lag': [1, 6, 7]}, {'starts': [[2, 0], [4, 55], [5, 0], [6, 32], [8, 55]], 'cycle': 95}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 14], [2, 11], [3, 27], [4, 39]], 'ring2': [[5, 34], [6, 26], [7, 10], [8, 39]], 'calls': [1, 2, 4, 5, 6, 7, 8], 'lag': [3, 7, 8]}, {'starts': [[1, 0], [2, 14], [4, 60], [5, 0], [6, 34], [7, 99], [8, 60]], 'cycle': 109}), ({'ring1': [[1, 31], [2, 8], [3, 38], [4, 22]], 'ring2': [[5, 32], [6, 9], [7, 12], [8, 36]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1, 4]}, {'starts': [[1, 8], [2, 0], [3, 41], [4, 79], [5, 0], [6, 32], [7, 41], [8, 53]], 'cycle': 101}), ({'ring1': [[1, 30], [2, 18], [3, 13], [4, 16]], 'ring2': [[5, 8], [6, 17], [7, 18], [8, 12]], 'calls': [3, 4, 6, 7, 8], 'lag': [1, 6]}, {'starts': [[3, 17], [4, 30], [6, 0], [7, 17], [8, 35]], 'cycle': 47}), ({'ring1': [[1, 13], [2, 29], [3, 19], [4, 40]], 'ring2': [[5, 20], [6, 14], [7, 40], [8, 21]], 'calls': [1, 2, 3, 4, 6, 7, 8], 'lag': [1, 5, 6]}, {'starts': [[1, 29], [2, 0], [3, 42], [4, 61], [6, 0], [7, 42], [8, 82]], 'cycle': 103})], [({'ring1': [[1, 40], [2, 36], [3, 35], [4, 14]], 'ring2': [[5, 13], [6, 30], [7, 27], [8, 28]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1, 2, 4, 5]}, {'starts': [[1, 36], [2, 0], [3, 76], [4, 111], [5, 30], [6, 0], [7, 76], [8, 103]], 'cycle': 131}), ({'ring1': [[1, 19], [2, 30], [3, 26], [4, 8]], 'ring2': [[5, 32], [6, 24], [7, 25], [8, 14]], 'calls': [1, 2, 3, 6, 7], 'lag': [3]}, {'starts': [[1, 0], [2, 19], [3, 49], [6, 0], [7, 49]], 'cycle': 75}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 35], [2, 14], [3, 39], [4, 40]], 'ring2': [[5, 26], [6, 37], [7, 22], [8, 14]], 'calls': [1, 2, 3, 4, 5, 8], 'lag': [7]}, {'starts': [[1, 0], [2, 35], [3, 49], [4, 88], [5, 0], [8, 49]], 'cycle': 128}), ({'ring1': [[1, 15], [2, 10], [3, 17], [4, 24]], 'ring2': [[5, 20], [6, 38], [7, 19], [8, 34]], 'calls': [2, 5, 6, 7, 8], 'lag': [2, 4, 5, 7, 8]}, {'starts': [[2, 0], [5, 38], [6, 0], [7, 92], [8, 58]], 'cycle': 111}), ({'ring1': [[1, 28], [2, 40], [3, 10], [4, 17]], 'ring2': [[5, 35], [6, 17], [7, 26], [8, 38]], 'calls': [1, 3, 5, 7, 8], 'lag': [1]}, {'starts': [[1, 0], [3, 35], [5, 0], [7, 35], [8, 61]], 'cycle': 99}), ({'ring1': [[1, 21], [2, 21], [3, 33], [4, 12]], 'ring2': [[5, 40], [6, 10], [7, 11], [8, 26]], 'calls': [1, 3, 4, 5, 6, 7, 8], 'lag': [3, 5]}, {'starts': [[1, 0], [3, 62], [4, 50], [5, 10], [6, 0], [7, 50], [8, 61]], 'cycle': 95})], [({'ring1': [[1, 21], [2, 14], [3, 14], [4, 24]], 'ring2': [[5, 15], [6, 12], [7, 13], [8, 16]], 'calls': [1, 2, 3, 5, 6, 7, 8], 'lag': [3, 6]}, {'starts': [[1, 0], [2, 21], [3, 35], [5, 0], [6, 15], [7, 35], [8, 48]], 'cycle': 64}), ({'ring1': [[1, 32], [2, 32], [3, 26], [4, 19]], 'ring2': [[5, 31], [6, 11], [7, 36], [8, 12]], 'calls': [1, 2, 3, 4, 5, 8], 'lag': [1, 7]}, {'starts': [[1, 32], [2, 0], [3, 64], [4, 90], [5, 0], [8, 64]], 'cycle': 109}), ({'ring1': [[1, 18], [2, 16], [3, 17], [4, 37]], 'ring2': [[5, 27], [6, 13], [7, 20], [8, 14]], 'calls': [1, 3, 5, 8], 'lag': [1, 2, 3, 5]}, {'starts': [[1, 0], [3, 27], [5, 0], [8, 27]], 'cycle': 44}), ({'ring1': [[1, 17], [2, 35], [3, 31], [4, 27]], 'ring2': [[5, 38], [6, 35], [7, 13], [8, 38]], 'calls': [2, 3, 4, 6, 7], 'lag': [7]}, {'starts': [[2, 0], [3, 35], [4, 66], [6, 0], [7, 35]], 'cycle': 93}), ({'ring1': [[1, 9], [2, 27], [3, 15], [4, 27]], 'ring2': [[5, 32], [6, 8], [7, 8], [8, 38]], 'calls': [2, 3, 4, 6, 7, 8], 'lag': [2]}, {'starts': [[2, 0], [3, 27], [4, 42], [6, 0], [7, 27], [8, 35]], 'cycle': 73}), ({'ring1': [[1, 21], [2, 12], [3, 28], [4, 27]], 'ring2': [[5, 20], [6, 25], [7, 40], [8, 40]], 'calls': [2, 3, 5, 6, 7, 8], 'lag': [4, 6, 7]}, {'starts': [[2, 0], [3, 45], [5, 0], [6, 20], [7, 85], [8, 45]], 'cycle': 125}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84})], [({'ring1': [[1, 40], [2, 32], [3, 40], [4, 35]], 'ring2': [[5, 28], [6, 35], [7, 36], [8, 38]], 'calls': [2, 3, 4, 8], 'lag': [1, 4]}, {'starts': [[2, 0], [3, 32], [4, 72], [8, 32]], 'cycle': 107}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 13], [2, 29], [3, 36], [4, 38]], 'ring2': [[5, 27], [6, 17], [7, 40], [8, 37]], 'calls': [2, 3, 4, 5, 6, 7, 8], 'lag': [1, 2, 5, 8]}, {'starts': [[2, 0], [3, 44], [4, 80], [5, 17], [6, 0], [7, 44], [8, 84]], 'cycle': 121}), ({'ring1': [[1, 32], [2, 27], [3, 14], [4, 40]], 'ring2': [[5, 23], [6, 10], [7, 15], [8, 25]], 'calls': [2, 5, 6, 7, 8], 'lag': [2, 3, 5, 6, 7]}, {'starts': [[2, 0], [5, 10], [6, 0], [7, 58], [8, 33]], 'cycle': 73}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 12], [2, 15], [3, 22], [4, 16]], 'ring2': [[5, 22], [6, 13], [7, 27], [8, 13]], 'calls': [1, 5, 6, 8], 'lag': []}, {'starts': [[1, 0], [5, 0], [6, 22], [8, 35]], 'cycle': 48}), ({'ring1': [[1, 25], [2, 35], [3, 33], [4, 17]], 'ring2': [[5, 26], [6, 22], [7, 37], [8, 17]], 'calls': [2, 3, 4, 7], 'lag': [3, 4, 7]}, {'starts': [[2, 0], [3, 52], [4, 35], [7, 35]], 'cycle': 85}), ({'ring1': [[1, 38], [2, 29], [3, 12], [4, 27]], 'ring2': [[5, 10], [6, 27], [7, 27], [8, 30]], 'calls': [2, 3, 4, 5, 7], 'lag': []}, {'starts': [[2, 0], [3, 29], [4, 41], [5, 0], [7, 29]], 'cycle': 68})], [({'ring1': [[1, 12], [2, 35], [3, 13], [4, 35]], 'ring2': [[5, 24], [6, 14], [7, 30], [8, 13]], 'calls': [1, 2, 3, 4, 6, 7, 8], 'lag': [1, 2, 3, 5, 8]}, {'starts': [[1, 35], [2, 0], [3, 82], [4, 47], [6, 0], [7, 47], [8, 77]], 'cycle': 95}), ({'ring1': [[1, 8], [2, 22], [3, 23], [4, 38]], 'ring2': [[5, 16], [6, 33], [7, 19], [8, 20]], 'calls': [1, 2, 3, 5, 6], 'lag': [1]}, {'starts': [[1, 22], [2, 0], [3, 49], [5, 0], [6, 16]], 'cycle': 72}), ({'ring1': [[1, 37], [2, 39], [3, 21], [4, 29]], 'ring2': [[5, 19], [6, 18], [7, 40], [8, 26]], 'calls': [1, 2, 5, 6, 7, 8], 'lag': [3]}, {'starts': [[1, 0], [2, 37], [5, 0], [6, 19], [7, 76], [8, 116]], 'cycle': 142}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [1, 2, 3, 4, 5, 6, 7, 8], 'lag': [1]}, {'starts': [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], 'cycle': 84}), ({'ring1': [[1, 18], [2, 17], [3, 14], [4, 27]], 'ring2': [[5, 19], [6, 11], [7, 39], [8, 22]], 'calls': [1, 2, 3, 6, 8], 'lag': [3, 7]}, {'starts': [[1, 0], [2, 18], [3, 35], [6, 0], [8, 35]], 'cycle': 57}), ({'ring1': [[1, 12], [2, 30], [3, 10], [4, 25]], 'ring2': [[5, 15], [6, 20], [7, 12], [8, 30]], 'calls': [2, 4, 6, 7, 8], 'lag': []}, {'starts': [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], 'cycle': 72}), ({'ring1': [[1, 26], [2, 20], [3, 13], [4, 19]], 'ring2': [[5, 14], [6, 19], [7, 22], [8, 13]], 'calls': [3, 4, 5, 7], 'lag': [1, 4, 5]}, {'starts': [[3, 14], [4, 27], [5, 0], [7, 14]], 'cycle': 46}), ({'ring1': [[1, 8], [2, 18], [3, 20], [4, 27]], 'ring2': [[5, 16], [6, 16], [7, 28], [8, 16]], 'calls': [1, 2, 3, 4, 5, 6, 7], 'lag': [2]}, {'starts': [[1, 0], [2, 8], [3, 32], [4, 52], [5, 0], [6, 16], [7, 32]], 'cycle': 79})]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('timing oracle' + ' %d' % i, 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":"A deterministic, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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-traffic_signal_timing_plans-ring-barrier-lead-lag","generated_at":"2026-09-29T14:47:59.187857+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Signal timing arithmetic is exact and integer or rational; a wrong rule silently produces unsafe or inefficient timing plans.","root_cause":"The lag test inspects the second phase, so configured lagging phases keep their default order.","sha256":"597bf2c5345b8ffa1b4660abe95cf12b7b176a5da6502d1830ccf1846293138b","title":"Dual-ring barrier sequencing: lead-lag is keyed on the second phase of the pair · 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":41.594,"exit_code":1,"observations":[{"actual":{"cycle":84,"starts":[[1,0],[2,29],[3,49],[4,60],[6,0],[7,49]]},"check":"timing oracle 0","expected":{"cycle":84,"starts":[[1,0],[2,29],[3,49],[4,60],[6,0],[7,49]]},"passed":true},{"actual":{"cycle":95,"starts":[[2,0],[4,55],[5,23],[6,0],[8,55]]},"check":"timing oracle 1","expected":{"cycle":95,"starts":[[2,0],[4,55],[5,0],[6,32],[8,55]]},"passed":false},{"actual":{"cycle":84,"starts":[[1,30],[2,0],[3,42],[4,52],[5,0],[6,15],[7,42],[8,54]]},"check":"timing oracle 2","expected":{"cycle":84,"starts":[[1,30],[2,0],[3,42],[4,52],[5,0],[6,15],[7,42],[8,54]]},"passed":true},{"actual":{"cycle":72,"starts":[[2,0],[4,30],[6,0],[7,30],[8,42]]},"check":"timing oracle 3","expected":{"cycle":72,"starts":[[2,0],[4,30],[6,0],[7,30],[8,42]]},"passed":true},{"actual":{"cycle":109,"starts":[[1,0],[2,14],[4,60],[5,0],[6,34],[7,60],[8,70]]},"check":"timing oracle 4","expected":{"cycle":109,"starts":[[1,0],[2,14],[4,60],[5,0],[6,34],[7,99],[8,60]]},"passed":false},{"actual":{"cycle":101,"starts":[[1,8],[2,0],[3,41],[4,79],[5,0],[6,32],[7,41],[8,53]]},"check":"timing oracle 5","expected":{"cycle":101,"starts":[[1,8],[2,0],[3,41],[4,79],[5,0],[6,32],[7,41],[8,53]]},"passed":true},{"actual":{"cycle":47,"starts":[[3,17],[4,30],[6,0],[7,17],[8,35]]},"check":"timing oracle 6","expected":{"cycle":47,"starts":[[3,17],[4,30],[6,0],[7,17],[8,35]]},"passed":true},{"actual":{"cycle":103,"starts":[[1,29],[2,0],[3,42],[4,61],[6,0],[7,42],[8,82]]},"check":"timing oracle 7","expected":{"cycle":103,"starts":[[1,29],[2,0],[3,42],[4,61],[6,0],[7,42],[8,82]]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"starts\": [[1, 0], [2, 29], [3, 49], [4, 60], [6, 0], [7, 49]], \"cycle\": 84}, \"expected\": {\"starts\": [[1, 0], [2, 29], [3, 49], [4, 60], [6, 0], [7, 49]], \"cycle\": 84}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"starts\": [[2, 0], [4, 55], [5, 23], [6, 0], [8, 55]], \"cycle\": 95}, \"expected\": {\"starts\": [[2, 0], [4, 55], [5, 0], [6, 32], [8, 55]], \"cycle\": 95}, \"passed\": false}, {\"check\": \"timing oracle 2\", \"actual\": {\"starts\": [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], \"cycle\": 84}, \"expected\": {\"starts\": [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], \"cycle\": 84}, \"passed\": true}, {\"check\": \"timing oracle 3\", \"actual\": {\"starts\": [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], \"cycle\": 72}, \"expected\": {\"starts\": [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], \"cycle\": 72}, \"passed\": true}, {\"check\": \"timing oracle 4\", \"actual\": {\"starts\": [[1, 0], [2, 14], [4, 60], [5, 0], [6, 34], [7, 60], [8, 70]], \"cycle\": 109}, \"expected\": {\"starts\": [[1, 0], [2, 14], [4, 60], [5, 0], [6, 34], [7, 99], [8, 60]], \"cycle\": 109}, \"passed\": false}, {\"check\": \"timing oracle 5\", \"actual\": {\"starts\": [[1, 8], [2, 0], [3, 41], [4, 79], [5, 0], [6, 32], [7, 41], [8, 53]], \"cycle\": 101}, \"expected\": {\"starts\": [[1, 8], [2, 0], [3, 41], [4, 79], [5, 0], [6, 32], [7, 41], [8, 53]], \"cycle\": 101}, \"passed\": true}, {\"check\": \"timing oracle 6\", \"actual\": {\"starts\": [[3, 17], [4, 30], [6, 0], [7, 17], [8, 35]], \"cycle\": 47}, \"expected\": {\"starts\": [[3, 17], [4, 30], [6, 0], [7, 17], [8, 35]], \"cycle\": 47}, \"passed\": true}, {\"check\": \"timing oracle 7\", \"actual\": {\"starts\": [[1, 29], [2, 0], [3, 42], [4, 61], [6, 0], [7, 42], [8, 82]], \"cycle\": 103}, \"expected\": {\"starts\": [[1, 29], [2, 0], [3, 42], [4, 61], [6, 0], [7, 42], [8, 82]], \"cycle\": 103}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.575,"exit_code":1,"observations":[{"actual":{"cycle":84,"starts":[[1,0],[2,29],[3,49],[4,60],[6,0],[7,49]]},"check":"timing oracle 0","expected":{"cycle":84,"starts":[[1,0],[2,29],[3,49],[4,60],[6,0],[7,49]]},"passed":true},{"actual":{"cycle":95,"starts":[[2,0],[4,55],[5,23],[6,0],[8,55]]},"check":"timing oracle 1","expected":{"cycle":95,"starts":[[2,0],[4,55],[5,0],[6,32],[8,55]]},"passed":false},{"actual":{"cycle":84,"starts":[[1,0],[2,12],[3,42],[4,52],[5,0],[6,15],[7,42],[8,54]]},"check":"timing oracle 2","expected":{"cycle":84,"starts":[[1,30],[2,0],[3,42],[4,52],[5,0],[6,15],[7,42],[8,54]]},"passed":false},{"actual":{"cycle":72,"starts":[[2,0],[4,30],[6,0],[7,30],[8,42]]},"check":"timing oracle 3","expected":{"cycle":72,"starts":[[2,0],[4,30],[6,0],[7,30],[8,42]]},"passed":true},{"actual":{"cycle":109,"starts":[[1,0],[2,14],[4,60],[5,0],[6,34],[7,99],[8,60]]},"check":"timing oracle 4","expected":{"cycle":109,"starts":[[1,0],[2,14],[4,60],[5,0],[6,34],[7,99],[8,60]]},"passed":true},{"actual":{"cycle":101,"starts":[[1,0],[2,31],[3,63],[4,41],[5,0],[6,32],[7,41],[8,53]]},"check":"timing oracle 5","expected":{"cycle":101,"starts":[[1,8],[2,0],[3,41],[4,79],[5,0],[6,32],[7,41],[8,53]]},"passed":false},{"actual":{"cycle":47,"starts":[[3,17],[4,30],[6,0],[7,17],[8,35]]},"check":"timing oracle 6","expected":{"cycle":47,"starts":[[3,17],[4,30],[6,0],[7,17],[8,35]]},"passed":true},{"actual":{"cycle":103,"starts":[[1,0],[2,13],[3,42],[4,61],[6,0],[7,42],[8,82]]},"check":"timing oracle 7","expected":{"cycle":103,"starts":[[1,29],[2,0],[3,42],[4,61],[6,0],[7,42],[8,82]]},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"timing oracle 0\", \"actual\": {\"starts\": [[1, 0], [2, 29], [3, 49], [4, 60], [6, 0], [7, 49]], \"cycle\": 84}, \"expected\": {\"starts\": [[1, 0], [2, 29], [3, 49], [4, 60], [6, 0], [7, 49]], \"cycle\": 84}, \"passed\": true}, {\"check\": \"timing oracle 1\", \"actual\": {\"starts\": [[2, 0], [4, 55], [5, 23], [6, 0], [8, 55]], \"cycle\": 95}, \"expected\": {\"starts\": [[2, 0], [4, 55], [5, 0], [6, 32], [8, 55]], \"cycle\": 95}, \"passed\": false}, {\"check\": \"timing oracle 2\", \"actual\": {\"starts\": [[1, 0], [2, 12], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], \"cycle\": 84}, \"expected\": {\"starts\": [[1, 30], [2, 0], [3, 42], [4, 52], [5, 0], [6, 15], [7, 42], [8, 54]], \"cycle\": 84}, \"passed\": false}, {\"check\": \"timing oracle 3\", \"actual\": {\"starts\": [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], \"cycle\": 72}, \"expected\": {\"starts\": [[2, 0], [4, 30], [6, 0], [7, 30], [8, 42]], \"cycle\": 72}, \"passed\": true}, {\"check\": \"timing oracle 4\", \"actual\": {\"starts\": [[1, 0], [2, 14], [4, 60], [5, 0], [6, 34], [7, 99], [8, 60]], \"cycle\": 109}, \"expected\": {\"starts\": [[1, 0], [2, 14], [4, 60], [5, 0], [6, 34], [7, 99], [8, 60]], \"cycle\": 109}, \"passed\": true}, {\"check\": \"timing oracle 5\", \"actual\": {\"starts\": [[1, 0], [2, 31], [3, 63], [4, 41], [5, 0], [6, 32], [7, 41], [8, 53]], \"cycle\": 101}, \"expected\": {\"starts\": [[1, 8], [2, 0], [3, 41], [4, 79], [5, 0], [6, 32], [7, 41], [8, 53]], \"cycle\": 101}, \"passed\": false}, {\"check\": \"timing oracle 6\", \"actual\": {\"starts\": [[3, 17], [4, 30], [6, 0], [7, 17], [8, 35]], \"cycle\": 47}, \"expected\": {\"starts\": [[3, 17], [4, 30], [6, 0], [7, 17], [8, 35]], \"cycle\": 47}, \"passed\": true}, {\"check\": \"timing oracle 7\", \"actual\": {\"starts\": [[1, 0], [2, 13], [3, 42], [4, 61], [6, 0], [7, 42], [8, 82]], \"cycle\": 103}, \"expected\": {\"starts\": [[1, 29], [2, 0], [3, 42], [4, 61], [6, 0], [7, 42], [8, 82]], \"cycle\": 103}, \"passed\": false}], \"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."}}