FA-42471 / Listener lifecycle / Open access
Combine-latest completes when only a valued input completes · case 01
Combine-latest completes when only a valued input completes; the returned lifecycle plan violates the stated transition contract.
ROOT CAUSE
The complete decision in the combine-latest listener model is computed as s['left_done'] or s['right_done'], losing a required lifecycle condition.
VERIFIED REPAIR
Compute the complete decision from the complete contract: s['left_done'] and s['right_done'].
Unsuccessful approach: The partial repair uses s['left_done']; a retained regression distinguishes it from the full transition.
Case contract
Plan a two-input combine-latest observer. A value may be None, so readiness comes from separate seen flags. Updating one side preserves the other. Emit a pair only after both inputs have been seen. A completed input with no value makes a pair impossible; completion after a value keeps its last value usable. Any source error terminates both subscriptions. 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: ready = s['left_seen'] and s['right_seen']; left = s['value'] if s['side']=='left' else s['left']; right = s['value'] if s['side']=='right' else s['right']; left_seen = s['left_seen'] or s['side']=='left'; right_seen = s['right_seen'] or s['side']=='right'; impossible = (s['left_done'] and not s['left_seen']) or (s['right_done'] and not s['right_seen']); complete = s['left_done'] and s['right_done']; pair = [s['left'],s['right']]; cancel_both = ['left','right'] if s['error'] is not None else []; usable_left = s['left_seen']
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 {
'ready': s['left_seen'] and s['right_seen'],
'left': s['value'] if s['side']=='left' else s['left'],
'right': s['value'] if s['side']=='right' else s['right'],
'left_seen': s['left_seen'] or s['side']=='left',
'right_seen': s['right_seen'] or s['side']=='right',
'impossible': (s['left_done'] and not s['left_seen']) or (s['right_done'] and not s['right_seen']),
'complete': s['left_done'] or s['right_done'],
'pair': [s['left'],s['right']],
'cancel_both': ['left','right'] if s['error'] is not None else [],
'usable_left': s['left_seen'],
}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 0}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 0, 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': True, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 3}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': None, 'credit': 3}, {'ready': True, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 3}, {'ready': True, 'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', None], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 3}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 2: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 6}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': True, 'right_done': False, 'error': None, 'credit': 6}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': False, 'error': None, 'credit': 1}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': 0, 'left_seen': False, 'right_seen': False, 'side': 'right', 'value': 'new', 'left_done': False, 'right_done': True, 'error': None, 'credit': 1}, {'ready': False, 'left': 'L', 'right': 'new', 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 0], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': False, 'right_done': True, 'error': 'upstream', 'credit': 0}, {'ready': False, 'left': 0, 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 6}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 6}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 3: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': None, 'left_seen': True, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': True, 'right_done': True, 'error': None, 'credit': 1}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': True, 'pair': ['L', None], 'cancel_both': [], 'usable_left': True}), ({'left': None, 'right': 0, 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 9}, {'ready': False, 'left': 'new', 'right': 0, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, 0], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 'L', 'right': 0, 'left_seen': False, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 1}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 0], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': False, 'right_done': True, 'error': None, 'credit': 9}, {'ready': False, 'left': 0, 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': [0, 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': False, 'right_done': True, 'error': 'upstream', 'credit': 0}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 9}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 4: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 0, 'right': 0, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': None, 'credit': 12}, {'ready': True, 'left': 0, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': [0, 0], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': None, 'right': 0, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': False, 'right_done': True, 'error': 'upstream', 'credit': 0}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, 0], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 0, 'right': 0, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': True, 'error': None, 'credit': 1}, {'ready': False, 'left': 'new', 'right': 0, 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': True, 'pair': [0, 0], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': None, 'left_seen': False, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 12}, {'ready': False, 'left': 0, 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': [0, None], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 12}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 5: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 15}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': True, 'error': None, 'credit': 15}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': False, 'right_done': True, 'error': None, 'credit': 0}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', None], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 15}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 0, 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 15}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 15}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})]}
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 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | Failed |
| transition 1 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | Failed |
| transition 2 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': [0, 'R'], 'ready': False, 'right': 'R', 'right_seen': True, 'usable_left': False} | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': [0, 'R'], 'ready': False, 'right': 'R', 'right_seen': True, 'usable_left': False} | Passed |
| transition 3 | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | Passed |
| transition 4 | {'cancel_both': [], 'complete': True, 'impossible': False, 'left': None, 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'R', 'right_seen': True, 'usable_left': True} | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'R', 'right_seen': True, 'usable_left': True} | Failed |
| transition 5 | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', None], 'ready': True, 'right': None, 'right_seen': True, 'usable_left': True} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', None], 'ready': True, 'right': None, 'right_seen': True, 'usable_left': True} | Passed |
| transition 6 | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': False, 'right': None, 'right_seen': False, 'usable_left': False} | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': False, 'right': None, 'right_seen': False, 'usable_left': False} | Passed |
| transition 7 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | Passed |
SHA-256 / f04b0b6d5b72411d736e4a550da76082ec308bac9e2cfae4ddf294aa6dbba5f5
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(s):
return {
'ready': s['left_seen'] and s['right_seen'],
'left': s['value'] if s['side']=='left' else s['left'],
'right': s['value'] if s['side']=='right' else s['right'],
'left_seen': s['left_seen'] or s['side']=='left',
'right_seen': s['right_seen'] or s['side']=='right',
'impossible': (s['left_done'] and not s['left_seen']) or (s['right_done'] and not s['right_seen']),
'complete': s['left_done'],
'pair': [s['left'],s['right']],
'cancel_both': ['left','right'] if s['error'] is not None else [],
'usable_left': s['left_seen'],
}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 0}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 0, 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': True, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 3}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': None, 'credit': 3}, {'ready': True, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 3}, {'ready': True, 'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', None], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 3}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 2: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 6}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': True, 'right_done': False, 'error': None, 'credit': 6}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': False, 'error': None, 'credit': 1}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': 0, 'left_seen': False, 'right_seen': False, 'side': 'right', 'value': 'new', 'left_done': False, 'right_done': True, 'error': None, 'credit': 1}, {'ready': False, 'left': 'L', 'right': 'new', 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 0], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': False, 'right_done': True, 'error': 'upstream', 'credit': 0}, {'ready': False, 'left': 0, 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 6}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 6}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 3: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': None, 'left_seen': True, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': True, 'right_done': True, 'error': None, 'credit': 1}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': True, 'pair': ['L', None], 'cancel_both': [], 'usable_left': True}), ({'left': None, 'right': 0, 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 9}, {'ready': False, 'left': 'new', 'right': 0, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, 0], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 'L', 'right': 0, 'left_seen': False, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 1}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 0], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': False, 'right_done': True, 'error': None, 'credit': 9}, {'ready': False, 'left': 0, 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': [0, 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': False, 'right_done': True, 'error': 'upstream', 'credit': 0}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 9}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 4: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 0, 'right': 0, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': None, 'credit': 12}, {'ready': True, 'left': 0, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': [0, 0], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': None, 'right': 0, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': False, 'right_done': True, 'error': 'upstream', 'credit': 0}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, 0], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 0, 'right': 0, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': True, 'error': None, 'credit': 1}, {'ready': False, 'left': 'new', 'right': 0, 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': True, 'pair': [0, 0], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': None, 'left_seen': False, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 12}, {'ready': False, 'left': 0, 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': [0, None], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 12}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 5: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 15}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': True, 'error': None, 'credit': 15}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': False, 'right_done': True, 'error': None, 'credit': 0}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', None], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 15}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 0, 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 15}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 15}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})]}
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 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | Failed |
| transition 1 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | Failed |
| transition 2 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': [0, 'R'], 'ready': False, 'right': 'R', 'right_seen': True, 'usable_left': False} | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': [0, 'R'], 'ready': False, 'right': 'R', 'right_seen': True, 'usable_left': False} | Passed |
| transition 3 | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | Passed |
| transition 4 | {'cancel_both': [], 'complete': True, 'impossible': False, 'left': None, 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'R', 'right_seen': True, 'usable_left': True} | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'R', 'right_seen': True, 'usable_left': True} | Failed |
| transition 5 | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', None], 'ready': True, 'right': None, 'right_seen': True, 'usable_left': True} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', None], 'ready': True, 'right': None, 'right_seen': True, 'usable_left': True} | Passed |
| transition 6 | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': False, 'right': None, 'right_seen': False, 'usable_left': False} | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': False, 'right': None, 'right_seen': False, 'usable_left': False} | Passed |
| transition 7 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | Passed |
SHA-256 / f862f1c85d2c7c1c693486ee6f23b4d4f8aa1e62edbf4e42c62c8731f76c004d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(s):
return {
'ready': s['left_seen'] and s['right_seen'],
'left': s['value'] if s['side']=='left' else s['left'],
'right': s['value'] if s['side']=='right' else s['right'],
'left_seen': s['left_seen'] or s['side']=='left',
'right_seen': s['right_seen'] or s['side']=='right',
'impossible': (s['left_done'] and not s['left_seen']) or (s['right_done'] and not s['right_seen']),
'complete': s['left_done'] and s['right_done'],
'pair': [s['left'],s['right']],
'cancel_both': ['left','right'] if s['error'] is not None else [],
'usable_left': s['left_seen'],
}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 0}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 0, 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': True, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 3}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': None, 'credit': 3}, {'ready': True, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 3}, {'ready': True, 'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', None], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 3}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 2: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 6}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': True, 'right_done': False, 'error': None, 'credit': 6}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': False, 'error': None, 'credit': 1}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': 0, 'left_seen': False, 'right_seen': False, 'side': 'right', 'value': 'new', 'left_done': False, 'right_done': True, 'error': None, 'credit': 1}, {'ready': False, 'left': 'L', 'right': 'new', 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 0], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': False, 'right_done': True, 'error': 'upstream', 'credit': 0}, {'ready': False, 'left': 0, 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 6}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 6}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 3: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 'L', 'right': None, 'left_seen': True, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': True, 'right_done': True, 'error': None, 'credit': 1}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': True, 'pair': ['L', None], 'cancel_both': [], 'usable_left': True}), ({'left': None, 'right': 0, 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 9}, {'ready': False, 'left': 'new', 'right': 0, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, 0], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 'L', 'right': 0, 'left_seen': False, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 1}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': ['L', 0], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': False, 'right_done': True, 'error': None, 'credit': 9}, {'ready': False, 'left': 0, 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': [0, 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': False, 'right_done': True, 'error': 'upstream', 'credit': 0}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 9}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 4: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': 0, 'right': 0, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': None, 'credit': 12}, {'ready': True, 'left': 0, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': [0, 0], 'cancel_both': [], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': None, 'right': 0, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': False, 'right_done': True, 'error': 'upstream', 'credit': 0}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, 0], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 0, 'right': 0, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': True, 'error': None, 'credit': 1}, {'ready': False, 'left': 'new', 'right': 0, 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': True, 'pair': [0, 0], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': None, 'left_seen': False, 'right_seen': True, 'side': 'right', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 12}, {'ready': False, 'left': 0, 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': [0, None], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 12}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})], 5: [({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 15}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': True, 'complete': False, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': False}), ({'left': None, 'right': None, 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': False, 'error': 'upstream', 'credit': 1}, {'ready': True, 'left': None, 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 'L', 'right': 'R', 'left_seen': False, 'right_seen': True, 'side': 'left', 'value': 'new', 'left_done': True, 'right_done': True, 'error': None, 'credit': 15}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': True, 'impossible': True, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'right', 'value': None, 'left_done': False, 'right_done': True, 'error': None, 'credit': 0}, {'ready': False, 'left': 'L', 'right': None, 'left_seen': False, 'right_seen': True, 'impossible': True, 'complete': False, 'pair': ['L', None], 'cancel_both': [], 'usable_left': False}), ({'left': 0, 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': 'new', 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 15}, {'ready': False, 'left': 'new', 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': 0, 'right': 'R', 'left_seen': True, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': 'upstream', 'credit': 15}, {'ready': False, 'left': None, 'right': 'R', 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [0, 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True}), ({'left': None, 'right': None, 'left_seen': False, 'right_seen': False, 'side': 'left', 'value': None, 'left_done': False, 'right_done': False, 'error': None, 'credit': 0}, {'ready': False, 'left': None, 'right': None, 'left_seen': True, 'right_seen': False, 'impossible': False, 'complete': False, 'pair': [None, None], 'cancel_both': [], 'usable_left': False}), ({'left': 'L', 'right': 'R', 'left_seen': True, 'right_seen': True, 'side': 'right', 'value': 'new', 'left_done': True, 'right_done': True, 'error': 'upstream', 'credit': 15}, {'ready': True, 'left': 'L', 'right': 'new', 'left_seen': True, 'right_seen': True, 'impossible': False, 'complete': True, 'pair': ['L', 'R'], 'cancel_both': ['left', 'right'], 'usable_left': True})]}
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 | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | Passed |
| transition 1 | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | Passed |
| transition 2 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': [0, 'R'], 'ready': False, 'right': 'R', 'right_seen': True, 'usable_left': False} | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': True, 'left': 'new', 'left_seen': True, 'pair': [0, 'R'], 'ready': False, 'right': 'R', 'right_seen': True, 'usable_left': False} | Passed |
| transition 3 | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'new', 'left_seen': True, 'pair': ['L', 'R'], 'ready': False, 'right': 'R', 'right_seen': False, 'usable_left': False} | Passed |
| transition 4 | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'R', 'right_seen': True, 'usable_left': True} | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'R', 'right_seen': True, 'usable_left': True} | Passed |
| transition 5 | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', None], 'ready': True, 'right': None, 'right_seen': True, 'usable_left': True} | {'cancel_both': ['left', 'right'], 'complete': False, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', None], 'ready': True, 'right': None, 'right_seen': True, 'usable_left': True} | Passed |
| transition 6 | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': False, 'right': None, 'right_seen': False, 'usable_left': False} | {'cancel_both': [], 'complete': False, 'impossible': False, 'left': None, 'left_seen': True, 'pair': [None, None], 'ready': False, 'right': None, 'right_seen': False, 'usable_left': False} | Passed |
| transition 7 | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | {'cancel_both': ['left', 'right'], 'complete': True, 'impossible': False, 'left': 'L', 'left_seen': True, 'pair': ['L', 'R'], 'ready': True, 'right': 'new', 'right_seen': True, 'usable_left': True} | Passed |
SHA-256 / 81cc54f38560a6b4e6aca303be5bcd8591fd33c0e57a9ecab84141a2fa96cc41
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:52.051027+00:00.
Case digest / 88c333711b995d0eec19a14829a250988ce56a015b6e876f29fba315b26b8a10