FA-41686 / Listener lifecycle / Open access
Deferred reentrant emissions are prepended in LIFO order · case 01
Deferred reentrant emissions are prepended in LIFO order; the returned lifecycle plan violates the stated transition contract.
ROOT CAUSE
The queued_order decision in the reentrant-frame listener model is computed as ([s['event']] if s['event'] is not None else [])+list(s['pending']), losing a required lifecycle condition.
VERIFIED REPAIR
Compute the queued_order decision from the complete contract: list(s['pending'])+([s['event']] if s['serial'] and s['depth']>0 and s['event'] is not None else []).
Unsuccessful approach: The partial repair uses list(s['pending'])+([s['event']] if s['serial'] and s['event'] is not None else []); a retained regression distinguishes it from the full transition.
Case contract
Plan a nested observer emission with bounded depth. A nested event queues when serialization is enabled; otherwise it opens a child frame if below the limit. Preserve the outer event/context, unwind exactly one frame, and drain deferred events only after the outermost callback completes. A cancelled inner frame never cancels its parent. Inputs are finite state snapshots, including transitional and stale states; output fields are the exact independent actions/metadata defined by the corrected expression table. Numeric fixture capacities and counts vary with N. Field definitions, each independently computed from the input snapshot: queue = s['serial'] and s['depth']>0 and s['event'] is not None; enter = s['event'] is not None and not(s['serial'] and s['depth']>0) and s['depth']<s['limit']; outer_event = s['outer']; context = s['context']; unwind = s['frames'][:-1] if s['complete'] else list(s['frames']); drain = list(s['pending']) if s['complete'] and s['depth']<=1 else []; parent_cancel = False; overflow = s['event'] is not None and s['depth']>=s['limit'] and not(s['serial'] and s['depth']>0); next_depth = max(0,s['depth']-int(s['complete'])); queued_order = list(s['pending'])+([s['event']] if s['serial'] and s['depth']>0 and s['event'] is not None else [])
Why this case matters
Observer implementations need to preserve this state while subscriptions enter, execute, and leave their lifecycle.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(s):
return {
'queue': s['serial'] and s['depth']>0 and s['event'] is not None,
'enter': s['event'] is not None and not(s['serial'] and s['depth']>0) and s['depth']<s['limit'],
'outer_event': s['outer'],
'context': s['context'],
'unwind': s['frames'][:-1] if s['complete'] else list(s['frames']),
'drain': list(s['pending']) if s['complete'] and s['depth']<=1 else [],
'parent_cancel': False,
'overflow': s['event'] is not None and s['depth']>=s['limit'] and not(s['serial'] and s['depth']>0),
'next_depth': max(0,s['depth']-int(s['complete'])),
'queued_order': ([s['event']] if s['event'] is not None else [])+list(s['pending']),
}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 3, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 2, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 4, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': True, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 1, 'limit': 4, 'serial': True, 'pending': [], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': ['inner']}), ({'depth': 1, 'limit': 1, 'serial': True, 'pending': [], 'event': None, 'outer': 'outer', 'context': None, 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': []}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 3, 'limit': 4, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 2, 'queued_order': ['a', 'b']})], 2: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 6, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 5, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 8, 'serial': False, 'pending': [], 'event': 'inner', 'outer': None, 'context': None, 'cancel': False, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': True, 'outer_event': None, 'context': None, 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': []}), ({'depth': 1, 'limit': 8, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': True, 'complete': True, 'frames': []}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 6, 'limit': 1, 'serial': True, 'pending': [], 'event': 'inner', 'outer': None, 'context': None, 'cancel': False, 'complete': False, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 6, 'queued_order': ['inner']}), ({'depth': 1, 'limit': 0, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 1, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 6, 'limit': 8, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 5, 'queued_order': ['a', 'b']})], 3: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 9, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 8, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 1, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': True, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 1, 'limit': 12, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 9, 'limit': 1, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': 'ctx', 'cancel': False, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 8, 'queued_order': ['a', 'b']}), ({'depth': 9, 'limit': 12, 'serial': False, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 9, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 9, 'limit': 12, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 8, 'queued_order': ['a', 'b']})], 4: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 12, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 11, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 16, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 1, 'limit': 16, 'serial': True, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': False, 'complete': False, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': ['inner']}), ({'depth': 0, 'limit': 16, 'serial': False, 'pending': [], 'event': None, 'outer': 'outer', 'context': None, 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': []}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 12, 'limit': 16, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 11, 'queued_order': ['a', 'b']})], 5: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 15, 'limit': 20, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 14, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 15, 'limit': 1, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': False, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 14, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 20, 'serial': True, 'pending': [], 'event': None, 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': []}), ({'depth': 15, 'limit': 1, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 15, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 15, 'limit': 20, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 14, 'queued_order': ['a', 'b']})]}
for i,(state,expected) in enumerate(fixtures[N]):
check("transition "+str(i), solve(state), 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 |
|---|---|---|---|
| transition 0 | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': ['inner', 'a', 'b'], 'unwind': ['root', 'child']} | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root', 'child']} | Failed |
| transition 1 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['inner', 'a', 'b'], 'unwind': ['root']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['a', 'b', 'inner'], 'unwind': ['root']} | Failed |
| transition 2 | {'context': None, 'drain': ['a', 'b'], 'enter': True, 'next_depth': 0, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['inner', 'a', 'b'], 'unwind': ['root']} | {'context': None, 'drain': ['a', 'b'], 'enter': True, 'next_depth': 0, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | Failed |
| transition 3 | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['inner'], 'unwind': ['root']} | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['inner'], 'unwind': ['root']} | Passed |
| transition 4 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root']} | Passed |
| transition 5 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': ['inner'], 'unwind': ['root', 'child']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root', 'child']} | Failed |
| transition 6 | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': 'outer', 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': ['inner'], 'unwind': []} | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': 'outer', 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': []} | Failed |
| transition 7 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | Passed |
SHA-256 / 6947429788635e930482de110d889a17f8b3aff6bbf905fa8d1cc01e3ca1106a
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(s):
return {
'queue': s['serial'] and s['depth']>0 and s['event'] is not None,
'enter': s['event'] is not None and not(s['serial'] and s['depth']>0) and s['depth']<s['limit'],
'outer_event': s['outer'],
'context': s['context'],
'unwind': s['frames'][:-1] if s['complete'] else list(s['frames']),
'drain': list(s['pending']) if s['complete'] and s['depth']<=1 else [],
'parent_cancel': False,
'overflow': s['event'] is not None and s['depth']>=s['limit'] and not(s['serial'] and s['depth']>0),
'next_depth': max(0,s['depth']-int(s['complete'])),
'queued_order': list(s['pending'])+([s['event']] if s['serial'] and s['event'] is not None else []),
}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 3, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 2, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 4, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': True, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 1, 'limit': 4, 'serial': True, 'pending': [], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': ['inner']}), ({'depth': 1, 'limit': 1, 'serial': True, 'pending': [], 'event': None, 'outer': 'outer', 'context': None, 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': []}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 3, 'limit': 4, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 2, 'queued_order': ['a', 'b']})], 2: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 6, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 5, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 8, 'serial': False, 'pending': [], 'event': 'inner', 'outer': None, 'context': None, 'cancel': False, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': True, 'outer_event': None, 'context': None, 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': []}), ({'depth': 1, 'limit': 8, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': True, 'complete': True, 'frames': []}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 6, 'limit': 1, 'serial': True, 'pending': [], 'event': 'inner', 'outer': None, 'context': None, 'cancel': False, 'complete': False, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 6, 'queued_order': ['inner']}), ({'depth': 1, 'limit': 0, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 1, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 6, 'limit': 8, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 5, 'queued_order': ['a', 'b']})], 3: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 9, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 8, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 1, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': True, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 1, 'limit': 12, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 9, 'limit': 1, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': 'ctx', 'cancel': False, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 8, 'queued_order': ['a', 'b']}), ({'depth': 9, 'limit': 12, 'serial': False, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 9, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 9, 'limit': 12, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 8, 'queued_order': ['a', 'b']})], 4: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 12, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 11, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 16, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 1, 'limit': 16, 'serial': True, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': False, 'complete': False, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': ['inner']}), ({'depth': 0, 'limit': 16, 'serial': False, 'pending': [], 'event': None, 'outer': 'outer', 'context': None, 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': []}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 12, 'limit': 16, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 11, 'queued_order': ['a', 'b']})], 5: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 15, 'limit': 20, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 14, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 15, 'limit': 1, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': False, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 14, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 20, 'serial': True, 'pending': [], 'event': None, 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': []}), ({'depth': 15, 'limit': 1, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 15, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 15, 'limit': 20, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 14, 'queued_order': ['a', 'b']})]}
for i,(state,expected) in enumerate(fixtures[N]):
check("transition "+str(i), solve(state), 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 |
|---|---|---|---|
| transition 0 | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b', 'inner'], 'unwind': ['root', 'child']} | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root', 'child']} | Failed |
| transition 1 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['a', 'b', 'inner'], 'unwind': ['root']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['a', 'b', 'inner'], 'unwind': ['root']} | Passed |
| transition 2 | {'context': None, 'drain': ['a', 'b'], 'enter': True, 'next_depth': 0, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | {'context': None, 'drain': ['a', 'b'], 'enter': True, 'next_depth': 0, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | Passed |
| transition 3 | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['inner'], 'unwind': ['root']} | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['inner'], 'unwind': ['root']} | Passed |
| transition 4 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root']} | Passed |
| transition 5 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root', 'child']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root', 'child']} | Passed |
| transition 6 | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': 'outer', 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': []} | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': 'outer', 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': []} | Passed |
| transition 7 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | Passed |
SHA-256 / 7bc2020e9fb498c207fde016fe411edcd0ca5a769c9f2d80991026a7a05f6dbc
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(s):
return {
'queue': s['serial'] and s['depth']>0 and s['event'] is not None,
'enter': s['event'] is not None and not(s['serial'] and s['depth']>0) and s['depth']<s['limit'],
'outer_event': s['outer'],
'context': s['context'],
'unwind': s['frames'][:-1] if s['complete'] else list(s['frames']),
'drain': list(s['pending']) if s['complete'] and s['depth']<=1 else [],
'parent_cancel': False,
'overflow': s['event'] is not None and s['depth']>=s['limit'] and not(s['serial'] and s['depth']>0),
'next_depth': max(0,s['depth']-int(s['complete'])),
'queued_order': list(s['pending'])+([s['event']] if s['serial'] and s['depth']>0 and s['event'] is not None else []),
}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 3, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 2, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 4, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': True, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 1, 'limit': 4, 'serial': True, 'pending': [], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': ['inner']}), ({'depth': 1, 'limit': 1, 'serial': True, 'pending': [], 'event': None, 'outer': 'outer', 'context': None, 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': []}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 3, 'limit': 4, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 2, 'queued_order': ['a', 'b']})], 2: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 6, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 5, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 8, 'serial': False, 'pending': [], 'event': 'inner', 'outer': None, 'context': None, 'cancel': False, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': True, 'outer_event': None, 'context': None, 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': []}), ({'depth': 1, 'limit': 8, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': True, 'complete': True, 'frames': []}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 6, 'limit': 1, 'serial': True, 'pending': [], 'event': 'inner', 'outer': None, 'context': None, 'cancel': False, 'complete': False, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 6, 'queued_order': ['inner']}), ({'depth': 1, 'limit': 0, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 1, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 6, 'limit': 8, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 5, 'queued_order': ['a', 'b']})], 3: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 9, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 8, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 1, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': True, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 1, 'limit': 12, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 9, 'limit': 1, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': 'ctx', 'cancel': False, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 8, 'queued_order': ['a', 'b']}), ({'depth': 9, 'limit': 12, 'serial': False, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 9, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 9, 'limit': 12, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 8, 'queued_order': ['a', 'b']})], 4: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 12, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 11, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 16, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 1, 'limit': 16, 'serial': True, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': None, 'cancel': False, 'complete': False, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 1, 'queued_order': ['inner']}), ({'depth': 0, 'limit': 16, 'serial': False, 'pending': [], 'event': None, 'outer': 'outer', 'context': None, 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': None, 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': []}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 12, 'limit': 16, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 11, 'queued_order': ['a', 'b']})], 5: [({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root', 'child'], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 15, 'limit': 20, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 14, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 0, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': 'outer', 'context': 'ctx', 'cancel': True, 'complete': True, 'frames': ['root']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': ['a', 'b'], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': ['a', 'b']}), ({'depth': 15, 'limit': 1, 'serial': True, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': False, 'complete': True, 'frames': ['root', 'child']}, {'queue': True, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 14, 'queued_order': ['a', 'b', 'inner']}), ({'depth': 0, 'limit': 20, 'serial': True, 'pending': [], 'event': None, 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 0, 'queued_order': []}), ({'depth': 15, 'limit': 1, 'serial': False, 'pending': ['a', 'b'], 'event': 'inner', 'outer': None, 'context': 'ctx', 'cancel': True, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': None, 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 15, 'queued_order': ['a', 'b']}), ({'depth': 0, 'limit': 0, 'serial': False, 'pending': [], 'event': 'inner', 'outer': 'outer', 'context': 'ctx', 'cancel': False, 'complete': False, 'frames': []}, {'queue': False, 'enter': False, 'outer_event': 'outer', 'context': 'ctx', 'unwind': [], 'drain': [], 'parent_cancel': False, 'overflow': True, 'next_depth': 0, 'queued_order': []}), ({'depth': 15, 'limit': 20, 'serial': True, 'pending': ['a', 'b'], 'event': None, 'outer': None, 'context': None, 'cancel': True, 'complete': True, 'frames': ['root', 'child']}, {'queue': False, 'enter': False, 'outer_event': None, 'context': None, 'unwind': ['root'], 'drain': [], 'parent_cancel': False, 'overflow': False, 'next_depth': 14, 'queued_order': ['a', 'b']})]}
for i,(state,expected) in enumerate(fixtures[N]):
check("transition "+str(i), solve(state), 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 |
|---|---|---|---|
| transition 0 | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root', 'child']} | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root', 'child']} | Passed |
| transition 1 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['a', 'b', 'inner'], 'unwind': ['root']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['a', 'b', 'inner'], 'unwind': ['root']} | Passed |
| transition 2 | {'context': None, 'drain': ['a', 'b'], 'enter': True, 'next_depth': 0, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | {'context': None, 'drain': ['a', 'b'], 'enter': True, 'next_depth': 0, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | Passed |
| transition 3 | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['inner'], 'unwind': ['root']} | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': True, 'queued_order': ['inner'], 'unwind': ['root']} | Passed |
| transition 4 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 1, 'outer_event': 'outer', 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root']} | Passed |
| transition 5 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root', 'child']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': None, 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': ['root', 'child']} | Passed |
| transition 6 | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': 'outer', 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': []} | {'context': 'ctx', 'drain': [], 'enter': False, 'next_depth': 0, 'outer_event': 'outer', 'overflow': True, 'parent_cancel': False, 'queue': False, 'queued_order': [], 'unwind': []} | Passed |
| transition 7 | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | {'context': None, 'drain': [], 'enter': False, 'next_depth': 2, 'outer_event': None, 'overflow': False, 'parent_cancel': False, 'queue': False, 'queued_order': ['a', 'b'], 'unwind': ['root']} | Passed |
SHA-256 / 6b06cf57d9736de2502a2117aba5b84b0d4adc07bb216be4ea9ddbdfc774451e
Verification & scope
A deterministic, bounded, single-threaded transition planner. Returned plans model state changes; they do not implement a production event framework. 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:43:43.774004+00:00.
Case digest / c7ff73225998e736b37fad239131076b896043ed26b5047707e99177935981d3