{"abstract":"A duplicated telegram is accepted as fresh.","category":"Railway interlocking logic","checks":8,"contract":"Telegrams carry an 8-bit sequence number, send and receive times and a CRC flag. A telegram is good if its CRC is valid, 0 <= rx-tx <= max_age_ms and (after the first good one) its sequence advances by 1..3 modulo 256. The link starts in safe state; if more than timeout_ms passes between the last good telegram and a new arrival the link falls back to safe state. Two consecutive good telegrams leave safe state; any bad telegram resets that run. Output [good, safe] per telegram.","evaluation_group":"w2-railway_interlocking_logic-vital-telegram-acceptance","failed_approach":"Accepting only a gap of one leaves no tolerance for lost telegrams.","family":"w2-railway_interlocking_logic-vital-telegram-acceptance-sequence-window","id":"FA-67226","implementations":{"attempt":{"sha256":"f2c7810c5b5403b16cbc96f52008940f13d97e9919205dbd5e1f4c09ad2b80a1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    last = None\n    last_t = None\n    ok_run = 0\n    safe = True\n    out = []\n    for m in x['messages']:\n        t = m['rx_ms']\n        if last_t is not None and t - last_t > x['timeout_ms']:\n            safe = True\n            ok_run = 0\n        good = m['crc'] and 0 <= t - m['tx_ms'] <= x['max_age_ms']\n        if good and last is not None:\n            gap = (m['seq'] - last) % 256\n            good = gap == 1\n        if good:\n            last = m['seq']\n            last_t = t\n            ok_run += 1\n            if ok_run >= 2:\n                safe = False\n        else:\n            ok_run = 0\n        out.append([good, safe])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: two telegrams lost', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 13, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('sampled regression 8', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 0, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}, {'seq': 0, 'rx_ms': 1300, 'tx_ms': 1290, 'crc': True}, {'seq': 3, 'rx_ms': 1400, 'tx_ms': 1100, 'crc': True}, {'seq': 4, 'rx_ms': 3900, 'tx_ms': 3300, 'crc': True}, {'seq': 6, 'rx_ms': 5100, 'tx_ms': 4801, 'crc': True}, {'seq': 6, 'rx_ms': 5600, 'tx_ms': 5000, 'crc': True}, {'seq': 9, 'rx_ms': 8100, 'tx_ms': 7799, 'crc': True}, {'seq': 10, 'rx_ms': 8200, 'tx_ms': 7900, 'crc': True}, {'seq': 10, 'rx_ms': 8400, 'tx_ms': 8420, 'crc': True}]}, [[True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True], [False, True], [False, True]]), ('boundary: stale telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 11, 'rx_ms': 800, 'tx_ms': 400, 'crc': True}, {'seq': 12, 'rx_ms': 900, 'tx_ms': 890, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: sequence wraps past 255', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 254, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 255, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 0, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('control 1', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 2500, 'tx_ms': 2520, 'crc': True}, {'seq': 251, 'rx_ms': 3000, 'tx_ms': 3020, 'crc': True}, {'seq': 253, 'rx_ms': 3100, 'tx_ms': 2500, 'crc': True}, {'seq': 0, 'rx_ms': 3200, 'tx_ms': 2899, 'crc': True}, {'seq': 0, 'rx_ms': 3700, 'tx_ms': 3700, 'crc': True}]}, [[False, True], [False, True], [False, True], [False, True], [True, True]]), ('control 4', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 11, 'rx_ms': 1200, 'tx_ms': 1050, 'crc': True}, {'seq': 13, 'rx_ms': 1300, 'tx_ms': 1000, 'crc': True}, {'seq': 14, 'rx_ms': 1500, 'tx_ms': 1350, 'crc': True}, {'seq': 15, 'rx_ms': 1600, 'tx_ms': 1450, 'crc': False}, {'seq': 16, 'rx_ms': 2100, 'tx_ms': 2100, 'crc': True}, {'seq': 20, 'rx_ms': 2300, 'tx_ms': 2150, 'crc': True}, {'seq': 21, 'rx_ms': 2800, 'tx_ms': 2501, 'crc': True}, {'seq': 22, 'rx_ms': 5300, 'tx_ms': 4999, 'crc': True}, {'seq': 22, 'rx_ms': 5500, 'tx_ms': 5500, 'crc': True}]}, [[True, True], [True, False], [True, False], [False, False], [True, False], [False, False], [False, False], [False, True], [False, True]]), ('sampled regression 7', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 0, 'rx_ms': 200, 'tx_ms': 190, 'crc': False}, {'seq': 3, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}, {'seq': 3, 'rx_ms': 1500, 'tx_ms': 1200, 'crc': True}, {'seq': 3, 'rx_ms': 2700, 'tx_ms': 2400, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: stale telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 11, 'rx_ms': 800, 'tx_ms': 400, 'crc': True}, {'seq': 12, 'rx_ms': 900, 'tx_ms': 890, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('sampled regression 23', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 2500, 'tx_ms': 2199, 'crc': True}, {'seq': 254, 'rx_ms': 3700, 'tx_ms': 3401, 'crc': True}, {'seq': 254, 'rx_ms': 3800, 'tx_ms': 3650, 'crc': True}, {'seq': 254, 'rx_ms': 4000, 'tx_ms': 3699, 'crc': True}, {'seq': 254, 'rx_ms': 6500, 'tx_ms': 6350, 'crc': True}, {'seq': 255, 'rx_ms': 6600, 'tx_ms': 6299, 'crc': True}, {'seq': 255, 'rx_ms': 9100, 'tx_ms': 9120, 'crc': True}, {'seq': 0, 'rx_ms': 11600, 'tx_ms': 11000, 'crc': True}, {'seq': 255, 'rx_ms': 12800, 'tx_ms': 12800, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [False, True], [False, True], [False, True], [False, True], [True, True]]), ('sampled regression 8', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 0, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}, {'seq': 0, 'rx_ms': 1300, 'tx_ms': 1290, 'crc': True}, {'seq': 3, 'rx_ms': 1400, 'tx_ms': 1100, 'crc': True}, {'seq': 4, 'rx_ms': 3900, 'tx_ms': 3300, 'crc': True}, {'seq': 6, 'rx_ms': 5100, 'tx_ms': 4801, 'crc': True}, {'seq': 6, 'rx_ms': 5600, 'tx_ms': 5000, 'crc': True}, {'seq': 9, 'rx_ms': 8100, 'tx_ms': 7799, 'crc': True}, {'seq': 10, 'rx_ms': 8200, 'tx_ms': 7900, 'crc': True}, {'seq': 10, 'rx_ms': 8400, 'tx_ms': 8420, 'crc': True}]}, [[True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True], [False, True], [False, True]]), ('boundary: two telegrams lost', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 13, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('sampled regression 12', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 4, 'rx_ms': 1200, 'tx_ms': 901, 'crc': False}, {'seq': 4, 'rx_ms': 2400, 'tx_ms': 2390, 'crc': True}, {'seq': 4, 'rx_ms': 2500, 'tx_ms': 1900, 'crc': True}, {'seq': 4, 'rx_ms': 3000, 'tx_ms': 2700, 'crc': True}, {'seq': 6, 'rx_ms': 3200, 'tx_ms': 3200, 'crc': True}, {'seq': 4, 'rx_ms': 3300, 'tx_ms': 3300, 'crc': True}, {'seq': 8, 'rx_ms': 3400, 'tx_ms': 3420, 'crc': False}, {'seq': 9, 'rx_ms': 3600, 'tx_ms': 3300, 'crc': True}, {'seq': 9, 'rx_ms': 3800, 'tx_ms': 3501, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [True, True], [False, True], [False, True], [True, True], [False, True]]), ('control 15', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 2, 'rx_ms': 100, 'tx_ms': -200, 'crc': True}, {'seq': 6, 'rx_ms': 2600, 'tx_ms': 2600, 'crc': True}, {'seq': 6, 'rx_ms': 5100, 'tx_ms': 4801, 'crc': True}, {'seq': 6, 'rx_ms': 5200, 'tx_ms': 5050, 'crc': True}, {'seq': 6, 'rx_ms': 7700, 'tx_ms': 7550, 'crc': True}]}, [[True, True], [False, True], [False, True], [False, True], [False, True]]), ('control 18', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 500, 'tx_ms': 201, 'crc': True}, {'seq': 252, 'rx_ms': 3000, 'tx_ms': 2701, 'crc': True}, {'seq': 254, 'rx_ms': 3500, 'tx_ms': 3199, 'crc': True}, {'seq': 254, 'rx_ms': 4000, 'tx_ms': 4020, 'crc': True}, {'seq': 0, 'rx_ms': 4500, 'tx_ms': 4201, 'crc': True}, {'seq': 0, 'rx_ms': 5000, 'tx_ms': 4400, 'crc': True}, {'seq': 4, 'rx_ms': 7500, 'tx_ms': 7199, 'crc': True}]}, [[True, True], [True, True], [False, True], [False, True], [False, True], [False, True], [False, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: corrupt telegram between good ones', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 2, 'rx_ms': 200, 'tx_ms': 190, 'crc': False}, {'seq': 3, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}, {'seq': 4, 'rx_ms': 400, 'tx_ms': 390, 'crc': True}]}, [[True, True], [False, True], [True, True], [True, False]]), ('sampled regression 37', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 1200, 'tx_ms': 899, 'crc': True}, {'seq': 252, 'rx_ms': 1700, 'tx_ms': 1700, 'crc': True}, {'seq': 252, 'rx_ms': 2900, 'tx_ms': 2890, 'crc': True}, {'seq': 252, 'rx_ms': 3000, 'tx_ms': 3000, 'crc': True}, {'seq': 253, 'rx_ms': 3100, 'tx_ms': 2800, 'crc': True}, {'seq': 255, 'rx_ms': 4300, 'tx_ms': 4320, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [True, True], [False, True]]), ('sampled regression 26', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 252, 'rx_ms': 1200, 'tx_ms': 899, 'crc': True}, {'seq': 253, 'rx_ms': 2400, 'tx_ms': 2250, 'crc': True}, {'seq': 254, 'rx_ms': 2900, 'tx_ms': 2890, 'crc': True}, {'seq': 254, 'rx_ms': 4100, 'tx_ms': 4090, 'crc': True}, {'seq': 253, 'rx_ms': 5300, 'tx_ms': 5290, 'crc': True}, {'seq': 0, 'rx_ms': 5400, 'tx_ms': 5390, 'crc': True}, {'seq': 1, 'rx_ms': 5500, 'tx_ms': 5201, 'crc': True}, {'seq': 3, 'rx_ms': 5600, 'tx_ms': 5000, 'crc': False}, {'seq': 2, 'rx_ms': 5700, 'tx_ms': 5720, 'crc': False}, {'seq': 3, 'rx_ms': 5800, 'tx_ms': 5501, 'crc': True}]}, [[False, True], [True, True], [True, False], [False, True], [False, True], [True, True], [True, False], [False, False], [False, False], [True, False]]), ('boundary: telegram from the future', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 150, 'crc': True}, {'seq': 11, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 12, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[False, True], [True, True], [True, False]]), ('sampled regression 23', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 2500, 'tx_ms': 2199, 'crc': True}, {'seq': 254, 'rx_ms': 3700, 'tx_ms': 3401, 'crc': True}, {'seq': 254, 'rx_ms': 3800, 'tx_ms': 3650, 'crc': True}, {'seq': 254, 'rx_ms': 4000, 'tx_ms': 3699, 'crc': True}, {'seq': 254, 'rx_ms': 6500, 'tx_ms': 6350, 'crc': True}, {'seq': 255, 'rx_ms': 6600, 'tx_ms': 6299, 'crc': True}, {'seq': 255, 'rx_ms': 9100, 'tx_ms': 9120, 'crc': True}, {'seq': 0, 'rx_ms': 11600, 'tx_ms': 11000, 'crc': True}, {'seq': 255, 'rx_ms': 12800, 'tx_ms': 12800, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [False, True], [False, True], [False, True], [False, True], [True, True]]), ('control 29', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 255, 'rx_ms': 500, 'tx_ms': -100, 'crc': True}, {'seq': 3, 'rx_ms': 600, 'tx_ms': 600, 'crc': True}, {'seq': 6, 'rx_ms': 3100, 'tx_ms': 3090, 'crc': True}]}, [[False, True], [True, True], [True, True]]), ('control 32', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 4, 'rx_ms': 100, 'tx_ms': -199, 'crc': False}, {'seq': 8, 'rx_ms': 1300, 'tx_ms': 1290, 'crc': True}, {'seq': 11, 'rx_ms': 1500, 'tx_ms': 1199, 'crc': True}, {'seq': 11, 'rx_ms': 2000, 'tx_ms': 2000, 'crc': True}]}, [[False, True], [True, True], [False, True], [True, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: two telegrams lost', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 13, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('sampled regression 55', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 1200, 'tx_ms': 1050, 'crc': False}, {'seq': 3, 'rx_ms': 1300, 'tx_ms': 1320, 'crc': False}, {'seq': 3, 'rx_ms': 1800, 'tx_ms': 1790, 'crc': False}, {'seq': 3, 'rx_ms': 2000, 'tx_ms': 1400, 'crc': True}, {'seq': 1, 'rx_ms': 4500, 'tx_ms': 4520, 'crc': True}, {'seq': 2, 'rx_ms': 4600, 'tx_ms': 4301, 'crc': True}, {'seq': 2, 'rx_ms': 4700, 'tx_ms': 4400, 'crc': True}, {'seq': 3, 'rx_ms': 7200, 'tx_ms': 6901, 'crc': True}, {'seq': 4, 'rx_ms': 9700, 'tx_ms': 9690, 'crc': False}, {'seq': 4, 'rx_ms': 10200, 'tx_ms': 9900, 'crc': False}]}, [[False, True], [False, True], [False, True], [False, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True]]), ('control 36', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 1200, 'tx_ms': 1220, 'crc': True}, {'seq': 13, 'rx_ms': 1300, 'tx_ms': 1150, 'crc': True}, {'seq': 15, 'rx_ms': 1500, 'tx_ms': 1200, 'crc': True}, {'seq': 19, 'rx_ms': 2000, 'tx_ms': 2000, 'crc': True}, {'seq': 19, 'rx_ms': 2200, 'tx_ms': 2200, 'crc': True}, {'seq': 19, 'rx_ms': 4700, 'tx_ms': 4720, 'crc': False}]}, [[False, True], [True, True], [True, False], [False, False], [False, False], [False, True]]), ('boundary: corrupt telegram between good ones', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 2, 'rx_ms': 200, 'tx_ms': 190, 'crc': False}, {'seq': 3, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}, {'seq': 4, 'rx_ms': 400, 'tx_ms': 390, 'crc': True}]}, [[True, True], [False, True], [True, True], [True, False]]), ('sampled regression 34', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 255, 'rx_ms': 1200, 'tx_ms': 901, 'crc': False}, {'seq': 1, 'rx_ms': 1700, 'tx_ms': 1400, 'crc': True}, {'seq': 1, 'rx_ms': 4200, 'tx_ms': 4050, 'crc': True}, {'seq': 2, 'rx_ms': 4300, 'tx_ms': 4320, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True]]), ('sampled regression 37', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 1200, 'tx_ms': 899, 'crc': True}, {'seq': 252, 'rx_ms': 1700, 'tx_ms': 1700, 'crc': True}, {'seq': 252, 'rx_ms': 2900, 'tx_ms': 2890, 'crc': True}, {'seq': 252, 'rx_ms': 3000, 'tx_ms': 3000, 'crc': True}, {'seq': 253, 'rx_ms': 3100, 'tx_ms': 2800, 'crc': True}, {'seq': 255, 'rx_ms': 4300, 'tx_ms': 4320, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [True, True], [False, True]]), ('control 40', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 254, 'rx_ms': 1200, 'tx_ms': 600, 'crc': True}, {'seq': 254, 'rx_ms': 2400, 'tx_ms': 2100, 'crc': True}, {'seq': 254, 'rx_ms': 2500, 'tx_ms': 2490, 'crc': False}]}, [[False, True], [True, True], [False, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: stale telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 11, 'rx_ms': 800, 'tx_ms': 400, 'crc': True}, {'seq': 12, 'rx_ms': 900, 'tx_ms': 890, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('sampled regression 67', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 252, 'rx_ms': 2500, 'tx_ms': 2490, 'crc': True}, {'seq': 252, 'rx_ms': 2700, 'tx_ms': 2720, 'crc': True}, {'seq': 253, 'rx_ms': 2900, 'tx_ms': 2600, 'crc': True}, {'seq': 253, 'rx_ms': 4100, 'tx_ms': 4100, 'crc': True}, {'seq': 255, 'rx_ms': 6600, 'tx_ms': 6301, 'crc': True}, {'seq': 255, 'rx_ms': 9100, 'tx_ms': 8950, 'crc': True}, {'seq': 0, 'rx_ms': 9200, 'tx_ms': 9190, 'crc': True}, {'seq': 4, 'rx_ms': 9400, 'tx_ms': 9100, 'crc': True}, {'seq': 4, 'rx_ms': 11900, 'tx_ms': 11920, 'crc': True}, {'seq': 5, 'rx_ms': 13100, 'tx_ms': 12800, 'crc': False}]}, [[True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True], [False, True]]), ('control 54', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 500, 'tx_ms': 201, 'crc': True}, {'seq': 251, 'rx_ms': 3000, 'tx_ms': 3000, 'crc': True}, {'seq': 252, 'rx_ms': 4200, 'tx_ms': 4200, 'crc': True}, {'seq': 253, 'rx_ms': 4400, 'tx_ms': 3800, 'crc': True}, {'seq': 253, 'rx_ms': 6900, 'tx_ms': 6900, 'crc': True}, {'seq': 255, 'rx_ms': 7100, 'tx_ms': 6950, 'crc': True}]}, [[True, True], [True, True], [True, False], [False, False], [True, True], [True, False]]), ('boundary: timeout exactly reached', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 2, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 3, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('control 45', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 13, 'rx_ms': 200, 'tx_ms': -100, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': -1, 'crc': True}, {'seq': 18, 'rx_ms': 500, 'tx_ms': 201, 'crc': False}, {'seq': 19, 'rx_ms': 3000, 'tx_ms': 3020, 'crc': True}, {'seq': 17, 'rx_ms': 5500, 'tx_ms': 4900, 'crc': True}, {'seq': 16, 'rx_ms': 5700, 'tx_ms': 5401, 'crc': True}]}, [[True, True], [False, True], [False, True], [False, True], [False, True], [True, True]]), ('control 48', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 253, 'rx_ms': 1200, 'tx_ms': 600, 'crc': True}, {'seq': 253, 'rx_ms': 2400, 'tx_ms': 2420, 'crc': True}, {'seq': 254, 'rx_ms': 4900, 'tx_ms': 4300, 'crc': True}, {'seq': 2, 'rx_ms': 5400, 'tx_ms': 5420, 'crc': True}, {'seq': 6, 'rx_ms': 5900, 'tx_ms': 5300, 'crc': True}, {'seq': 6, 'rx_ms': 6000, 'tx_ms': 5400, 'crc': True}, {'seq': 6, 'rx_ms': 8500, 'tx_ms': 8500, 'crc': True}, {'seq': 5, 'rx_ms': 8600, 'tx_ms': 8590, 'crc': True}]}, [[False, True], [False, True], [False, True], [False, True], [False, True], [False, True], [True, True], [False, True]]), ('control 51', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}, {'seq': 252, 'rx_ms': 1400, 'tx_ms': 1099, 'crc': True}, {'seq': 253, 'rx_ms': 1900, 'tx_ms': 1920, 'crc': True}, {'seq': 253, 'rx_ms': 2400, 'tx_ms': 2400, 'crc': True}, {'seq': 254, 'rx_ms': 2600, 'tx_ms': 2301, 'crc': True}, {'seq': 0, 'rx_ms': 3100, 'tx_ms': 2801, 'crc': True}, {'seq': 2, 'rx_ms': 3300, 'tx_ms': 2999, 'crc': True}, {'seq': 3, 'rx_ms': 5800, 'tx_ms': 5499, 'crc': True}, {'seq': 4, 'rx_ms': 5900, 'tx_ms': 5601, 'crc': True}, {'seq': 5, 'rx_ms': 6000, 'tx_ms': 6020, 'crc': False}]}, [[True, True], [False, True], [False, True], [True, True], [True, False], [True, False], [False, False], [False, True], [False, True], [False, True]])]]\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":"bdc8cd25a299ded309ff2b8d513c579fccf59b1cc4b382daa607e296f235ca89","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    last = None\n    last_t = None\n    ok_run = 0\n    safe = True\n    out = []\n    for m in x['messages']:\n        t = m['rx_ms']\n        if last_t is not None and t - last_t > x['timeout_ms']:\n            safe = True\n            ok_run = 0\n        good = m['crc'] and 0 <= t - m['tx_ms'] <= x['max_age_ms']\n        if good and last is not None:\n            gap = (m['seq'] - last) % 256\n            good = 0 <= gap <= 3\n        if good:\n            last = m['seq']\n            last_t = t\n            ok_run += 1\n            if ok_run >= 2:\n                safe = False\n        else:\n            ok_run = 0\n        out.append([good, safe])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: two telegrams lost', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 13, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('sampled regression 8', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 0, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}, {'seq': 0, 'rx_ms': 1300, 'tx_ms': 1290, 'crc': True}, {'seq': 3, 'rx_ms': 1400, 'tx_ms': 1100, 'crc': True}, {'seq': 4, 'rx_ms': 3900, 'tx_ms': 3300, 'crc': True}, {'seq': 6, 'rx_ms': 5100, 'tx_ms': 4801, 'crc': True}, {'seq': 6, 'rx_ms': 5600, 'tx_ms': 5000, 'crc': True}, {'seq': 9, 'rx_ms': 8100, 'tx_ms': 7799, 'crc': True}, {'seq': 10, 'rx_ms': 8200, 'tx_ms': 7900, 'crc': True}, {'seq': 10, 'rx_ms': 8400, 'tx_ms': 8420, 'crc': True}]}, [[True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True], [False, True], [False, True]]), ('boundary: stale telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 11, 'rx_ms': 800, 'tx_ms': 400, 'crc': True}, {'seq': 12, 'rx_ms': 900, 'tx_ms': 890, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: sequence wraps past 255', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 254, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 255, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 0, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('control 1', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 2500, 'tx_ms': 2520, 'crc': True}, {'seq': 251, 'rx_ms': 3000, 'tx_ms': 3020, 'crc': True}, {'seq': 253, 'rx_ms': 3100, 'tx_ms': 2500, 'crc': True}, {'seq': 0, 'rx_ms': 3200, 'tx_ms': 2899, 'crc': True}, {'seq': 0, 'rx_ms': 3700, 'tx_ms': 3700, 'crc': True}]}, [[False, True], [False, True], [False, True], [False, True], [True, True]]), ('control 4', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 11, 'rx_ms': 1200, 'tx_ms': 1050, 'crc': True}, {'seq': 13, 'rx_ms': 1300, 'tx_ms': 1000, 'crc': True}, {'seq': 14, 'rx_ms': 1500, 'tx_ms': 1350, 'crc': True}, {'seq': 15, 'rx_ms': 1600, 'tx_ms': 1450, 'crc': False}, {'seq': 16, 'rx_ms': 2100, 'tx_ms': 2100, 'crc': True}, {'seq': 20, 'rx_ms': 2300, 'tx_ms': 2150, 'crc': True}, {'seq': 21, 'rx_ms': 2800, 'tx_ms': 2501, 'crc': True}, {'seq': 22, 'rx_ms': 5300, 'tx_ms': 4999, 'crc': True}, {'seq': 22, 'rx_ms': 5500, 'tx_ms': 5500, 'crc': True}]}, [[True, True], [True, False], [True, False], [False, False], [True, False], [False, False], [False, False], [False, True], [False, True]]), ('sampled regression 7', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 0, 'rx_ms': 200, 'tx_ms': 190, 'crc': False}, {'seq': 3, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}, {'seq': 3, 'rx_ms': 1500, 'tx_ms': 1200, 'crc': True}, {'seq': 3, 'rx_ms': 2700, 'tx_ms': 2400, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: stale telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 11, 'rx_ms': 800, 'tx_ms': 400, 'crc': True}, {'seq': 12, 'rx_ms': 900, 'tx_ms': 890, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('sampled regression 23', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 2500, 'tx_ms': 2199, 'crc': True}, {'seq': 254, 'rx_ms': 3700, 'tx_ms': 3401, 'crc': True}, {'seq': 254, 'rx_ms': 3800, 'tx_ms': 3650, 'crc': True}, {'seq': 254, 'rx_ms': 4000, 'tx_ms': 3699, 'crc': True}, {'seq': 254, 'rx_ms': 6500, 'tx_ms': 6350, 'crc': True}, {'seq': 255, 'rx_ms': 6600, 'tx_ms': 6299, 'crc': True}, {'seq': 255, 'rx_ms': 9100, 'tx_ms': 9120, 'crc': True}, {'seq': 0, 'rx_ms': 11600, 'tx_ms': 11000, 'crc': True}, {'seq': 255, 'rx_ms': 12800, 'tx_ms': 12800, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [False, True], [False, True], [False, True], [False, True], [True, True]]), ('sampled regression 8', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 0, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}, {'seq': 0, 'rx_ms': 1300, 'tx_ms': 1290, 'crc': True}, {'seq': 3, 'rx_ms': 1400, 'tx_ms': 1100, 'crc': True}, {'seq': 4, 'rx_ms': 3900, 'tx_ms': 3300, 'crc': True}, {'seq': 6, 'rx_ms': 5100, 'tx_ms': 4801, 'crc': True}, {'seq': 6, 'rx_ms': 5600, 'tx_ms': 5000, 'crc': True}, {'seq': 9, 'rx_ms': 8100, 'tx_ms': 7799, 'crc': True}, {'seq': 10, 'rx_ms': 8200, 'tx_ms': 7900, 'crc': True}, {'seq': 10, 'rx_ms': 8400, 'tx_ms': 8420, 'crc': True}]}, [[True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True], [False, True], [False, True]]), ('boundary: two telegrams lost', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 13, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('sampled regression 12', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 4, 'rx_ms': 1200, 'tx_ms': 901, 'crc': False}, {'seq': 4, 'rx_ms': 2400, 'tx_ms': 2390, 'crc': True}, {'seq': 4, 'rx_ms': 2500, 'tx_ms': 1900, 'crc': True}, {'seq': 4, 'rx_ms': 3000, 'tx_ms': 2700, 'crc': True}, {'seq': 6, 'rx_ms': 3200, 'tx_ms': 3200, 'crc': True}, {'seq': 4, 'rx_ms': 3300, 'tx_ms': 3300, 'crc': True}, {'seq': 8, 'rx_ms': 3400, 'tx_ms': 3420, 'crc': False}, {'seq': 9, 'rx_ms': 3600, 'tx_ms': 3300, 'crc': True}, {'seq': 9, 'rx_ms': 3800, 'tx_ms': 3501, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [True, True], [False, True], [False, True], [True, True], [False, True]]), ('control 15', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 2, 'rx_ms': 100, 'tx_ms': -200, 'crc': True}, {'seq': 6, 'rx_ms': 2600, 'tx_ms': 2600, 'crc': True}, {'seq': 6, 'rx_ms': 5100, 'tx_ms': 4801, 'crc': True}, {'seq': 6, 'rx_ms': 5200, 'tx_ms': 5050, 'crc': True}, {'seq': 6, 'rx_ms': 7700, 'tx_ms': 7550, 'crc': True}]}, [[True, True], [False, True], [False, True], [False, True], [False, True]]), ('control 18', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 500, 'tx_ms': 201, 'crc': True}, {'seq': 252, 'rx_ms': 3000, 'tx_ms': 2701, 'crc': True}, {'seq': 254, 'rx_ms': 3500, 'tx_ms': 3199, 'crc': True}, {'seq': 254, 'rx_ms': 4000, 'tx_ms': 4020, 'crc': True}, {'seq': 0, 'rx_ms': 4500, 'tx_ms': 4201, 'crc': True}, {'seq': 0, 'rx_ms': 5000, 'tx_ms': 4400, 'crc': True}, {'seq': 4, 'rx_ms': 7500, 'tx_ms': 7199, 'crc': True}]}, [[True, True], [True, True], [False, True], [False, True], [False, True], [False, True], [False, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: corrupt telegram between good ones', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 2, 'rx_ms': 200, 'tx_ms': 190, 'crc': False}, {'seq': 3, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}, {'seq': 4, 'rx_ms': 400, 'tx_ms': 390, 'crc': True}]}, [[True, True], [False, True], [True, True], [True, False]]), ('sampled regression 37', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 1200, 'tx_ms': 899, 'crc': True}, {'seq': 252, 'rx_ms': 1700, 'tx_ms': 1700, 'crc': True}, {'seq': 252, 'rx_ms': 2900, 'tx_ms': 2890, 'crc': True}, {'seq': 252, 'rx_ms': 3000, 'tx_ms': 3000, 'crc': True}, {'seq': 253, 'rx_ms': 3100, 'tx_ms': 2800, 'crc': True}, {'seq': 255, 'rx_ms': 4300, 'tx_ms': 4320, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [True, True], [False, True]]), ('sampled regression 26', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 252, 'rx_ms': 1200, 'tx_ms': 899, 'crc': True}, {'seq': 253, 'rx_ms': 2400, 'tx_ms': 2250, 'crc': True}, {'seq': 254, 'rx_ms': 2900, 'tx_ms': 2890, 'crc': True}, {'seq': 254, 'rx_ms': 4100, 'tx_ms': 4090, 'crc': True}, {'seq': 253, 'rx_ms': 5300, 'tx_ms': 5290, 'crc': True}, {'seq': 0, 'rx_ms': 5400, 'tx_ms': 5390, 'crc': True}, {'seq': 1, 'rx_ms': 5500, 'tx_ms': 5201, 'crc': True}, {'seq': 3, 'rx_ms': 5600, 'tx_ms': 5000, 'crc': False}, {'seq': 2, 'rx_ms': 5700, 'tx_ms': 5720, 'crc': False}, {'seq': 3, 'rx_ms': 5800, 'tx_ms': 5501, 'crc': True}]}, [[False, True], [True, True], [True, False], [False, True], [False, True], [True, True], [True, False], [False, False], [False, False], [True, False]]), ('boundary: telegram from the future', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 150, 'crc': True}, {'seq': 11, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 12, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[False, True], [True, True], [True, False]]), ('sampled regression 23', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 2500, 'tx_ms': 2199, 'crc': True}, {'seq': 254, 'rx_ms': 3700, 'tx_ms': 3401, 'crc': True}, {'seq': 254, 'rx_ms': 3800, 'tx_ms': 3650, 'crc': True}, {'seq': 254, 'rx_ms': 4000, 'tx_ms': 3699, 'crc': True}, {'seq': 254, 'rx_ms': 6500, 'tx_ms': 6350, 'crc': True}, {'seq': 255, 'rx_ms': 6600, 'tx_ms': 6299, 'crc': True}, {'seq': 255, 'rx_ms': 9100, 'tx_ms': 9120, 'crc': True}, {'seq': 0, 'rx_ms': 11600, 'tx_ms': 11000, 'crc': True}, {'seq': 255, 'rx_ms': 12800, 'tx_ms': 12800, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [False, True], [False, True], [False, True], [False, True], [True, True]]), ('control 29', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 255, 'rx_ms': 500, 'tx_ms': -100, 'crc': True}, {'seq': 3, 'rx_ms': 600, 'tx_ms': 600, 'crc': True}, {'seq': 6, 'rx_ms': 3100, 'tx_ms': 3090, 'crc': True}]}, [[False, True], [True, True], [True, True]]), ('control 32', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 4, 'rx_ms': 100, 'tx_ms': -199, 'crc': False}, {'seq': 8, 'rx_ms': 1300, 'tx_ms': 1290, 'crc': True}, {'seq': 11, 'rx_ms': 1500, 'tx_ms': 1199, 'crc': True}, {'seq': 11, 'rx_ms': 2000, 'tx_ms': 2000, 'crc': True}]}, [[False, True], [True, True], [False, True], [True, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: two telegrams lost', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 13, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('sampled regression 55', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 1200, 'tx_ms': 1050, 'crc': False}, {'seq': 3, 'rx_ms': 1300, 'tx_ms': 1320, 'crc': False}, {'seq': 3, 'rx_ms': 1800, 'tx_ms': 1790, 'crc': False}, {'seq': 3, 'rx_ms': 2000, 'tx_ms': 1400, 'crc': True}, {'seq': 1, 'rx_ms': 4500, 'tx_ms': 4520, 'crc': True}, {'seq': 2, 'rx_ms': 4600, 'tx_ms': 4301, 'crc': True}, {'seq': 2, 'rx_ms': 4700, 'tx_ms': 4400, 'crc': True}, {'seq': 3, 'rx_ms': 7200, 'tx_ms': 6901, 'crc': True}, {'seq': 4, 'rx_ms': 9700, 'tx_ms': 9690, 'crc': False}, {'seq': 4, 'rx_ms': 10200, 'tx_ms': 9900, 'crc': False}]}, [[False, True], [False, True], [False, True], [False, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True]]), ('control 36', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 1200, 'tx_ms': 1220, 'crc': True}, {'seq': 13, 'rx_ms': 1300, 'tx_ms': 1150, 'crc': True}, {'seq': 15, 'rx_ms': 1500, 'tx_ms': 1200, 'crc': True}, {'seq': 19, 'rx_ms': 2000, 'tx_ms': 2000, 'crc': True}, {'seq': 19, 'rx_ms': 2200, 'tx_ms': 2200, 'crc': True}, {'seq': 19, 'rx_ms': 4700, 'tx_ms': 4720, 'crc': False}]}, [[False, True], [True, True], [True, False], [False, False], [False, False], [False, True]]), ('boundary: corrupt telegram between good ones', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 2, 'rx_ms': 200, 'tx_ms': 190, 'crc': False}, {'seq': 3, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}, {'seq': 4, 'rx_ms': 400, 'tx_ms': 390, 'crc': True}]}, [[True, True], [False, True], [True, True], [True, False]]), ('sampled regression 34', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 255, 'rx_ms': 1200, 'tx_ms': 901, 'crc': False}, {'seq': 1, 'rx_ms': 1700, 'tx_ms': 1400, 'crc': True}, {'seq': 1, 'rx_ms': 4200, 'tx_ms': 4050, 'crc': True}, {'seq': 2, 'rx_ms': 4300, 'tx_ms': 4320, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True]]), ('sampled regression 37', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 1200, 'tx_ms': 899, 'crc': True}, {'seq': 252, 'rx_ms': 1700, 'tx_ms': 1700, 'crc': True}, {'seq': 252, 'rx_ms': 2900, 'tx_ms': 2890, 'crc': True}, {'seq': 252, 'rx_ms': 3000, 'tx_ms': 3000, 'crc': True}, {'seq': 253, 'rx_ms': 3100, 'tx_ms': 2800, 'crc': True}, {'seq': 255, 'rx_ms': 4300, 'tx_ms': 4320, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [True, True], [False, True]]), ('control 40', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 254, 'rx_ms': 1200, 'tx_ms': 600, 'crc': True}, {'seq': 254, 'rx_ms': 2400, 'tx_ms': 2100, 'crc': True}, {'seq': 254, 'rx_ms': 2500, 'tx_ms': 2490, 'crc': False}]}, [[False, True], [True, True], [False, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: stale telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 11, 'rx_ms': 800, 'tx_ms': 400, 'crc': True}, {'seq': 12, 'rx_ms': 900, 'tx_ms': 890, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('sampled regression 67', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 252, 'rx_ms': 2500, 'tx_ms': 2490, 'crc': True}, {'seq': 252, 'rx_ms': 2700, 'tx_ms': 2720, 'crc': True}, {'seq': 253, 'rx_ms': 2900, 'tx_ms': 2600, 'crc': True}, {'seq': 253, 'rx_ms': 4100, 'tx_ms': 4100, 'crc': True}, {'seq': 255, 'rx_ms': 6600, 'tx_ms': 6301, 'crc': True}, {'seq': 255, 'rx_ms': 9100, 'tx_ms': 8950, 'crc': True}, {'seq': 0, 'rx_ms': 9200, 'tx_ms': 9190, 'crc': True}, {'seq': 4, 'rx_ms': 9400, 'tx_ms': 9100, 'crc': True}, {'seq': 4, 'rx_ms': 11900, 'tx_ms': 11920, 'crc': True}, {'seq': 5, 'rx_ms': 13100, 'tx_ms': 12800, 'crc': False}]}, [[True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True], [False, True]]), ('control 54', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 500, 'tx_ms': 201, 'crc': True}, {'seq': 251, 'rx_ms': 3000, 'tx_ms': 3000, 'crc': True}, {'seq': 252, 'rx_ms': 4200, 'tx_ms': 4200, 'crc': True}, {'seq': 253, 'rx_ms': 4400, 'tx_ms': 3800, 'crc': True}, {'seq': 253, 'rx_ms': 6900, 'tx_ms': 6900, 'crc': True}, {'seq': 255, 'rx_ms': 7100, 'tx_ms': 6950, 'crc': True}]}, [[True, True], [True, True], [True, False], [False, False], [True, True], [True, False]]), ('boundary: timeout exactly reached', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 2, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 3, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('control 45', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 13, 'rx_ms': 200, 'tx_ms': -100, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': -1, 'crc': True}, {'seq': 18, 'rx_ms': 500, 'tx_ms': 201, 'crc': False}, {'seq': 19, 'rx_ms': 3000, 'tx_ms': 3020, 'crc': True}, {'seq': 17, 'rx_ms': 5500, 'tx_ms': 4900, 'crc': True}, {'seq': 16, 'rx_ms': 5700, 'tx_ms': 5401, 'crc': True}]}, [[True, True], [False, True], [False, True], [False, True], [False, True], [True, True]]), ('control 48', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 253, 'rx_ms': 1200, 'tx_ms': 600, 'crc': True}, {'seq': 253, 'rx_ms': 2400, 'tx_ms': 2420, 'crc': True}, {'seq': 254, 'rx_ms': 4900, 'tx_ms': 4300, 'crc': True}, {'seq': 2, 'rx_ms': 5400, 'tx_ms': 5420, 'crc': True}, {'seq': 6, 'rx_ms': 5900, 'tx_ms': 5300, 'crc': True}, {'seq': 6, 'rx_ms': 6000, 'tx_ms': 5400, 'crc': True}, {'seq': 6, 'rx_ms': 8500, 'tx_ms': 8500, 'crc': True}, {'seq': 5, 'rx_ms': 8600, 'tx_ms': 8590, 'crc': True}]}, [[False, True], [False, True], [False, True], [False, True], [False, True], [False, True], [True, True], [False, True]]), ('control 51', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}, {'seq': 252, 'rx_ms': 1400, 'tx_ms': 1099, 'crc': True}, {'seq': 253, 'rx_ms': 1900, 'tx_ms': 1920, 'crc': True}, {'seq': 253, 'rx_ms': 2400, 'tx_ms': 2400, 'crc': True}, {'seq': 254, 'rx_ms': 2600, 'tx_ms': 2301, 'crc': True}, {'seq': 0, 'rx_ms': 3100, 'tx_ms': 2801, 'crc': True}, {'seq': 2, 'rx_ms': 3300, 'tx_ms': 2999, 'crc': True}, {'seq': 3, 'rx_ms': 5800, 'tx_ms': 5499, 'crc': True}, {'seq': 4, 'rx_ms': 5900, 'tx_ms': 5601, 'crc': True}, {'seq': 5, 'rx_ms': 6000, 'tx_ms': 6020, 'crc': False}]}, [[True, True], [False, True], [False, True], [True, True], [True, False], [True, False], [False, False], [False, True], [False, True], [False, True]])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"73b69e9464d8c08715e966f29513234983c33ddcd446a2abf6d4bd939311de4f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    last = None\n    last_t = None\n    ok_run = 0\n    safe = True\n    out = []\n    for m in x['messages']:\n        t = m['rx_ms']\n        if last_t is not None and t - last_t > x['timeout_ms']:\n            safe = True\n            ok_run = 0\n        good = m['crc'] and 0 <= t - m['tx_ms'] <= x['max_age_ms']\n        if good and last is not None:\n            gap = (m['seq'] - last) % 256\n            good = 1 <= gap <= 3\n        if good:\n            last = m['seq']\n            last_t = t\n            ok_run += 1\n            if ok_run >= 2:\n                safe = False\n        else:\n            ok_run = 0\n        out.append([good, safe])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: two telegrams lost', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 13, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('sampled regression 8', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 0, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}, {'seq': 0, 'rx_ms': 1300, 'tx_ms': 1290, 'crc': True}, {'seq': 3, 'rx_ms': 1400, 'tx_ms': 1100, 'crc': True}, {'seq': 4, 'rx_ms': 3900, 'tx_ms': 3300, 'crc': True}, {'seq': 6, 'rx_ms': 5100, 'tx_ms': 4801, 'crc': True}, {'seq': 6, 'rx_ms': 5600, 'tx_ms': 5000, 'crc': True}, {'seq': 9, 'rx_ms': 8100, 'tx_ms': 7799, 'crc': True}, {'seq': 10, 'rx_ms': 8200, 'tx_ms': 7900, 'crc': True}, {'seq': 10, 'rx_ms': 8400, 'tx_ms': 8420, 'crc': True}]}, [[True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True], [False, True], [False, True]]), ('boundary: stale telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 11, 'rx_ms': 800, 'tx_ms': 400, 'crc': True}, {'seq': 12, 'rx_ms': 900, 'tx_ms': 890, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: sequence wraps past 255', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 254, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 255, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 0, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('control 1', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 2500, 'tx_ms': 2520, 'crc': True}, {'seq': 251, 'rx_ms': 3000, 'tx_ms': 3020, 'crc': True}, {'seq': 253, 'rx_ms': 3100, 'tx_ms': 2500, 'crc': True}, {'seq': 0, 'rx_ms': 3200, 'tx_ms': 2899, 'crc': True}, {'seq': 0, 'rx_ms': 3700, 'tx_ms': 3700, 'crc': True}]}, [[False, True], [False, True], [False, True], [False, True], [True, True]]), ('control 4', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 11, 'rx_ms': 1200, 'tx_ms': 1050, 'crc': True}, {'seq': 13, 'rx_ms': 1300, 'tx_ms': 1000, 'crc': True}, {'seq': 14, 'rx_ms': 1500, 'tx_ms': 1350, 'crc': True}, {'seq': 15, 'rx_ms': 1600, 'tx_ms': 1450, 'crc': False}, {'seq': 16, 'rx_ms': 2100, 'tx_ms': 2100, 'crc': True}, {'seq': 20, 'rx_ms': 2300, 'tx_ms': 2150, 'crc': True}, {'seq': 21, 'rx_ms': 2800, 'tx_ms': 2501, 'crc': True}, {'seq': 22, 'rx_ms': 5300, 'tx_ms': 4999, 'crc': True}, {'seq': 22, 'rx_ms': 5500, 'tx_ms': 5500, 'crc': True}]}, [[True, True], [True, False], [True, False], [False, False], [True, False], [False, False], [False, False], [False, True], [False, True]]), ('sampled regression 7', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 0, 'rx_ms': 200, 'tx_ms': 190, 'crc': False}, {'seq': 3, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}, {'seq': 3, 'rx_ms': 1500, 'tx_ms': 1200, 'crc': True}, {'seq': 3, 'rx_ms': 2700, 'tx_ms': 2400, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: stale telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 11, 'rx_ms': 800, 'tx_ms': 400, 'crc': True}, {'seq': 12, 'rx_ms': 900, 'tx_ms': 890, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('sampled regression 23', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 2500, 'tx_ms': 2199, 'crc': True}, {'seq': 254, 'rx_ms': 3700, 'tx_ms': 3401, 'crc': True}, {'seq': 254, 'rx_ms': 3800, 'tx_ms': 3650, 'crc': True}, {'seq': 254, 'rx_ms': 4000, 'tx_ms': 3699, 'crc': True}, {'seq': 254, 'rx_ms': 6500, 'tx_ms': 6350, 'crc': True}, {'seq': 255, 'rx_ms': 6600, 'tx_ms': 6299, 'crc': True}, {'seq': 255, 'rx_ms': 9100, 'tx_ms': 9120, 'crc': True}, {'seq': 0, 'rx_ms': 11600, 'tx_ms': 11000, 'crc': True}, {'seq': 255, 'rx_ms': 12800, 'tx_ms': 12800, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [False, True], [False, True], [False, True], [False, True], [True, True]]), ('sampled regression 8', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 0, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}, {'seq': 0, 'rx_ms': 1300, 'tx_ms': 1290, 'crc': True}, {'seq': 3, 'rx_ms': 1400, 'tx_ms': 1100, 'crc': True}, {'seq': 4, 'rx_ms': 3900, 'tx_ms': 3300, 'crc': True}, {'seq': 6, 'rx_ms': 5100, 'tx_ms': 4801, 'crc': True}, {'seq': 6, 'rx_ms': 5600, 'tx_ms': 5000, 'crc': True}, {'seq': 9, 'rx_ms': 8100, 'tx_ms': 7799, 'crc': True}, {'seq': 10, 'rx_ms': 8200, 'tx_ms': 7900, 'crc': True}, {'seq': 10, 'rx_ms': 8400, 'tx_ms': 8420, 'crc': True}]}, [[True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True], [False, True], [False, True]]), ('boundary: two telegrams lost', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 13, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('sampled regression 12', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 4, 'rx_ms': 1200, 'tx_ms': 901, 'crc': False}, {'seq': 4, 'rx_ms': 2400, 'tx_ms': 2390, 'crc': True}, {'seq': 4, 'rx_ms': 2500, 'tx_ms': 1900, 'crc': True}, {'seq': 4, 'rx_ms': 3000, 'tx_ms': 2700, 'crc': True}, {'seq': 6, 'rx_ms': 3200, 'tx_ms': 3200, 'crc': True}, {'seq': 4, 'rx_ms': 3300, 'tx_ms': 3300, 'crc': True}, {'seq': 8, 'rx_ms': 3400, 'tx_ms': 3420, 'crc': False}, {'seq': 9, 'rx_ms': 3600, 'tx_ms': 3300, 'crc': True}, {'seq': 9, 'rx_ms': 3800, 'tx_ms': 3501, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [True, True], [False, True], [False, True], [True, True], [False, True]]), ('control 15', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 2, 'rx_ms': 100, 'tx_ms': -200, 'crc': True}, {'seq': 6, 'rx_ms': 2600, 'tx_ms': 2600, 'crc': True}, {'seq': 6, 'rx_ms': 5100, 'tx_ms': 4801, 'crc': True}, {'seq': 6, 'rx_ms': 5200, 'tx_ms': 5050, 'crc': True}, {'seq': 6, 'rx_ms': 7700, 'tx_ms': 7550, 'crc': True}]}, [[True, True], [False, True], [False, True], [False, True], [False, True]]), ('control 18', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 500, 'tx_ms': 201, 'crc': True}, {'seq': 252, 'rx_ms': 3000, 'tx_ms': 2701, 'crc': True}, {'seq': 254, 'rx_ms': 3500, 'tx_ms': 3199, 'crc': True}, {'seq': 254, 'rx_ms': 4000, 'tx_ms': 4020, 'crc': True}, {'seq': 0, 'rx_ms': 4500, 'tx_ms': 4201, 'crc': True}, {'seq': 0, 'rx_ms': 5000, 'tx_ms': 4400, 'crc': True}, {'seq': 4, 'rx_ms': 7500, 'tx_ms': 7199, 'crc': True}]}, [[True, True], [True, True], [False, True], [False, True], [False, True], [False, True], [False, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: corrupt telegram between good ones', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 2, 'rx_ms': 200, 'tx_ms': 190, 'crc': False}, {'seq': 3, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}, {'seq': 4, 'rx_ms': 400, 'tx_ms': 390, 'crc': True}]}, [[True, True], [False, True], [True, True], [True, False]]), ('sampled regression 37', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 1200, 'tx_ms': 899, 'crc': True}, {'seq': 252, 'rx_ms': 1700, 'tx_ms': 1700, 'crc': True}, {'seq': 252, 'rx_ms': 2900, 'tx_ms': 2890, 'crc': True}, {'seq': 252, 'rx_ms': 3000, 'tx_ms': 3000, 'crc': True}, {'seq': 253, 'rx_ms': 3100, 'tx_ms': 2800, 'crc': True}, {'seq': 255, 'rx_ms': 4300, 'tx_ms': 4320, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [True, True], [False, True]]), ('sampled regression 26', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 252, 'rx_ms': 1200, 'tx_ms': 899, 'crc': True}, {'seq': 253, 'rx_ms': 2400, 'tx_ms': 2250, 'crc': True}, {'seq': 254, 'rx_ms': 2900, 'tx_ms': 2890, 'crc': True}, {'seq': 254, 'rx_ms': 4100, 'tx_ms': 4090, 'crc': True}, {'seq': 253, 'rx_ms': 5300, 'tx_ms': 5290, 'crc': True}, {'seq': 0, 'rx_ms': 5400, 'tx_ms': 5390, 'crc': True}, {'seq': 1, 'rx_ms': 5500, 'tx_ms': 5201, 'crc': True}, {'seq': 3, 'rx_ms': 5600, 'tx_ms': 5000, 'crc': False}, {'seq': 2, 'rx_ms': 5700, 'tx_ms': 5720, 'crc': False}, {'seq': 3, 'rx_ms': 5800, 'tx_ms': 5501, 'crc': True}]}, [[False, True], [True, True], [True, False], [False, True], [False, True], [True, True], [True, False], [False, False], [False, False], [True, False]]), ('boundary: telegram from the future', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 150, 'crc': True}, {'seq': 11, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 12, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[False, True], [True, True], [True, False]]), ('sampled regression 23', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 2500, 'tx_ms': 2199, 'crc': True}, {'seq': 254, 'rx_ms': 3700, 'tx_ms': 3401, 'crc': True}, {'seq': 254, 'rx_ms': 3800, 'tx_ms': 3650, 'crc': True}, {'seq': 254, 'rx_ms': 4000, 'tx_ms': 3699, 'crc': True}, {'seq': 254, 'rx_ms': 6500, 'tx_ms': 6350, 'crc': True}, {'seq': 255, 'rx_ms': 6600, 'tx_ms': 6299, 'crc': True}, {'seq': 255, 'rx_ms': 9100, 'tx_ms': 9120, 'crc': True}, {'seq': 0, 'rx_ms': 11600, 'tx_ms': 11000, 'crc': True}, {'seq': 255, 'rx_ms': 12800, 'tx_ms': 12800, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [False, True], [False, True], [False, True], [False, True], [True, True]]), ('control 29', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 255, 'rx_ms': 500, 'tx_ms': -100, 'crc': True}, {'seq': 3, 'rx_ms': 600, 'tx_ms': 600, 'crc': True}, {'seq': 6, 'rx_ms': 3100, 'tx_ms': 3090, 'crc': True}]}, [[False, True], [True, True], [True, True]]), ('control 32', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 4, 'rx_ms': 100, 'tx_ms': -199, 'crc': False}, {'seq': 8, 'rx_ms': 1300, 'tx_ms': 1290, 'crc': True}, {'seq': 11, 'rx_ms': 1500, 'tx_ms': 1199, 'crc': True}, {'seq': 11, 'rx_ms': 2000, 'tx_ms': 2000, 'crc': True}]}, [[False, True], [True, True], [False, True], [True, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: two telegrams lost', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 13, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('sampled regression 55', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 1200, 'tx_ms': 1050, 'crc': False}, {'seq': 3, 'rx_ms': 1300, 'tx_ms': 1320, 'crc': False}, {'seq': 3, 'rx_ms': 1800, 'tx_ms': 1790, 'crc': False}, {'seq': 3, 'rx_ms': 2000, 'tx_ms': 1400, 'crc': True}, {'seq': 1, 'rx_ms': 4500, 'tx_ms': 4520, 'crc': True}, {'seq': 2, 'rx_ms': 4600, 'tx_ms': 4301, 'crc': True}, {'seq': 2, 'rx_ms': 4700, 'tx_ms': 4400, 'crc': True}, {'seq': 3, 'rx_ms': 7200, 'tx_ms': 6901, 'crc': True}, {'seq': 4, 'rx_ms': 9700, 'tx_ms': 9690, 'crc': False}, {'seq': 4, 'rx_ms': 10200, 'tx_ms': 9900, 'crc': False}]}, [[False, True], [False, True], [False, True], [False, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True]]), ('control 36', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 1200, 'tx_ms': 1220, 'crc': True}, {'seq': 13, 'rx_ms': 1300, 'tx_ms': 1150, 'crc': True}, {'seq': 15, 'rx_ms': 1500, 'tx_ms': 1200, 'crc': True}, {'seq': 19, 'rx_ms': 2000, 'tx_ms': 2000, 'crc': True}, {'seq': 19, 'rx_ms': 2200, 'tx_ms': 2200, 'crc': True}, {'seq': 19, 'rx_ms': 4700, 'tx_ms': 4720, 'crc': False}]}, [[False, True], [True, True], [True, False], [False, False], [False, False], [False, True]]), ('boundary: corrupt telegram between good ones', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 2, 'rx_ms': 200, 'tx_ms': 190, 'crc': False}, {'seq': 3, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}, {'seq': 4, 'rx_ms': 400, 'tx_ms': 390, 'crc': True}]}, [[True, True], [False, True], [True, True], [True, False]]), ('sampled regression 34', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 255, 'rx_ms': 1200, 'tx_ms': 901, 'crc': False}, {'seq': 1, 'rx_ms': 1700, 'tx_ms': 1400, 'crc': True}, {'seq': 1, 'rx_ms': 4200, 'tx_ms': 4050, 'crc': True}, {'seq': 2, 'rx_ms': 4300, 'tx_ms': 4320, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True]]), ('sampled regression 37', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 1200, 'tx_ms': 899, 'crc': True}, {'seq': 252, 'rx_ms': 1700, 'tx_ms': 1700, 'crc': True}, {'seq': 252, 'rx_ms': 2900, 'tx_ms': 2890, 'crc': True}, {'seq': 252, 'rx_ms': 3000, 'tx_ms': 3000, 'crc': True}, {'seq': 253, 'rx_ms': 3100, 'tx_ms': 2800, 'crc': True}, {'seq': 255, 'rx_ms': 4300, 'tx_ms': 4320, 'crc': True}]}, [[False, True], [True, True], [False, True], [False, True], [True, True], [False, True]]), ('control 40', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 254, 'rx_ms': 1200, 'tx_ms': 600, 'crc': True}, {'seq': 254, 'rx_ms': 2400, 'tx_ms': 2100, 'crc': True}, {'seq': 254, 'rx_ms': 2500, 'tx_ms': 2490, 'crc': False}]}, [[False, True], [True, True], [False, True]])], [('regression: duplicate telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 10, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 11, 'rx_ms': 300, 'tx_ms': 290, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('boundary: stale telegram', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 10, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 11, 'rx_ms': 800, 'tx_ms': 400, 'crc': True}, {'seq': 12, 'rx_ms': 900, 'tx_ms': 890, 'crc': True}]}, [[True, True], [False, True], [True, True]]), ('sampled regression 67', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 252, 'rx_ms': 2500, 'tx_ms': 2490, 'crc': True}, {'seq': 252, 'rx_ms': 2700, 'tx_ms': 2720, 'crc': True}, {'seq': 253, 'rx_ms': 2900, 'tx_ms': 2600, 'crc': True}, {'seq': 253, 'rx_ms': 4100, 'tx_ms': 4100, 'crc': True}, {'seq': 255, 'rx_ms': 6600, 'tx_ms': 6301, 'crc': True}, {'seq': 255, 'rx_ms': 9100, 'tx_ms': 8950, 'crc': True}, {'seq': 0, 'rx_ms': 9200, 'tx_ms': 9190, 'crc': True}, {'seq': 4, 'rx_ms': 9400, 'tx_ms': 9100, 'crc': True}, {'seq': 4, 'rx_ms': 11900, 'tx_ms': 11920, 'crc': True}, {'seq': 5, 'rx_ms': 13100, 'tx_ms': 12800, 'crc': False}]}, [[True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [True, True], [False, True], [False, True], [False, True]]), ('control 54', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 250, 'rx_ms': 500, 'tx_ms': 201, 'crc': True}, {'seq': 251, 'rx_ms': 3000, 'tx_ms': 3000, 'crc': True}, {'seq': 252, 'rx_ms': 4200, 'tx_ms': 4200, 'crc': True}, {'seq': 253, 'rx_ms': 4400, 'tx_ms': 3800, 'crc': True}, {'seq': 253, 'rx_ms': 6900, 'tx_ms': 6900, 'crc': True}, {'seq': 255, 'rx_ms': 7100, 'tx_ms': 6950, 'crc': True}]}, [[True, True], [True, True], [True, False], [False, False], [True, True], [True, False]]), ('boundary: timeout exactly reached', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 1, 'rx_ms': 100, 'tx_ms': 90, 'crc': True}, {'seq': 2, 'rx_ms': 200, 'tx_ms': 190, 'crc': True}, {'seq': 3, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}]}, [[True, True], [True, False], [True, False]]), ('control 45', {'timeout_ms': 2000, 'max_age_ms': 300, 'messages': [{'seq': 13, 'rx_ms': 200, 'tx_ms': -100, 'crc': True}, {'seq': 14, 'rx_ms': 300, 'tx_ms': -1, 'crc': True}, {'seq': 18, 'rx_ms': 500, 'tx_ms': 201, 'crc': False}, {'seq': 19, 'rx_ms': 3000, 'tx_ms': 3020, 'crc': True}, {'seq': 17, 'rx_ms': 5500, 'tx_ms': 4900, 'crc': True}, {'seq': 16, 'rx_ms': 5700, 'tx_ms': 5401, 'crc': True}]}, [[True, True], [False, True], [False, True], [False, True], [False, True], [True, True]]), ('control 48', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 253, 'rx_ms': 1200, 'tx_ms': 600, 'crc': True}, {'seq': 253, 'rx_ms': 2400, 'tx_ms': 2420, 'crc': True}, {'seq': 254, 'rx_ms': 4900, 'tx_ms': 4300, 'crc': True}, {'seq': 2, 'rx_ms': 5400, 'tx_ms': 5420, 'crc': True}, {'seq': 6, 'rx_ms': 5900, 'tx_ms': 5300, 'crc': True}, {'seq': 6, 'rx_ms': 6000, 'tx_ms': 5400, 'crc': True}, {'seq': 6, 'rx_ms': 8500, 'tx_ms': 8500, 'crc': True}, {'seq': 5, 'rx_ms': 8600, 'tx_ms': 8590, 'crc': True}]}, [[False, True], [False, True], [False, True], [False, True], [False, True], [False, True], [True, True], [False, True]]), ('control 51', {'timeout_ms': 1000, 'max_age_ms': 300, 'messages': [{'seq': 251, 'rx_ms': 1200, 'tx_ms': 1190, 'crc': True}, {'seq': 252, 'rx_ms': 1400, 'tx_ms': 1099, 'crc': True}, {'seq': 253, 'rx_ms': 1900, 'tx_ms': 1920, 'crc': True}, {'seq': 253, 'rx_ms': 2400, 'tx_ms': 2400, 'crc': True}, {'seq': 254, 'rx_ms': 2600, 'tx_ms': 2301, 'crc': True}, {'seq': 0, 'rx_ms': 3100, 'tx_ms': 2801, 'crc': True}, {'seq': 2, 'rx_ms': 3300, 'tx_ms': 2999, 'crc': True}, {'seq': 3, 'rx_ms': 5800, 'tx_ms': 5499, 'crc': True}, {'seq': 4, 'rx_ms': 5900, 'tx_ms': 5601, 'crc': True}, {'seq': 5, 'rx_ms': 6000, 'tx_ms': 6020, 'crc': False}]}, [[True, True], [False, True], [False, True], [True, True], [True, False], [True, False], [False, False], [False, True], [False, True], [False, True]])]]\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-vital-telegram-acceptance-sequence-window","generated_at":"2026-09-29T14:47:50.886629+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Interlocking logic decides whether trains may be given authority; a wrong decision at this point either grants unsafe movements or strands traffic.","repair":"Accept forward gaps of 1 to 3.","root_cause":"A zero gap (same sequence number) is inside the window.","sha256":"a08ac79e228974cc6b58cf0b707ca80f34f9e30ac9d65852c075b67b46d783ce","title":"Vital telegram acceptance: sequence window · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.428,"exit_code":1,"observations":[{"actual":[[true,true],[false,true],[true,true]],"check":"regression: duplicate telegram","expected":[[true,true],[false,true],[true,true]],"passed":true},{"actual":[[true,true],[false,true],[false,true]],"check":"boundary: two telegrams lost","expected":[[true,true],[true,false],[true,false]],"passed":false},{"actual":[[true,true],[false,true],[false,true],[false,true],[false,true],[false,true],[false,true],[false,true],[false,true]],"check":"sampled regression 8","expected":[[true,true],[false,true],[true,true],[false,true],[true,true],[false,true],[false,true],[false,true],[false,true]],"passed":false},{"actual":[[true,true],[false,true],[false,true]],"check":"boundary: stale telegram","expected":[[true,true],[false,true],[true,true]],"passed":false},{"actual":[[true,true],[true,false],[true,false]],"check":"boundary: sequence wraps past 255","expected":[[true,true],[true,false],[true,false]],"passed":true},{"actual":[[false,true],[false,true],[false,true],[false,true],[true,true]],"check":"control 1","expected":[[false,true],[false,true],[false,true],[false,true],[true,true]],"passed":true},{"actual":[[true,true],[false,true],[false,true],[false,true],[false,true],[false,true],[false,true],[false,true],[false,true]],"check":"control 4","expected":[[true,true],[true,false],[true,false],[false,false],[true,false],[false,false],[false,false],[false,true],[false,true]],"passed":false},{"actual":[[false,true],[true,true],[false,true],[false,true]],"check":"sampled regression 7","expected":[[false,true],[true,true],[false,true],[false,true]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: duplicate telegram\", \"actual\": [[true, true], [false, true], [true, true]], \"expected\": [[true, true], [false, true], [true, true]], \"passed\": true}, {\"check\": \"boundary: two telegrams lost\", \"actual\": [[true, true], [false, true], [false, true]], \"expected\": [[true, true], [true, false], [true, false]], \"passed\": false}, {\"check\": \"sampled regression 8\", \"actual\": [[true, true], [false, true], [false, true], [false, true], [false, true], [false, true], [false, true], [false, true], [false, true]], \"expected\": [[true, true], [false, true], [true, true], [false, true], [true, true], [false, true], [false, true], [false, true], [false, true]], \"passed\": false}, {\"check\": \"boundary: stale telegram\", \"actual\": [[true, true], [false, true], [false, true]], \"expected\": [[true, true], [false, true], [true, true]], \"passed\": false}, {\"check\": \"boundary: sequence wraps past 255\", \"actual\": [[true, true], [true, false], [true, false]], \"expected\": [[true, true], [true, false], [true, false]], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [[false, true], [false, true], [false, true], [false, true], [true, true]], \"expected\": [[false, true], [false, true], [false, true], [false, true], [true, true]], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [[true, true], [false, true], [false, true], [false, true], [false, true], [false, true], [false, true], [false, true], [false, true]], \"expected\": [[true, true], [true, false], [true, false], [false, false], [true, false], [false, false], [false, false], [false, true], [false, true]], \"passed\": false}, {\"check\": \"sampled regression 7\", \"actual\": [[false, true], [true, true], [false, true], [false, true]], \"expected\": [[false, true], [true, true], [false, true], [false, true]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.496,"exit_code":1,"observations":[{"actual":[[true,true],[true,false],[true,false]],"check":"regression: duplicate telegram","expected":[[true,true],[false,true],[true,true]],"passed":false},{"actual":[[true,true],[true,false],[true,false]],"check":"boundary: two telegrams lost","expected":[[true,true],[true,false],[true,false]],"passed":true},{"actual":[[true,true],[true,false],[true,false],[false,true],[true,true],[false,true],[false,true],[false,true],[false,true]],"check":"sampled regression 8","expected":[[true,true],[false,true],[true,true],[false,true],[true,true],[false,true],[false,true],[false,true],[false,true]],"passed":false},{"actual":[[true,true],[false,true],[true,true]],"check":"boundary: stale telegram","expected":[[true,true],[false,true],[true,true]],"passed":true},{"actual":[[true,true],[true,false],[true,false]],"check":"boundary: sequence wraps past 255","expected":[[true,true],[true,false],[true,false]],"passed":true},{"actual":[[false,true],[false,true],[false,true],[false,true],[true,true]],"check":"control 1","expected":[[false,true],[false,true],[false,true],[false,true],[true,true]],"passed":true},{"actual":[[true,true],[true,false],[true,false],[false,false],[true,false],[false,false],[false,false],[false,true],[false,true]],"check":"control 4","expected":[[true,true],[true,false],[true,false],[false,false],[true,false],[false,false],[false,false],[false,true],[false,true]],"passed":true},{"actual":[[false,true],[true,true],[true,false],[true,false]],"check":"sampled regression 7","expected":[[false,true],[true,true],[false,true],[false,true]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: duplicate telegram\", \"actual\": [[true, true], [true, false], [true, false]], \"expected\": [[true, true], [false, true], [true, true]], \"passed\": false}, {\"check\": \"boundary: two telegrams lost\", \"actual\": [[true, true], [true, false], [true, false]], \"expected\": [[true, true], [true, false], [true, false]], \"passed\": true}, {\"check\": \"sampled regression 8\", \"actual\": [[true, true], [true, false], [true, false], [false, true], [true, true], [false, true], [false, true], [false, true], [false, true]], \"expected\": [[true, true], [false, true], [true, true], [false, true], [true, true], [false, true], [false, true], [false, true], [false, true]], \"passed\": false}, {\"check\": \"boundary: stale telegram\", \"actual\": [[true, true], [false, true], [true, true]], \"expected\": [[true, true], [false, true], [true, true]], \"passed\": true}, {\"check\": \"boundary: sequence wraps past 255\", \"actual\": [[true, true], [true, false], [true, false]], \"expected\": [[true, true], [true, false], [true, false]], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [[false, true], [false, true], [false, true], [false, true], [true, true]], \"expected\": [[false, true], [false, true], [false, true], [false, true], [true, true]], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [[true, true], [true, false], [true, false], [false, false], [true, false], [false, false], [false, false], [false, true], [false, true]], \"expected\": [[true, true], [true, false], [true, false], [false, false], [true, false], [false, false], [false, false], [false, true], [false, true]], \"passed\": true}, {\"check\": \"sampled regression 7\", \"actual\": [[false, true], [true, true], [true, false], [true, false]], \"expected\": [[false, true], [true, true], [false, true], [false, true]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.011,"exit_code":0,"observations":[{"actual":[[true,true],[false,true],[true,true]],"check":"regression: duplicate telegram","expected":[[true,true],[false,true],[true,true]],"passed":true},{"actual":[[true,true],[true,false],[true,false]],"check":"boundary: two telegrams lost","expected":[[true,true],[true,false],[true,false]],"passed":true},{"actual":[[true,true],[false,true],[true,true],[false,true],[true,true],[false,true],[false,true],[false,true],[false,true]],"check":"sampled regression 8","expected":[[true,true],[false,true],[true,true],[false,true],[true,true],[false,true],[false,true],[false,true],[false,true]],"passed":true},{"actual":[[true,true],[false,true],[true,true]],"check":"boundary: stale telegram","expected":[[true,true],[false,true],[true,true]],"passed":true},{"actual":[[true,true],[true,false],[true,false]],"check":"boundary: sequence wraps past 255","expected":[[true,true],[true,false],[true,false]],"passed":true},{"actual":[[false,true],[false,true],[false,true],[false,true],[true,true]],"check":"control 1","expected":[[false,true],[false,true],[false,true],[false,true],[true,true]],"passed":true},{"actual":[[true,true],[true,false],[true,false],[false,false],[true,false],[false,false],[false,false],[false,true],[false,true]],"check":"control 4","expected":[[true,true],[true,false],[true,false],[false,false],[true,false],[false,false],[false,false],[false,true],[false,true]],"passed":true},{"actual":[[false,true],[true,true],[false,true],[false,true]],"check":"sampled regression 7","expected":[[false,true],[true,true],[false,true],[false,true]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: duplicate telegram\", \"actual\": [[true, true], [false, true], [true, true]], \"expected\": [[true, true], [false, true], [true, true]], \"passed\": true}, {\"check\": \"boundary: two telegrams lost\", \"actual\": [[true, true], [true, false], [true, false]], \"expected\": [[true, true], [true, false], [true, false]], \"passed\": true}, {\"check\": \"sampled regression 8\", \"actual\": [[true, true], [false, true], [true, true], [false, true], [true, true], [false, true], [false, true], [false, true], [false, true]], \"expected\": [[true, true], [false, true], [true, true], [false, true], [true, true], [false, true], [false, true], [false, true], [false, true]], \"passed\": true}, {\"check\": \"boundary: stale telegram\", \"actual\": [[true, true], [false, true], [true, true]], \"expected\": [[true, true], [false, true], [true, true]], \"passed\": true}, {\"check\": \"boundary: sequence wraps past 255\", \"actual\": [[true, true], [true, false], [true, false]], \"expected\": [[true, true], [true, false], [true, false]], \"passed\": true}, {\"check\": \"control 1\", \"actual\": [[false, true], [false, true], [false, true], [false, true], [true, true]], \"expected\": [[false, true], [false, true], [false, true], [false, true], [true, true]], \"passed\": true}, {\"check\": \"control 4\", \"actual\": [[true, true], [true, false], [true, false], [false, false], [true, false], [false, false], [false, false], [false, true], [false, true]], \"expected\": [[true, true], [true, false], [true, false], [false, false], [true, false], [false, false], [false, false], [false, true], [false, true]], \"passed\": true}, {\"check\": \"sampled regression 7\", \"actual\": [[false, true], [true, true], [false, true], [false, true]], \"expected\": [[false, true], [true, true], [false, true], [false, true]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}