{"abstract":"While withdrawn, event stale_announce produces usable/install instead of withdrawn/suppress.","category":"Protocols","checks":14,"contract":"For the stipulated Route advertisement lifecycle controller, initialize the explicitly shown resource registers from seed (1..5), then consume classified events sequentially. After each event return a deep snapshot of phase, resource registers, and cumulative emitted control frames. The explicit ten phase/event rules and their resource effects define admission and response semantics. Unlisted events preserve phase and emit rejection. Payload is the consecutive integers seed through 2*seed+1. Empty event input returns no observations.","evaluation_group":"s3-protocols-route_advertise","failed_approach":"The partial repair chooses candidate/check_path, which still violates this phase-specific event contract.","family":"s3-protocols-route_advertise-withdrawn-stale_announce","id":"FA-19211","implementations":{"attempt":{"sha256":"b58a8510f11090ffc397b59018dbd0daee84a79d3993d62fe9548ff6d4c9c7b8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(phase, events, seed):\n    payload = list(range(seed, seed * 2 + 2))\n    r = {'forwarding': ['old'] if phase=='usable' else [], 'advertised': ['old'] if phase=='usable' else [], 'checks': 0, 'liveness': seed, 'withdrawals': 0}\n    frames = []\n    observed = []\n    table = {('unknown', 'announce'): ('candidate', 'check_path'), ('candidate', 'loop_free'): ('usable', 'install'), ('candidate', 'loop_detected'): ('rejected', 'suppress'), ('usable', 'withdraw'): ('withdrawn', 'remove_and_propagate'), ('withdrawn', 'stale_announce'): ('candidate', 'check_path'), ('usable', 'newer_announce'): ('candidate', 'hold_validate'), ('usable', 'neighbor_down'): ('unreachable', 'invalidate'), ('unreachable', 'neighbor_up'): ('unknown', 'request_refresh'), ('rejected', 'corrected_announce'): ('candidate', 'check_path'), ('usable', 'duplicate_announce'): ('usable', 'refresh_liveness')}\n    for event in events:\n        phase, action = table.get((phase, event), (phase, \"reject\"))\n        if action == 'check_path':\n            r['checks']+=1\n        elif action == 'install':\n            r['forwarding']=['candidate']\n        elif action == 'suppress':\n            frames.append(['REJECT_PATH',payload])\n        elif action == 'remove_and_propagate':\n            r['forwarding']=[]; r['advertised']=[]; r['withdrawals']+=1\n        elif action == 'hold_validate':\n            r['checks']+=1\n        elif action == 'invalidate':\n            r['forwarding']=[]; r['advertised']=[]\n        elif action == 'request_refresh':\n            frames.append(['REQUEST_ROUTES',seed])\n        elif action == 'refresh_liveness':\n            r['liveness']=seed+len(payload)\n        elif action == 'advertise_only':\n            r['advertised']=['candidate']\n        elif action == 'advertise':\n            r['advertised']=['candidate']\n        elif action == 'remove_only':\n            r['forwarding']=[]\n        elif action == 'remove_immediately':\n            r['forwarding']=[]; r['checks']+=1\n        elif action == 'install_cached':\n            r['forwarding']=['old']\n        elif action == 'reinstall':\n            r['forwarding']=['candidate']; r['withdrawals']+=1\n        else:\n            if action not in (\"wait\", \"ignore\", \"keep\", \"retain\", \"keep_peer\", \"keep_offer\", \"keep_hold\", \"keep_batch\", \"retain_staging\", \"keep_staging\", \"keep_local_owner\", \"keep_old_session\", \"keep_address\", \"keep_old_expiry\", \"ignore_conflict\", \"keep_service\", \"keep_subscription\", \"retain_shadow\", \"keep_live\", \"keep_suspicion\", \"keep_roles\", \"keep_staged\"):\n                frames.append([action, payload[:]])\n        observed.append(json.loads(json.dumps({\"phase\": phase, \"registers\": r, \"frames\": frames})))\n    return observed\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {1: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 1]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]], ['REJECT_PATH', [1, 2, 3]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [1, 2, 3]], ['REJECT_PATH', [1, 2, 3]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['reject', [1, 2, 3]]]}])], 2: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 2]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 6, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 6, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['reject', [2, 3, 4, 5]]]}])], 3: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 3]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 8, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 8, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['reject', [3, 4, 5, 6, 7]]]}])], 4: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 4]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 10, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 4, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 10, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['reject', [4, 5, 6, 7, 8, 9]]]}])], 5: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 5]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 12, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 4, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 4, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 12, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['reject', [5, 6, 7, 8, 9, 10, 11]]]}])]}\nfor label, phase, events, expected in cases[N]:\n    check(label, solve(phase, events, N), 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":"661d3f85bb54cc72fafdb6d273cc809fecf92d0dc0e82be2ecc31e089d167ca1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(phase, events, seed):\n    payload = list(range(seed, seed * 2 + 2))\n    r = {'forwarding': ['old'] if phase=='usable' else [], 'advertised': ['old'] if phase=='usable' else [], 'checks': 0, 'liveness': seed, 'withdrawals': 0}\n    frames = []\n    observed = []\n    table = {('unknown', 'announce'): ('candidate', 'check_path'), ('candidate', 'loop_free'): ('usable', 'install'), ('candidate', 'loop_detected'): ('rejected', 'suppress'), ('usable', 'withdraw'): ('withdrawn', 'remove_and_propagate'), ('withdrawn', 'stale_announce'): ('usable', 'install'), ('usable', 'newer_announce'): ('candidate', 'hold_validate'), ('usable', 'neighbor_down'): ('unreachable', 'invalidate'), ('unreachable', 'neighbor_up'): ('unknown', 'request_refresh'), ('rejected', 'corrected_announce'): ('candidate', 'check_path'), ('usable', 'duplicate_announce'): ('usable', 'refresh_liveness')}\n    for event in events:\n        phase, action = table.get((phase, event), (phase, \"reject\"))\n        if action == 'check_path':\n            r['checks']+=1\n        elif action == 'install':\n            r['forwarding']=['candidate']\n        elif action == 'suppress':\n            frames.append(['REJECT_PATH',payload])\n        elif action == 'remove_and_propagate':\n            r['forwarding']=[]; r['advertised']=[]; r['withdrawals']+=1\n        elif action == 'hold_validate':\n            r['checks']+=1\n        elif action == 'invalidate':\n            r['forwarding']=[]; r['advertised']=[]\n        elif action == 'request_refresh':\n            frames.append(['REQUEST_ROUTES',seed])\n        elif action == 'refresh_liveness':\n            r['liveness']=seed+len(payload)\n        elif action == 'advertise_only':\n            r['advertised']=['candidate']\n        elif action == 'advertise':\n            r['advertised']=['candidate']\n        elif action == 'remove_only':\n            r['forwarding']=[]\n        elif action == 'remove_immediately':\n            r['forwarding']=[]; r['checks']+=1\n        elif action == 'install_cached':\n            r['forwarding']=['old']\n        elif action == 'reinstall':\n            r['forwarding']=['candidate']; r['withdrawals']+=1\n        else:\n            if action not in (\"wait\", \"ignore\", \"keep\", \"retain\", \"keep_peer\", \"keep_offer\", \"keep_hold\", \"keep_batch\", \"retain_staging\", \"keep_staging\", \"keep_local_owner\", \"keep_old_session\", \"keep_address\", \"keep_old_expiry\", \"ignore_conflict\", \"keep_service\", \"keep_subscription\", \"retain_shadow\", \"keep_live\", \"keep_suspicion\", \"keep_roles\", \"keep_staged\"):\n                frames.append([action, payload[:]])\n        observed.append(json.loads(json.dumps({\"phase\": phase, \"registers\": r, \"frames\": frames})))\n    return observed\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {1: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 1]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]], ['REJECT_PATH', [1, 2, 3]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [1, 2, 3]], ['REJECT_PATH', [1, 2, 3]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['reject', [1, 2, 3]]]}])], 2: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 2]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 6, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 6, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['reject', [2, 3, 4, 5]]]}])], 3: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 3]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 8, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 8, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['reject', [3, 4, 5, 6, 7]]]}])], 4: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 4]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 10, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 4, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 10, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['reject', [4, 5, 6, 7, 8, 9]]]}])], 5: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 5]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 12, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 4, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 4, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 12, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['reject', [5, 6, 7, 8, 9, 10, 11]]]}])]}\nfor label, phase, events, expected in cases[N]:\n    check(label, solve(phase, events, N), 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":"1e07c7d18c0ebf08e8691086828dcba469e173a6155ccd80d0aad32a64831f6b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(phase, events, seed):\n    payload = list(range(seed, seed * 2 + 2))\n    r = {'forwarding': ['old'] if phase=='usable' else [], 'advertised': ['old'] if phase=='usable' else [], 'checks': 0, 'liveness': seed, 'withdrawals': 0}\n    frames = []\n    observed = []\n    table = {('unknown', 'announce'): ('candidate', 'check_path'), ('candidate', 'loop_free'): ('usable', 'install'), ('candidate', 'loop_detected'): ('rejected', 'suppress'), ('usable', 'withdraw'): ('withdrawn', 'remove_and_propagate'), ('withdrawn', 'stale_announce'): ('withdrawn', 'suppress'), ('usable', 'newer_announce'): ('candidate', 'hold_validate'), ('usable', 'neighbor_down'): ('unreachable', 'invalidate'), ('unreachable', 'neighbor_up'): ('unknown', 'request_refresh'), ('rejected', 'corrected_announce'): ('candidate', 'check_path'), ('usable', 'duplicate_announce'): ('usable', 'refresh_liveness')}\n    for event in events:\n        phase, action = table.get((phase, event), (phase, \"reject\"))\n        if action == 'check_path':\n            r['checks']+=1\n        elif action == 'install':\n            r['forwarding']=['candidate']\n        elif action == 'suppress':\n            frames.append(['REJECT_PATH',payload])\n        elif action == 'remove_and_propagate':\n            r['forwarding']=[]; r['advertised']=[]; r['withdrawals']+=1\n        elif action == 'hold_validate':\n            r['checks']+=1\n        elif action == 'invalidate':\n            r['forwarding']=[]; r['advertised']=[]\n        elif action == 'request_refresh':\n            frames.append(['REQUEST_ROUTES',seed])\n        elif action == 'refresh_liveness':\n            r['liveness']=seed+len(payload)\n        elif action == 'advertise_only':\n            r['advertised']=['candidate']\n        elif action == 'advertise':\n            r['advertised']=['candidate']\n        elif action == 'remove_only':\n            r['forwarding']=[]\n        elif action == 'remove_immediately':\n            r['forwarding']=[]; r['checks']+=1\n        elif action == 'install_cached':\n            r['forwarding']=['old']\n        elif action == 'reinstall':\n            r['forwarding']=['candidate']; r['withdrawals']+=1\n        else:\n            if action not in (\"wait\", \"ignore\", \"keep\", \"retain\", \"keep_peer\", \"keep_offer\", \"keep_hold\", \"keep_batch\", \"retain_staging\", \"keep_staging\", \"keep_local_owner\", \"keep_old_session\", \"keep_address\", \"keep_old_expiry\", \"ignore_conflict\", \"keep_service\", \"keep_subscription\", \"retain_shadow\", \"keep_live\", \"keep_suspicion\", \"keep_roles\", \"keep_staged\"):\n                frames.append([action, payload[:]])\n        observed.append(json.loads(json.dumps({\"phase\": phase, \"registers\": r, \"frames\": frames})))\n    return observed\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {1: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 1]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 1, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [1, 2, 3]], ['REJECT_PATH', [1, 2, 3]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [1, 2, 3]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [1, 2, 3]], ['REJECT_PATH', [1, 2, 3]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 1, 'withdrawals': 0}, 'frames': [['reject', [1, 2, 3]]]}])], 2: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 2]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 6, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 2, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 6, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 6, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]], ['REJECT_PATH', [2, 3, 4, 5]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 2, 'withdrawals': 0}, 'frames': [['reject', [2, 3, 4, 5]]]}])], 3: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 3]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 8, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 3, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 8, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 8, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]], ['REJECT_PATH', [3, 4, 5, 6, 7]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 3, 'withdrawals': 0}, 'frames': [['reject', [3, 4, 5, 6, 7]]]}])], 4: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 4]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 10, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 4, 'liveness': 4, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 10, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 10, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]], ['REJECT_PATH', [4, 5, 6, 7, 8, 9]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 4, 'withdrawals': 0}, 'frames': [['reject', [4, 5, 6, 7, 8, 9]]]}])], 5: [('unknown/announce', 'unknown', ['announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_free', 'candidate', ['loop_free'], [{'phase': 'usable', 'registers': {'forwarding': ['candidate'], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('candidate/loop_detected', 'candidate', ['loop_detected'], [{'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('usable/withdraw', 'usable', ['withdraw'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 1}, 'frames': []}]), ('withdrawn/stale_announce', 'withdrawn', ['stale_announce'], [{'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('usable/newer_announce', 'usable', ['newer_announce'], [{'phase': 'candidate', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('usable/neighbor_down', 'usable', ['neighbor_down'], [{'phase': 'unreachable', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('unreachable/neighbor_up', 'unreachable', ['neighbor_up'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REQUEST_ROUTES', 5]]}]), ('rejected/corrected_announce', 'rejected', ['corrected_announce'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}]), ('usable/duplicate_announce', 'usable', ['duplicate_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 12, 'withdrawals': 0}, 'frames': []}]), ('ordered trace 0', 'unknown', ['announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected', 'corrected_announce', 'loop_detected'], [{'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': []}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 1, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 2, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 3, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'candidate', 'registers': {'forwarding': [], 'advertised': [], 'checks': 4, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'rejected', 'registers': {'forwarding': [], 'advertised': [], 'checks': 4, 'liveness': 5, 'withdrawals': 0}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('ordered trace 3', 'usable', ['duplicate_announce', 'withdraw', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce', 'stale_announce'], [{'phase': 'usable', 'registers': {'forwarding': ['old'], 'advertised': ['old'], 'checks': 0, 'liveness': 12, 'withdrawals': 0}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': []}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}, {'phase': 'withdrawn', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 12, 'withdrawals': 1}, 'frames': [['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]], ['REJECT_PATH', [5, 6, 7, 8, 9, 10, 11]]]}]), ('empty input', 'unknown', [], []), ('unknown event', 'unknown', ['unsupported'], [{'phase': 'unknown', 'registers': {'forwarding': [], 'advertised': [], 'checks': 0, 'liveness': 5, 'withdrawals': 0}, 'frames': [['reject', [5, 6, 7, 8, 9, 10, 11]]]}])]}\nfor label, phase, events, expected in cases[N]:\n    check(label, solve(phase, events, N), 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":"Bounded offline control-plane abstraction with prescribed initial registers and classified events. Not a named protocol implementation or conformance test; excludes wire parsing, transport retries, physical execution, authentication, crash persistence, and timing. Related event faults share the full corrected controller and evaluation group. 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":"s3-protocols-route_advertise-withdrawn-stale_announce","generated_at":"2026-09-29T14:40:05.659430+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Incorrect event admission now changes concrete queued data, resource ownership, or emitted protocol frames and subsequent trace behavior.","repair":"In phase withdrawn, classify stale_announce as transition to withdrawn and emit suppress.","root_cause":"In withdrawn, the stale announce handler runs install and enters usable; it must instead run suppress and enter withdrawn.","sha256":"ca346ca9fd9d887ae340bf88bb7b8eff7efa5a41174b5cd4a156019c9a8d9be4","title":"Route advertisement lifecycle controller: withdrawn / stale announce · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":48.895,"exit_code":1,"observations":[{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"unknown/announce","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":[],"checks":0,"forwarding":["candidate"],"liveness":1,"withdrawals":0}}],"check":"candidate/loop_free","expected":[{"frames":[],"phase":"usable","registers":{"advertised":[],"checks":0,"forwarding":["candidate"],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"candidate/loop_detected","expected":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":1}}],"check":"usable/withdraw","expected":[{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":1}}],"passed":true},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"withdrawn/stale_announce","expected":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":false},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":["old"],"checks":1,"forwarding":["old"],"liveness":1,"withdrawals":0}}],"check":"usable/newer_announce","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":["old"],"checks":1,"forwarding":["old"],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"unreachable","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"usable/neighbor_down","expected":[{"frames":[],"phase":"unreachable","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[["REQUEST_ROUTES",1]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"unreachable/neighbor_up","expected":[{"frames":[["REQUEST_ROUTES",1]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"rejected/corrected_announce","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}}],"check":"usable/duplicate_announce","expected":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"candidate","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"ordered trace 0","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"candidate","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}},{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[["reject",[1,2,3]]],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":4,"withdrawals":1}}],"check":"ordered trace 3","expected":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}},{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}}],"passed":false},{"actual":[],"check":"empty input","expected":[],"passed":true},{"actual":[{"frames":[["reject",[1,2,3]]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"unknown event","expected":[{"frames":[["reject",[1,2,3]]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unknown/announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"candidate/loop_free\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"candidate\"], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"candidate\"], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"candidate/loop_detected\", \"actual\": [{\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": true}, {\"check\": \"usable/withdraw\", \"actual\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 1}, \"frames\": []}], \"expected\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 1}, \"frames\": []}], \"passed\": true}, {\"check\": \"withdrawn/stale_announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": false}, {\"check\": \"usable/newer_announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"usable/neighbor_down\", \"actual\": [{\"phase\": \"unreachable\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"unreachable\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"unreachable/neighbor_up\", \"actual\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REQUEST_ROUTES\", 1]]}], \"expected\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REQUEST_ROUTES\", 1]]}], \"passed\": true}, {\"check\": \"rejected/corrected_announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"usable/duplicate_announce\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"ordered trace 0\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": true}, {\"check\": \"ordered trace 3\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": []}, {\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": []}, {\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"reject\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": false}, {\"check\": \"empty input\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"unknown event\", \"actual\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"reject\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"reject\", [1, 2, 3]]]}], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.973,"exit_code":1,"observations":[{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"unknown/announce","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":[],"checks":0,"forwarding":["candidate"],"liveness":1,"withdrawals":0}}],"check":"candidate/loop_free","expected":[{"frames":[],"phase":"usable","registers":{"advertised":[],"checks":0,"forwarding":["candidate"],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"candidate/loop_detected","expected":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":1}}],"check":"usable/withdraw","expected":[{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":1}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":[],"checks":0,"forwarding":["candidate"],"liveness":1,"withdrawals":0}}],"check":"withdrawn/stale_announce","expected":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":false},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":["old"],"checks":1,"forwarding":["old"],"liveness":1,"withdrawals":0}}],"check":"usable/newer_announce","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":["old"],"checks":1,"forwarding":["old"],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"unreachable","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"usable/neighbor_down","expected":[{"frames":[],"phase":"unreachable","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[["REQUEST_ROUTES",1]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"unreachable/neighbor_up","expected":[{"frames":[["REQUEST_ROUTES",1]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"rejected/corrected_announce","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}}],"check":"usable/duplicate_announce","expected":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"candidate","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"ordered trace 0","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"candidate","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}},{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[],"phase":"usable","registers":{"advertised":[],"checks":0,"forwarding":["candidate"],"liveness":4,"withdrawals":1}},{"frames":[["reject",[1,2,3]]],"phase":"usable","registers":{"advertised":[],"checks":0,"forwarding":["candidate"],"liveness":4,"withdrawals":1}}],"check":"ordered trace 3","expected":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}},{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}}],"passed":false},{"actual":[],"check":"empty input","expected":[],"passed":true},{"actual":[{"frames":[["reject",[1,2,3]]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"unknown event","expected":[{"frames":[["reject",[1,2,3]]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unknown/announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"candidate/loop_free\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"candidate\"], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"candidate\"], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"candidate/loop_detected\", \"actual\": [{\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": true}, {\"check\": \"usable/withdraw\", \"actual\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 1}, \"frames\": []}], \"expected\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 1}, \"frames\": []}], \"passed\": true}, {\"check\": \"withdrawn/stale_announce\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"candidate\"], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": false}, {\"check\": \"usable/newer_announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"usable/neighbor_down\", \"actual\": [{\"phase\": \"unreachable\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"unreachable\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"unreachable/neighbor_up\", \"actual\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REQUEST_ROUTES\", 1]]}], \"expected\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REQUEST_ROUTES\", 1]]}], \"passed\": true}, {\"check\": \"rejected/corrected_announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"usable/duplicate_announce\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"ordered trace 0\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": true}, {\"check\": \"ordered trace 3\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": []}, {\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"candidate\"], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": []}, {\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"candidate\"], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"reject\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": false}, {\"check\": \"empty input\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"unknown event\", \"actual\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"reject\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"reject\", [1, 2, 3]]]}], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.797,"exit_code":0,"observations":[{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"unknown/announce","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":[],"checks":0,"forwarding":["candidate"],"liveness":1,"withdrawals":0}}],"check":"candidate/loop_free","expected":[{"frames":[],"phase":"usable","registers":{"advertised":[],"checks":0,"forwarding":["candidate"],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"candidate/loop_detected","expected":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":1}}],"check":"usable/withdraw","expected":[{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":1}}],"passed":true},{"actual":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"withdrawn/stale_announce","expected":[{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":["old"],"checks":1,"forwarding":["old"],"liveness":1,"withdrawals":0}}],"check":"usable/newer_announce","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":["old"],"checks":1,"forwarding":["old"],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"unreachable","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"usable/neighbor_down","expected":[{"frames":[],"phase":"unreachable","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[["REQUEST_ROUTES",1]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"unreachable/neighbor_up","expected":[{"frames":[["REQUEST_ROUTES",1]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"rejected/corrected_announce","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}}],"check":"usable/duplicate_announce","expected":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"candidate","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"ordered trace 0","expected":[{"frames":[],"phase":"candidate","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":1,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"candidate","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"rejected","registers":{"advertised":[],"checks":2,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true},{"actual":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}},{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}}],"check":"ordered trace 3","expected":[{"frames":[],"phase":"usable","registers":{"advertised":["old"],"checks":0,"forwarding":["old"],"liveness":4,"withdrawals":0}},{"frames":[],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}},{"frames":[["REJECT_PATH",[1,2,3]],["REJECT_PATH",[1,2,3]]],"phase":"withdrawn","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":4,"withdrawals":1}}],"passed":true},{"actual":[],"check":"empty input","expected":[],"passed":true},{"actual":[{"frames":[["reject",[1,2,3]]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"check":"unknown event","expected":[{"frames":[["reject",[1,2,3]]],"phase":"unknown","registers":{"advertised":[],"checks":0,"forwarding":[],"liveness":1,"withdrawals":0}}],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unknown/announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"candidate/loop_free\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"candidate\"], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"candidate\"], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"candidate/loop_detected\", \"actual\": [{\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": true}, {\"check\": \"usable/withdraw\", \"actual\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 1}, \"frames\": []}], \"expected\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 1}, \"frames\": []}], \"passed\": true}, {\"check\": \"withdrawn/stale_announce\", \"actual\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": true}, {\"check\": \"usable/newer_announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"usable/neighbor_down\", \"actual\": [{\"phase\": \"unreachable\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"unreachable\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"unreachable/neighbor_up\", \"actual\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REQUEST_ROUTES\", 1]]}], \"expected\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REQUEST_ROUTES\", 1]]}], \"passed\": true}, {\"check\": \"rejected/corrected_announce\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"usable/duplicate_announce\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}], \"expected\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}], \"passed\": true}, {\"check\": \"ordered trace 0\", \"actual\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 1, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"candidate\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"rejected\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 2, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": true}, {\"check\": \"ordered trace 3\", \"actual\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"usable\", \"registers\": {\"forwarding\": [\"old\"], \"advertised\": [\"old\"], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 0}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": []}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]]]}, {\"phase\": \"withdrawn\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 4, \"withdrawals\": 1}, \"frames\": [[\"REJECT_PATH\", [1, 2, 3]], [\"REJECT_PATH\", [1, 2, 3]]]}], \"passed\": true}, {\"check\": \"empty input\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"unknown event\", \"actual\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"reject\", [1, 2, 3]]]}], \"expected\": [{\"phase\": \"unknown\", \"registers\": {\"forwarding\": [], \"advertised\": [], \"checks\": 0, \"liveness\": 1, \"withdrawals\": 0}, \"frames\": [[\"reject\", [1, 2, 3]]]}], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}