FAILURE MAP
← Case archive

FA-42466 / Listener lifecycle / Open access

An empty completed input leaves combine-latest waiting forever · case 01

An empty completed input leaves combine-latest waiting forever; the returned lifecycle plan violates the stated transition contract.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The impossible decision in the combine-latest listener model is computed as False, losing a required lifecycle condition.

VERIFIED REPAIR

Compute the impossible decision from the complete contract: (s['left_done'] and not s['left_seen']) or (s['right_done'] and not s['right_seen']).

Unsuccessful approach: The partial repair uses s['left_done'] and s['right_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': False,
        '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 fixtureActualExpectedOutcome
transition 0{'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': 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': 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': False, '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}Failed
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 / a270b0b2f45e65985b09f5d4cb3bbd13b336f491586994167e1e652dd189d6da

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 s['right_done'],
        '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 fixtureActualExpectedOutcome
transition 0{'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': 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': 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': True, '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}Failed

SHA-256 / 7b18feb1f3eccca8420d530169122dce653ed01c22ce72dfc9e41fd2b9a5b7c4

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 fixtureActualExpectedOutcome
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.006729+00:00.

Case digest / b109fb6dacc454cd28b7f2ae4c0facb9afa34db2db75d2c37fd586a1d61dd6c7