FA-19056 / Protocols / Open access
Segmented message assembly controller: idle / middle · case 01
While idle, event middle produces collecting/append instead of idle/reject_orphan.
ROOT CAUSE
In idle, the middle handler runs append and enters collecting; it must instead run reject orphan and enter idle.
VERIFIED REPAIR
In phase idle, classify middle as transition to idle and emit reject_orphan.
Unsuccessful approach: The partial repair chooses idle/buffer, which still violates this phase-specific event contract.
Case contract
For the stipulated Segmented message assembly 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 = {'partial': [seed-1] if phase=='collecting' else [], 'published': [payload[:]] if phase=='complete' else [], 'owned': phase!='idle', 'discarded': []}
frames = []
observed = []
table = {('idle', 'begin'): ('collecting', 'start_message'), ('collecting', 'middle'): ('collecting', 'append'), ('collecting', 'end'): ('complete', 'append_publish'), ('idle', 'middle'): ('collecting', 'append'), ('idle', 'end'): ('idle', 'reject_orphan'), ('collecting', 'begin'): ('collecting', 'reject_nested'), ('collecting', 'abort'): ('idle', 'discard_partial'), ('complete', 'consume'): ('idle', 'release_message'), ('complete', 'middle'): ('complete', 'reject_sealed'), ('collecting', 'oversize'): ('idle', 'reject_discard')}
for event in events:
phase, action = table.get((phase, event), (phase, "reject"))
if action == 'start_message':
r['partial']=payload[:]
elif action == 'append':
r['partial'].extend(payload)
elif action == 'append_publish':
r['partial'].extend(payload); r['published'].append(r['partial'][:])
elif action == 'reject_orphan':
frames.append(['ORPHAN',event])
elif action == 'reject_nested':
frames.append(['NESTED_BEGIN',len(r['partial'])])
elif action == 'discard_partial':
r['discarded'].extend(r['partial']); r['partial']=[]
elif action == 'release_message':
r['owned']=False
elif action == 'reject_sealed':
frames.append(['SEALED',event])
elif action == 'reject_discard':
r['partial']=[]; frames.append(['TOO_LARGE',len(payload)])
elif action == 'publish':
r['published'].append(r['partial'][:])
elif action == 'publish_without_end':
r['published'].append(r['partial'][:])
elif action == 'replace':
r['partial']=payload[:]
elif action == 'buffer':
r['partial'].extend(payload)
elif action == 'ack':
frames.append(['MESSAGE_OK',seed])
elif action == 'restart':
r['partial']=payload[:]
elif action == 'discard':
r['partial']=[]
elif action == 'keep_partial':
r['owned']=False
elif action == 'retain':
r['owned']=True
elif action == 'discard_unread':
r['published']=[]
elif action == 'truncate':
r['partial']=r['partial'][:1]
elif action == 'publish_prefix':
r['published'].append(r['partial'][:1])
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: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [0, 1, 2, 3], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [0, 1, 2, 3], 'published': [[0, 1, 2, 3]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [0], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [0]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[1, 2, 3]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 3]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 3]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [1, 2, 3]]]}])], 2: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3, 4, 5], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [1, 2, 3, 4, 5], 'published': [[1, 2, 3, 4, 5]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [1], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [1]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[2, 3, 4, 5]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 4]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [2, 3, 4, 5, 2, 3, 4, 5], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [2, 3, 4, 5, 2, 3, 4, 5], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4]]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4], ['ORPHAN', 'end'], ['NESTED_BEGIN', 4]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [2, 3, 4, 5]]]}])], 3: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5, 6, 7], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [2, 3, 4, 5, 6, 7], 'published': [[2, 3, 4, 5, 6, 7]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [2], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [2]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 5]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize', 'end'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [3, 4, 5, 6, 7, 3, 4, 5, 6, 7], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [3, 4, 5, 6, 7, 3, 4, 5, 6, 7], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end']]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin', 'abort'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end'], ['NESTED_BEGIN', 5]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': [3, 4, 5, 6, 7]}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end'], ['NESTED_BEGIN', 5]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [3, 4, 5, 6, 7]]]}])], 4: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7, 8, 9], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [3, 4, 5, 6, 7, 8, 9], 'published': [[3, 4, 5, 6, 7, 8, 9]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [3], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [3]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 6]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize', 'end', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin', 'abort', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end'], ['NESTED_BEGIN', 6]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': [4, 5, 6, 7, 8, 9]}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end'], ['NESTED_BEGIN', 6]]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': [4, 5, 6, 7, 8, 9]}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end'], ['NESTED_BEGIN', 6]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [4, 5, 6, 7, 8, 9]]]}])], 5: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 10, 11], 'published': [[4, 5, 6, 7, 8, 9, 10, 11]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [4], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [4]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 7]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize', 'end', 'begin', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin', 'abort', 'begin', 'middle'], [{'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': [5, 6, 7, 8, 9, 10, 11]}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': [5, 6, 7, 8, 9, 10, 11]}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': [5, 6, 7, 8, 9, 10, 11]}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, '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 |
|---|---|---|---|
| idle/begin | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | Passed |
| collecting/middle | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': []}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': []}}] | Passed |
| collecting/end | [{'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': [[0, 1, 2, 3]]}}] | [{'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': [[0, 1, 2, 3]]}}] | Passed |
| idle/middle | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | [{'frames': [['ORPHAN', 'middle']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | Failed |
| idle/end | [{'frames': [['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | [{'frames': [['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | Passed |
| collecting/begin | [{'frames': [['NESTED_BEGIN', 1]], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0], 'published': []}}] | [{'frames': [['NESTED_BEGIN', 1]], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0], 'published': []}}] | Passed |
| collecting/abort | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [0], 'owned': True, 'partial': [], 'published': []}}] | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [0], 'owned': True, 'partial': [], 'published': []}}] | Passed |
| complete/consume | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': [[1, 2, 3]]}}] | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': [[1, 2, 3]]}}] | Passed |
| complete/middle | [{'frames': [['SEALED', 'middle']], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': [[1, 2, 3]]}}] | [{'frames': [['SEALED', 'middle']], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': [[1, 2, 3]]}}] | Passed |
| collecting/oversize | [{'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': []}}] | [{'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': []}}] | Passed |
| ordered trace 0 | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}] | Passed |
| ordered trace 3 | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | Passed |
| empty input | [] | [] | Passed |
| unknown event | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | Passed |
SHA-256 / 0e5f7745f3a84517bff187655f1cf2803cc796a9076d4fbdd677c1b6c6adfc52
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 = {'partial': [seed-1] if phase=='collecting' else [], 'published': [payload[:]] if phase=='complete' else [], 'owned': phase!='idle', 'discarded': []}
frames = []
observed = []
table = {('idle', 'begin'): ('collecting', 'start_message'), ('collecting', 'middle'): ('collecting', 'append'), ('collecting', 'end'): ('complete', 'append_publish'), ('idle', 'middle'): ('idle', 'buffer'), ('idle', 'end'): ('idle', 'reject_orphan'), ('collecting', 'begin'): ('collecting', 'reject_nested'), ('collecting', 'abort'): ('idle', 'discard_partial'), ('complete', 'consume'): ('idle', 'release_message'), ('complete', 'middle'): ('complete', 'reject_sealed'), ('collecting', 'oversize'): ('idle', 'reject_discard')}
for event in events:
phase, action = table.get((phase, event), (phase, "reject"))
if action == 'start_message':
r['partial']=payload[:]
elif action == 'append':
r['partial'].extend(payload)
elif action == 'append_publish':
r['partial'].extend(payload); r['published'].append(r['partial'][:])
elif action == 'reject_orphan':
frames.append(['ORPHAN',event])
elif action == 'reject_nested':
frames.append(['NESTED_BEGIN',len(r['partial'])])
elif action == 'discard_partial':
r['discarded'].extend(r['partial']); r['partial']=[]
elif action == 'release_message':
r['owned']=False
elif action == 'reject_sealed':
frames.append(['SEALED',event])
elif action == 'reject_discard':
r['partial']=[]; frames.append(['TOO_LARGE',len(payload)])
elif action == 'publish':
r['published'].append(r['partial'][:])
elif action == 'publish_without_end':
r['published'].append(r['partial'][:])
elif action == 'replace':
r['partial']=payload[:]
elif action == 'buffer':
r['partial'].extend(payload)
elif action == 'ack':
frames.append(['MESSAGE_OK',seed])
elif action == 'restart':
r['partial']=payload[:]
elif action == 'discard':
r['partial']=[]
elif action == 'keep_partial':
r['owned']=False
elif action == 'retain':
r['owned']=True
elif action == 'discard_unread':
r['published']=[]
elif action == 'truncate':
r['partial']=r['partial'][:1]
elif action == 'publish_prefix':
r['published'].append(r['partial'][:1])
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: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [0, 1, 2, 3], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [0, 1, 2, 3], 'published': [[0, 1, 2, 3]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [0], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [0]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[1, 2, 3]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 3]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 3]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [1, 2, 3]]]}])], 2: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3, 4, 5], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [1, 2, 3, 4, 5], 'published': [[1, 2, 3, 4, 5]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [1], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [1]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[2, 3, 4, 5]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 4]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [2, 3, 4, 5, 2, 3, 4, 5], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [2, 3, 4, 5, 2, 3, 4, 5], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4]]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4], ['ORPHAN', 'end'], ['NESTED_BEGIN', 4]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [2, 3, 4, 5]]]}])], 3: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5, 6, 7], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [2, 3, 4, 5, 6, 7], 'published': [[2, 3, 4, 5, 6, 7]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [2], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [2]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 5]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize', 'end'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [3, 4, 5, 6, 7, 3, 4, 5, 6, 7], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [3, 4, 5, 6, 7, 3, 4, 5, 6, 7], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end']]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin', 'abort'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end'], ['NESTED_BEGIN', 5]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': [3, 4, 5, 6, 7]}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end'], ['NESTED_BEGIN', 5]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [3, 4, 5, 6, 7]]]}])], 4: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7, 8, 9], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [3, 4, 5, 6, 7, 8, 9], 'published': [[3, 4, 5, 6, 7, 8, 9]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [3], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [3]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 6]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize', 'end', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin', 'abort', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end'], ['NESTED_BEGIN', 6]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': [4, 5, 6, 7, 8, 9]}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end'], ['NESTED_BEGIN', 6]]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': [4, 5, 6, 7, 8, 9]}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end'], ['NESTED_BEGIN', 6]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [4, 5, 6, 7, 8, 9]]]}])], 5: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 10, 11], 'published': [[4, 5, 6, 7, 8, 9, 10, 11]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [4], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [4]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 7]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize', 'end', 'begin', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin', 'abort', 'begin', 'middle'], [{'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': [5, 6, 7, 8, 9, 10, 11]}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': [5, 6, 7, 8, 9, 10, 11]}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': [5, 6, 7, 8, 9, 10, 11]}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, '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 |
|---|---|---|---|
| idle/begin | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | Passed |
| collecting/middle | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': []}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': []}}] | Passed |
| collecting/end | [{'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': [[0, 1, 2, 3]]}}] | [{'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': [[0, 1, 2, 3]]}}] | Passed |
| idle/middle | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | [{'frames': [['ORPHAN', 'middle']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | Failed |
| idle/end | [{'frames': [['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | [{'frames': [['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | Passed |
| collecting/begin | [{'frames': [['NESTED_BEGIN', 1]], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0], 'published': []}}] | [{'frames': [['NESTED_BEGIN', 1]], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0], 'published': []}}] | Passed |
| collecting/abort | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [0], 'owned': True, 'partial': [], 'published': []}}] | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [0], 'owned': True, 'partial': [], 'published': []}}] | Passed |
| complete/consume | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': [[1, 2, 3]]}}] | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': [[1, 2, 3]]}}] | Passed |
| complete/middle | [{'frames': [['SEALED', 'middle']], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': [[1, 2, 3]]}}] | [{'frames': [['SEALED', 'middle']], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': [[1, 2, 3]]}}] | Passed |
| collecting/oversize | [{'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': []}}] | [{'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': []}}] | Passed |
| ordered trace 0 | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}] | Passed |
| ordered trace 3 | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | Passed |
| empty input | [] | [] | Passed |
| unknown event | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | Passed |
SHA-256 / 73d17cf8cdf9d0e20bcf353c72e51da6230d0cb003f2f22686c6c5a186bdef63
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 = {'partial': [seed-1] if phase=='collecting' else [], 'published': [payload[:]] if phase=='complete' else [], 'owned': phase!='idle', 'discarded': []}
frames = []
observed = []
table = {('idle', 'begin'): ('collecting', 'start_message'), ('collecting', 'middle'): ('collecting', 'append'), ('collecting', 'end'): ('complete', 'append_publish'), ('idle', 'middle'): ('idle', 'reject_orphan'), ('idle', 'end'): ('idle', 'reject_orphan'), ('collecting', 'begin'): ('collecting', 'reject_nested'), ('collecting', 'abort'): ('idle', 'discard_partial'), ('complete', 'consume'): ('idle', 'release_message'), ('complete', 'middle'): ('complete', 'reject_sealed'), ('collecting', 'oversize'): ('idle', 'reject_discard')}
for event in events:
phase, action = table.get((phase, event), (phase, "reject"))
if action == 'start_message':
r['partial']=payload[:]
elif action == 'append':
r['partial'].extend(payload)
elif action == 'append_publish':
r['partial'].extend(payload); r['published'].append(r['partial'][:])
elif action == 'reject_orphan':
frames.append(['ORPHAN',event])
elif action == 'reject_nested':
frames.append(['NESTED_BEGIN',len(r['partial'])])
elif action == 'discard_partial':
r['discarded'].extend(r['partial']); r['partial']=[]
elif action == 'release_message':
r['owned']=False
elif action == 'reject_sealed':
frames.append(['SEALED',event])
elif action == 'reject_discard':
r['partial']=[]; frames.append(['TOO_LARGE',len(payload)])
elif action == 'publish':
r['published'].append(r['partial'][:])
elif action == 'publish_without_end':
r['published'].append(r['partial'][:])
elif action == 'replace':
r['partial']=payload[:]
elif action == 'buffer':
r['partial'].extend(payload)
elif action == 'ack':
frames.append(['MESSAGE_OK',seed])
elif action == 'restart':
r['partial']=payload[:]
elif action == 'discard':
r['partial']=[]
elif action == 'keep_partial':
r['owned']=False
elif action == 'retain':
r['owned']=True
elif action == 'discard_unread':
r['published']=[]
elif action == 'truncate':
r['partial']=r['partial'][:1]
elif action == 'publish_prefix':
r['published'].append(r['partial'][:1])
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: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [0, 1, 2, 3], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [0, 1, 2, 3], 'published': [[0, 1, 2, 3]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [0], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [0]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[1, 2, 3]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 3]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]], 'owned': False, 'discarded': []}, 'frames': []}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 3]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [1, 2, 3], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [1, 2, 3]]]}])], 2: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [1, 2, 3, 4, 5], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [1, 2, 3, 4, 5], 'published': [[1, 2, 3, 4, 5]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [1], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [1]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[2, 3, 4, 5]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 4]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [2, 3, 4, 5, 2, 3, 4, 5], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [2, 3, 4, 5, 2, 3, 4, 5], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[2, 3, 4, 5, 2, 3, 4, 5]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4]]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 4], ['ORPHAN', 'end'], ['NESTED_BEGIN', 4]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [2, 3, 4, 5]]]}])], 3: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [2, 3, 4, 5, 6, 7], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [2, 3, 4, 5, 6, 7], 'published': [[2, 3, 4, 5, 6, 7]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [2], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [2]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 5]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize', 'end'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [3, 4, 5, 6, 7, 3, 4, 5, 6, 7], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [3, 4, 5, 6, 7, 3, 4, 5, 6, 7], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[3, 4, 5, 6, 7, 3, 4, 5, 6, 7]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end']]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin', 'abort'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end'], ['NESTED_BEGIN', 5]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': [3, 4, 5, 6, 7]}, 'frames': [['TOO_LARGE', 5], ['ORPHAN', 'end'], ['NESTED_BEGIN', 5]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [3, 4, 5, 6, 7]]]}])], 4: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [3, 4, 5, 6, 7, 8, 9], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [3, 4, 5, 6, 7, 8, 9], 'published': [[3, 4, 5, 6, 7, 8, 9]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [3], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [3]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 6]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize', 'end', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [[4, 5, 6, 7, 8, 9, 4, 5, 6, 7, 8, 9]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin', 'abort', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end'], ['NESTED_BEGIN', 6]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': [4, 5, 6, 7, 8, 9]}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end'], ['NESTED_BEGIN', 6]]}, {'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9], 'published': [], 'owned': False, 'discarded': [4, 5, 6, 7, 8, 9]}, 'frames': [['TOO_LARGE', 6], ['ORPHAN', 'end'], ['NESTED_BEGIN', 6]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['reject', [4, 5, 6, 7, 8, 9]]]}])], 5: [('idle/begin', 'idle', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}]), ('collecting/middle', 'collecting', ['middle'], [{'phase': 'collecting', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': True, 'discarded': []}, 'frames': []}]), ('collecting/end', 'collecting', ['end'], [{'phase': 'complete', 'registers': {'partial': [4, 5, 6, 7, 8, 9, 10, 11], 'published': [[4, 5, 6, 7, 8, 9, 10, 11]], 'owned': True, 'discarded': []}, 'frames': []}]), ('idle/middle', 'idle', ['middle'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'middle']]}]), ('idle/end', 'idle', ['end'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['ORPHAN', 'end']]}]), ('collecting/begin', 'collecting', ['begin'], [{'phase': 'collecting', 'registers': {'partial': [4], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['NESTED_BEGIN', 1]]}]), ('collecting/abort', 'collecting', ['abort'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': [4]}, 'frames': []}]), ('complete/consume', 'complete', ['consume'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}]), ('complete/middle', 'complete', ['middle'], [{'phase': 'complete', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11]], 'owned': True, 'discarded': []}, 'frames': [['SEALED', 'middle']]}]), ('collecting/oversize', 'collecting', ['oversize'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': True, 'discarded': []}, 'frames': [['TOO_LARGE', 7]]}]), ('ordered trace 0', 'idle', ['begin', 'end', 'consume', 'begin', 'oversize', 'end', 'begin', 'begin'], [{'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'complete', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [[5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11]], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}]), ('ordered trace 3', 'idle', ['begin', 'oversize', 'end', 'begin', 'begin', 'abort', 'begin', 'middle'], [{'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': []}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end']]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': []}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}, {'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': [5, 6, 7, 8, 9, 10, 11]}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': [5, 6, 7, 8, 9, 10, 11]}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}, {'phase': 'collecting', 'registers': {'partial': [5, 6, 7, 8, 9, 10, 11, 5, 6, 7, 8, 9, 10, 11], 'published': [], 'owned': False, 'discarded': [5, 6, 7, 8, 9, 10, 11]}, 'frames': [['TOO_LARGE', 7], ['ORPHAN', 'end'], ['NESTED_BEGIN', 7]]}]), ('empty input', 'idle', [], []), ('unknown event', 'idle', ['unsupported'], [{'phase': 'idle', 'registers': {'partial': [], 'published': [], 'owned': False, 'discarded': []}, '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 |
|---|---|---|---|
| idle/begin | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | Passed |
| collecting/middle | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': []}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': []}}] | Passed |
| collecting/end | [{'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': [[0, 1, 2, 3]]}}] | [{'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [0, 1, 2, 3], 'published': [[0, 1, 2, 3]]}}] | Passed |
| idle/middle | [{'frames': [['ORPHAN', 'middle']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | [{'frames': [['ORPHAN', 'middle']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | Passed |
| idle/end | [{'frames': [['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | [{'frames': [['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | Passed |
| collecting/begin | [{'frames': [['NESTED_BEGIN', 1]], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0], 'published': []}}] | [{'frames': [['NESTED_BEGIN', 1]], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': True, 'partial': [0], 'published': []}}] | Passed |
| collecting/abort | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [0], 'owned': True, 'partial': [], 'published': []}}] | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [0], 'owned': True, 'partial': [], 'published': []}}] | Passed |
| complete/consume | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': [[1, 2, 3]]}}] | [{'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': [[1, 2, 3]]}}] | Passed |
| complete/middle | [{'frames': [['SEALED', 'middle']], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': [[1, 2, 3]]}}] | [{'frames': [['SEALED', 'middle']], 'phase': 'complete', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': [[1, 2, 3]]}}] | Passed |
| collecting/oversize | [{'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': []}}] | [{'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': True, 'partial': [], 'published': []}}] | Passed |
| ordered trace 0 | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [], 'phase': 'complete', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3, 1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}, {'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': [[1, 2, 3, 1, 2, 3]]}}] | Passed |
| ordered trace 3 | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | [{'frames': [], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}, {'frames': [['TOO_LARGE', 3]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}, {'frames': [['TOO_LARGE', 3], ['ORPHAN', 'end']], 'phase': 'collecting', 'registers': {'discarded': [], 'owned': False, 'partial': [1, 2, 3], 'published': []}}] | Passed |
| empty input | [] | [] | Passed |
| unknown event | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | [{'frames': [['reject', [1, 2, 3]]], 'phase': 'idle', 'registers': {'discarded': [], 'owned': False, 'partial': [], 'published': []}}] | Passed |
SHA-256 / 3519281cff75fafd8c6aa842465253fc74d166fb0d29e9401cb5ec2406e602c9
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:03.982438+00:00.
Case digest / add105d831d50bdeb8988a19e0b0519ca1a8a850adb40ea9c91db0cb3b7c503c