FA-20286 / Protocols / Open access
Serial line command and data mode controller: command / line reset · case 01
While command, event line_reset produces data/enable_payload instead of command/reset_parser_report.
ROOT CAUSE
In command, the line reset handler runs enable payload and enters data; it must instead run reset parser report and enter command.
VERIFIED REPAIR
In phase command, classify line_reset as transition to command and emit reset_parser_report.
Unsuccessful approach: The partial repair chooses command/retain_partial_command, which still violates this phase-specific event contract.
Case contract
For the stipulated Serial line command and data mode 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.
Why this case matters
Incorrect event admission now changes concrete queued data, resource ownership, or emitted protocol frames and subsequent trace behavior.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(phase, events, seed):
payload = list(range(seed, seed * 2 + 2))
r = {'parser': 'data' if phase in ('data','guarding') else 'command', 'partial_command': [seed-1], 'candidate': payload[:], 'delivered': [], 'queue': payload[:], 'reported': []}
frames = []
observed = []
table = {('command', 'enter_data'): ('switching', 'send_mode_request'), ('switching', 'mode_ack'): ('data', 'enable_payload'), ('switching', 'mode_nack'): ('command', 'report_refused'), ('data', 'escape_guard_start'): ('guarding', 'hold_escape_candidate'), ('guarding', 'guard_satisfied'): ('command', 'consume_escape'), ('guarding', 'guard_broken'): ('data', 'deliver_candidate_and_data'), ('command', 'payload'): ('command', 'reject_data'), ('data', 'command_like_payload'): ('data', 'deliver_verbatim'), ('data', 'hangup'): ('command', 'flush_close_report'), ('command', 'line_reset'): ('data', 'enable_payload')}
for event in events:
phase, action = table.get((phase, event), (phase, "reject"))
if action == 'send_mode_request':
frames.append(['ENTER_DATA',seed])
elif action == 'enable_payload':
r['parser']='data'
elif action == 'report_refused':
r['reported'].append('mode_refused')
elif action == 'hold_escape_candidate':
r['candidate']=payload[:]
elif action == 'consume_escape':
r['candidate']=[]; r['parser']='command'
elif action == 'deliver_candidate_and_data':
r['delivered'].extend(r['candidate']+payload); r['candidate']=[]
elif action == 'reject_data':
r['reported'].append('not_data_mode')
elif action == 'deliver_verbatim':
r['delivered'].extend(payload)
elif action == 'flush_close_report':
r['queue']=[]; r['reported'].append('hangup'); r['parser']='command'
elif action == 'reset_parser_report':
r['partial_command']=[]; r['reported'].append('reset')
elif action == 'send_payload':
frames.append(['DATA',payload])
elif action == 'flush_input':
r['partial_command']=[]
elif action == 'keep_commands':
r['parser']='command'
elif action == 'keep_command_parser':
r['parser']='command'
elif action == 'drop_response':
r['reported']=[]
elif action == 'parse_command':
r['partial_command'].extend(payload)
elif action == 'deliver_escape':
r['delivered'].extend(r['candidate'])
elif action == 'drop_candidate':
r['candidate']=[]
elif action == 'deliver':
r['delivered'].extend(payload)
elif action == 'queue_forever':
r['queue'].extend(payload)
elif action == 'execute_command':
frames.append(['EXECUTE',payload])
elif action == 'strip_prefix':
r['delivered'].extend(payload[1:])
elif action == 'keep_payload_queue':
r['reported'].append('hangup')
elif action == 'retain_partial_command':
r['reported'].append('reset')
elif action == 'continue':
r['queue'].extend(payload)
else:
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"):
frames.append([action, payload[:]])
observed.append(json.loads(json.dumps({"phase": phase, "registers": r, "frames": frames})))
return observed
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': [['ENTER_DATA', 1]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [], 'delivered': [1, 2, 3, 1, 2, 3], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [1, 2, 3], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': [['ENTER_DATA', 1]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 1]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 1]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 1], ['ENTER_DATA', 1]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 1]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': [['reject', [1, 2, 3]]]}])], 2: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': [['ENTER_DATA', 2]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [], 'delivered': [2, 3, 4, 5, 2, 3, 4, 5], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [2, 3, 4, 5], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 2], ['ENTER_DATA', 2]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 2], ['ENTER_DATA', 2]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 2]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': [['reject', [2, 3, 4, 5]]]}])], 3: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': [['ENTER_DATA', 3]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [], 'delivered': [3, 4, 5, 6, 7, 3, 4, 5, 6, 7], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [3, 4, 5, 6, 7], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack', 'hangup'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3], ['ENTER_DATA', 3]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3], ['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 3], ['ENTER_DATA', 3]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack', 'line_reset'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': [['reject', [3, 4, 5, 6, 7]]]}])], 4: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': [['ENTER_DATA', 4]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [], 'delivered': [4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [4, 5, 6, 7, 8, 9], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack', 'hangup', 'enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4], ['ENTER_DATA', 4]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack', 'line_reset', 'enter_data'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': [['reject', [4, 5, 6, 7, 8, 9]]]}])], 5: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': [['ENTER_DATA', 5]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [], 'delivered': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [5, 6, 7, 8, 9, 10, 11], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack', 'hangup', 'enter_data', 'mode_nack'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup', 'mode_refused']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5], ['ENTER_DATA', 5]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': [['reject', [5, 6, 7, 8, 9, 10, 11]]]}])]}
for label, phase, events, expected in cases[N]:
check(label, solve(phase, events, N), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| command/enter_data | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| switching/mode_ack | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| switching/mode_nack | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}] | Passed |
| data/escape_guard_start | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| guarding/guard_satisfied | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| guarding/guard_broken | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [], 'delivered': [1, 2, 3, 1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [], 'delivered': [1, 2, 3, 1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| command/payload | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['not_data_mode']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['not_data_mode']}}] | Passed |
| data/command_like_payload | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| data/hangup | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [], 'reported': ['hangup']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [], 'reported': ['hangup']}}] | Passed |
| command/line_reset | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}] | Failed |
| ordered trace 0 | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}, {'frames': [['ENTER_DATA', 1], ['reject', [1, 2, 3]]], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}] | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}, {'frames': [['ENTER_DATA', 1], ['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}] | Failed |
| ordered trace 3 | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'data', 'registers': {'candidate': [], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [['reject', [1, 2, 3]]], 'phase': 'data', 'registers': {'candidate': [], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}] | Failed |
| empty input | [] | [] | Passed |
| unknown event | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
SHA-256 / 02f0ecd4224b3455c7f6d419c6daa08d38af7180a4f356b7bdac64b10ce002e6
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(phase, events, seed):
payload = list(range(seed, seed * 2 + 2))
r = {'parser': 'data' if phase in ('data','guarding') else 'command', 'partial_command': [seed-1], 'candidate': payload[:], 'delivered': [], 'queue': payload[:], 'reported': []}
frames = []
observed = []
table = {('command', 'enter_data'): ('switching', 'send_mode_request'), ('switching', 'mode_ack'): ('data', 'enable_payload'), ('switching', 'mode_nack'): ('command', 'report_refused'), ('data', 'escape_guard_start'): ('guarding', 'hold_escape_candidate'), ('guarding', 'guard_satisfied'): ('command', 'consume_escape'), ('guarding', 'guard_broken'): ('data', 'deliver_candidate_and_data'), ('command', 'payload'): ('command', 'reject_data'), ('data', 'command_like_payload'): ('data', 'deliver_verbatim'), ('data', 'hangup'): ('command', 'flush_close_report'), ('command', 'line_reset'): ('command', 'retain_partial_command')}
for event in events:
phase, action = table.get((phase, event), (phase, "reject"))
if action == 'send_mode_request':
frames.append(['ENTER_DATA',seed])
elif action == 'enable_payload':
r['parser']='data'
elif action == 'report_refused':
r['reported'].append('mode_refused')
elif action == 'hold_escape_candidate':
r['candidate']=payload[:]
elif action == 'consume_escape':
r['candidate']=[]; r['parser']='command'
elif action == 'deliver_candidate_and_data':
r['delivered'].extend(r['candidate']+payload); r['candidate']=[]
elif action == 'reject_data':
r['reported'].append('not_data_mode')
elif action == 'deliver_verbatim':
r['delivered'].extend(payload)
elif action == 'flush_close_report':
r['queue']=[]; r['reported'].append('hangup'); r['parser']='command'
elif action == 'reset_parser_report':
r['partial_command']=[]; r['reported'].append('reset')
elif action == 'send_payload':
frames.append(['DATA',payload])
elif action == 'flush_input':
r['partial_command']=[]
elif action == 'keep_commands':
r['parser']='command'
elif action == 'keep_command_parser':
r['parser']='command'
elif action == 'drop_response':
r['reported']=[]
elif action == 'parse_command':
r['partial_command'].extend(payload)
elif action == 'deliver_escape':
r['delivered'].extend(r['candidate'])
elif action == 'drop_candidate':
r['candidate']=[]
elif action == 'deliver':
r['delivered'].extend(payload)
elif action == 'queue_forever':
r['queue'].extend(payload)
elif action == 'execute_command':
frames.append(['EXECUTE',payload])
elif action == 'strip_prefix':
r['delivered'].extend(payload[1:])
elif action == 'keep_payload_queue':
r['reported'].append('hangup')
elif action == 'retain_partial_command':
r['reported'].append('reset')
elif action == 'continue':
r['queue'].extend(payload)
else:
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"):
frames.append([action, payload[:]])
observed.append(json.loads(json.dumps({"phase": phase, "registers": r, "frames": frames})))
return observed
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': [['ENTER_DATA', 1]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [], 'delivered': [1, 2, 3, 1, 2, 3], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [1, 2, 3], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': [['ENTER_DATA', 1]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 1]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 1]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 1], ['ENTER_DATA', 1]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 1]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': [['reject', [1, 2, 3]]]}])], 2: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': [['ENTER_DATA', 2]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [], 'delivered': [2, 3, 4, 5, 2, 3, 4, 5], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [2, 3, 4, 5], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 2], ['ENTER_DATA', 2]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 2], ['ENTER_DATA', 2]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 2]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': [['reject', [2, 3, 4, 5]]]}])], 3: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': [['ENTER_DATA', 3]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [], 'delivered': [3, 4, 5, 6, 7, 3, 4, 5, 6, 7], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [3, 4, 5, 6, 7], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack', 'hangup'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3], ['ENTER_DATA', 3]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3], ['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 3], ['ENTER_DATA', 3]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack', 'line_reset'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': [['reject', [3, 4, 5, 6, 7]]]}])], 4: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': [['ENTER_DATA', 4]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [], 'delivered': [4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [4, 5, 6, 7, 8, 9], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack', 'hangup', 'enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4], ['ENTER_DATA', 4]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack', 'line_reset', 'enter_data'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': [['reject', [4, 5, 6, 7, 8, 9]]]}])], 5: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': [['ENTER_DATA', 5]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [], 'delivered': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [5, 6, 7, 8, 9, 10, 11], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack', 'hangup', 'enter_data', 'mode_nack'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup', 'mode_refused']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5], ['ENTER_DATA', 5]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': [['reject', [5, 6, 7, 8, 9, 10, 11]]]}])]}
for label, phase, events, expected in cases[N]:
check(label, solve(phase, events, N), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| command/enter_data | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| switching/mode_ack | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| switching/mode_nack | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}] | Passed |
| data/escape_guard_start | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| guarding/guard_satisfied | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| guarding/guard_broken | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [], 'delivered': [1, 2, 3, 1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [], 'delivered': [1, 2, 3, 1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| command/payload | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['not_data_mode']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['not_data_mode']}}] | Passed |
| data/command_like_payload | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| data/hangup | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [], 'reported': ['hangup']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [], 'reported': ['hangup']}}] | Passed |
| command/line_reset | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['reset']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}] | Failed |
| ordered trace 0 | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}, {'frames': [['ENTER_DATA', 1], ['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}] | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}, {'frames': [['ENTER_DATA', 1], ['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}] | Failed |
| ordered trace 3 | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['reset']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['reset']}}] | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}] | Failed |
| empty input | [] | [] | Passed |
| unknown event | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
SHA-256 / 5f798e11850c3dbe244479502393470c40077def97fa2f6c65f6aaa621534abc
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(phase, events, seed):
payload = list(range(seed, seed * 2 + 2))
r = {'parser': 'data' if phase in ('data','guarding') else 'command', 'partial_command': [seed-1], 'candidate': payload[:], 'delivered': [], 'queue': payload[:], 'reported': []}
frames = []
observed = []
table = {('command', 'enter_data'): ('switching', 'send_mode_request'), ('switching', 'mode_ack'): ('data', 'enable_payload'), ('switching', 'mode_nack'): ('command', 'report_refused'), ('data', 'escape_guard_start'): ('guarding', 'hold_escape_candidate'), ('guarding', 'guard_satisfied'): ('command', 'consume_escape'), ('guarding', 'guard_broken'): ('data', 'deliver_candidate_and_data'), ('command', 'payload'): ('command', 'reject_data'), ('data', 'command_like_payload'): ('data', 'deliver_verbatim'), ('data', 'hangup'): ('command', 'flush_close_report'), ('command', 'line_reset'): ('command', 'reset_parser_report')}
for event in events:
phase, action = table.get((phase, event), (phase, "reject"))
if action == 'send_mode_request':
frames.append(['ENTER_DATA',seed])
elif action == 'enable_payload':
r['parser']='data'
elif action == 'report_refused':
r['reported'].append('mode_refused')
elif action == 'hold_escape_candidate':
r['candidate']=payload[:]
elif action == 'consume_escape':
r['candidate']=[]; r['parser']='command'
elif action == 'deliver_candidate_and_data':
r['delivered'].extend(r['candidate']+payload); r['candidate']=[]
elif action == 'reject_data':
r['reported'].append('not_data_mode')
elif action == 'deliver_verbatim':
r['delivered'].extend(payload)
elif action == 'flush_close_report':
r['queue']=[]; r['reported'].append('hangup'); r['parser']='command'
elif action == 'reset_parser_report':
r['partial_command']=[]; r['reported'].append('reset')
elif action == 'send_payload':
frames.append(['DATA',payload])
elif action == 'flush_input':
r['partial_command']=[]
elif action == 'keep_commands':
r['parser']='command'
elif action == 'keep_command_parser':
r['parser']='command'
elif action == 'drop_response':
r['reported']=[]
elif action == 'parse_command':
r['partial_command'].extend(payload)
elif action == 'deliver_escape':
r['delivered'].extend(r['candidate'])
elif action == 'drop_candidate':
r['candidate']=[]
elif action == 'deliver':
r['delivered'].extend(payload)
elif action == 'queue_forever':
r['queue'].extend(payload)
elif action == 'execute_command':
frames.append(['EXECUTE',payload])
elif action == 'strip_prefix':
r['delivered'].extend(payload[1:])
elif action == 'keep_payload_queue':
r['reported'].append('hangup')
elif action == 'retain_partial_command':
r['reported'].append('reset')
elif action == 'continue':
r['queue'].extend(payload)
else:
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"):
frames.append([action, payload[:]])
observed.append(json.loads(json.dumps({"phase": phase, "registers": r, "frames": frames})))
return observed
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': [['ENTER_DATA', 1]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [], 'delivered': [1, 2, 3, 1, 2, 3], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [1, 2, 3], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': [['ENTER_DATA', 1]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 1]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 1]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 1], ['ENTER_DATA', 1]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [1, 2, 3], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 1]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [0], 'candidate': [1, 2, 3], 'delivered': [], 'queue': [1, 2, 3], 'reported': []}, 'frames': [['reject', [1, 2, 3]]]}])], 2: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': [['ENTER_DATA', 2]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [], 'delivered': [2, 3, 4, 5, 2, 3, 4, 5], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [2, 3, 4, 5], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 2], ['ENTER_DATA', 2]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 2], ['ENTER_DATA', 2]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 2]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 2]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [1], 'candidate': [2, 3, 4, 5], 'delivered': [], 'queue': [2, 3, 4, 5], 'reported': []}, 'frames': [['reject', [2, 3, 4, 5]]]}])], 3: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': [['ENTER_DATA', 3]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [], 'delivered': [3, 4, 5, 6, 7, 3, 4, 5, 6, 7], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [3, 4, 5, 6, 7], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack', 'hangup'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3], ['ENTER_DATA', 3]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3], ['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 3], ['ENTER_DATA', 3]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack', 'line_reset'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 3]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 3]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [2], 'candidate': [3, 4, 5, 6, 7], 'delivered': [], 'queue': [3, 4, 5, 6, 7], 'reported': []}, 'frames': [['reject', [3, 4, 5, 6, 7]]]}])], 4: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': [['ENTER_DATA', 4]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [], 'delivered': [4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [4, 5, 6, 7, 8, 9], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack', 'hangup', 'enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4], ['ENTER_DATA', 4]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack', 'line_reset', 'enter_data'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 4], ['ENTER_DATA', 4]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [3], 'candidate': [4, 5, 6, 7, 8, 9], 'delivered': [], 'queue': [4, 5, 6, 7, 8, 9], 'reported': []}, 'frames': [['reject', [4, 5, 6, 7, 8, 9]]]}])], 5: [('command/enter_data', 'command', ['enter_data'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': [['ENTER_DATA', 5]]}]), ('switching/mode_ack', 'switching', ['mode_ack'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('switching/mode_nack', 'switching', ['mode_nack'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused']}, 'frames': []}]), ('data/escape_guard_start', 'data', ['escape_guard_start'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('guarding/guard_satisfied', 'guarding', ['guard_satisfied'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('guarding/guard_broken', 'guarding', ['guard_broken'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [], 'delivered': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('command/payload', 'command', ['payload'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['not_data_mode']}, 'frames': []}]), ('data/command_like_payload', 'data', ['command_like_payload'], [{'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [5, 6, 7, 8, 9, 10, 11], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}]), ('data/hangup', 'data', ['hangup'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['hangup']}, 'frames': []}]), ('command/line_reset', 'command', ['line_reset'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset']}, 'frames': []}]), ('ordered trace 0', 'command', ['enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack', 'hangup', 'enter_data', 'mode_nack'], [{'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [], 'reported': ['mode_refused', 'reset', 'hangup', 'mode_refused']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5], ['ENTER_DATA', 5]]}]), ('ordered trace 3', 'data', ['escape_guard_start', 'guard_satisfied', 'line_reset', 'enter_data', 'mode_nack', 'line_reset', 'enter_data', 'mode_ack'], [{'phase': 'guarding', 'registers': {'parser': 'data', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': []}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset']}, 'frames': []}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5]]}, {'phase': 'switching', 'registers': {'parser': 'command', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}, {'phase': 'data', 'registers': {'parser': 'data', 'partial_command': [], 'candidate': [], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': ['reset', 'mode_refused', 'reset']}, 'frames': [['ENTER_DATA', 5], ['ENTER_DATA', 5]]}]), ('empty input', 'command', [], []), ('unknown event', 'command', ['unsupported'], [{'phase': 'command', 'registers': {'parser': 'command', 'partial_command': [4], 'candidate': [5, 6, 7, 8, 9, 10, 11], 'delivered': [], 'queue': [5, 6, 7, 8, 9, 10, 11], 'reported': []}, 'frames': [['reject', [5, 6, 7, 8, 9, 10, 11]]]}])]}
for label, phase, events, expected in cases[N]:
check(label, solve(phase, events, N), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| command/enter_data | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| switching/mode_ack | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| switching/mode_nack | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}] | Passed |
| data/escape_guard_start | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| guarding/guard_satisfied | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| guarding/guard_broken | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [], 'delivered': [1, 2, 3, 1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [], 'delivered': [1, 2, 3, 1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| command/payload | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['not_data_mode']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['not_data_mode']}}] | Passed |
| data/command_like_payload | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [], 'phase': 'data', 'registers': {'candidate': [1, 2, 3], 'delivered': [1, 2, 3], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
| data/hangup | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [], 'reported': ['hangup']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [], 'reported': ['hangup']}}] | Passed |
| command/line_reset | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}] | [{'frames': [], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}] | Passed |
| ordered trace 0 | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}, {'frames': [['ENTER_DATA', 1], ['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}] | [{'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': ['mode_refused']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}, {'frames': [['ENTER_DATA', 1], ['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['mode_refused', 'reset']}}] | Passed |
| ordered trace 3 | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}] | [{'frames': [], 'phase': 'guarding', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'data', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}, {'frames': [], 'phase': 'command', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}, {'frames': [['ENTER_DATA', 1]], 'phase': 'switching', 'registers': {'candidate': [], 'delivered': [], 'parser': 'command', 'partial_command': [], 'queue': [1, 2, 3], 'reported': ['reset']}}] | Passed |
| empty input | [] | [] | Passed |
| unknown event | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'command', 'registers': {'candidate': [1, 2, 3], 'delivered': [], 'parser': 'command', 'partial_command': [0], 'queue': [1, 2, 3], 'reported': []}}] | Passed |
SHA-256 / 1f3422249a17ba605fddf68a238496b74e7ce3a0ad82fb2b1921f8ba9cc74159
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:40:17.359937+00:00.
Case digest / f7cd7c7e36d9b357b1e637c134700825db4a54591ffdddd9d6291f3db3ddd330