FA-42546 / Listener lifecycle / Open access
A new outer notification reuses the previous inner generation · case 01
A new outer notification reuses the previous inner generation; the returned lifecycle plan violates the stated transition contract.
ROOT CAUSE
The generation decision in the switch-inner listener model is computed as s['generation'], losing a required lifecycle condition.
VERIFIED REPAIR
Compute the generation decision from the complete contract: s['generation']+int(s['outer_value']).
Unsuccessful approach: The partial repair uses s['generation']+1; a retained regression distinguishes it from the full transition.
Case contract
Plan switch-to-latest observer ownership. A new outer value replaces the active inner and advances an inner generation. Late values from the replaced generation are suppressed. Outer completion waits for the current inner, while an inner completion alone does not close a live outer. An error closes both. Dispose the old inner before starting the replacement, even if it emitted no value. Completion considers only active inner records belonging to the current generation; stale active records and current inactive records do not block it. 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: replace = s['outer_value'] and s['inner_active']; generation = s['generation']+int(s['outer_value']); accept = s['event_generation']==s['generation'] and s['inner_active'] and not s['cancel'] and s['error'] is None; outer_complete = s['outer_done'] and not any(active for generation,active in s['inner_records'] if generation==s['generation']); inner_complete = s['inner_done'] and s['outer_done']; start = s['outer_value'] and not s['outer_done'] and not s['cancel'] and s['error'] is None; transition_order = ['dispose','start'] if s['outer_value'] and s['inner_active'] else (['start'] if s['outer_value'] else []); active_after_done = s['inner_active'] and not(s['inner_done'] and s['event_generation']==s['generation']); dispose_outer = s['error'] is not None or s['cancel']; late_value = s['event_generation']!=s['generation']
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 {
'replace': s['outer_value'] and s['inner_active'],
'generation': s['generation'],
'accept': s['event_generation']==s['generation'] and s['inner_active'] and not s['cancel'] and s['error'] is None,
'outer_complete': s['outer_done'] and not any(active for generation,active in s['inner_records'] if generation==s['generation']),
'inner_complete': s['inner_done'] and s['outer_done'],
'start': s['outer_value'] and not s['outer_done'] and not s['cancel'] and s['error'] is None,
'transition_order': ['dispose','start'] if s['outer_value'] and s['inner_active'] else (['start'] if s['outer_value'] else []),
'active_after_done': s['inner_active'] and not(s['inner_done'] and s['event_generation']==s['generation']),
'dispose_outer': s['error'] is not None or s['cancel'],
'late_value': s['event_generation']!=s['generation'],
}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 2, 'event_generation': 2, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False], [2, True]]}, {'replace': True, 'generation': 3, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 2, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, False], [2, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 2, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 2, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, True], [2, False]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': False, 'generation': 2, 'event_generation': 2, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 2, 'accept': True, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': False, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 2, 'event_generation': 2, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, True], [2, False]]}, {'replace': False, 'generation': 2, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 2, 'event_generation': 2, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 3, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 2: [({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 4, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, True], [4, False]]}, {'replace': False, 'generation': 4, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 4, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False], [4, True]]}, {'replace': False, 'generation': 5, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 0, 'event_generation': 4, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, True], [4, False]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, False], [4, True]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 4, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False], [4, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 4, 'event_generation': 4, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 5, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 3: [({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False], [6, True]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 6, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, False], [6, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': True, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False], [6, True]]}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 6, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, True], [6, False]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, True], [6, False]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, False], [6, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 6, 'event_generation': 6, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 7, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 4: [({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 8, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False], [8, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 8, 'event_generation': 8, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 8, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 8, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, True], [8, False]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 8, 'event_generation': 8, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 9, 'accept': True, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': False, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 8, 'event_generation': 8, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 9, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 5: [({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': False, 'generation': 10, 'event_generation': 10, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, True], [10, False]]}, {'replace': True, 'generation': 11, 'accept': False, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 10, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, False], [10, True]]}, {'replace': False, 'generation': 10, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': True, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, False], [10, True]]}, {'replace': True, 'generation': 1, 'accept': True, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 10, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, True], [10, False]]}, {'replace': True, 'generation': 11, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 0, 'event_generation': 10, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 10, 'event_generation': 10, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 11, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})]}
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 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | Failed |
| transition 1 | {'accept': False, 'active_after_done': True, 'dispose_outer': True, 'generation': 0, 'inner_complete': True, 'late_value': True, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | {'accept': False, 'active_after_done': True, 'dispose_outer': True, 'generation': 0, 'inner_complete': True, 'late_value': True, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | Passed |
| transition 2 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 0, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': ['start']} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': ['start']} | Failed |
| transition 3 | {'accept': False, 'active_after_done': True, 'dispose_outer': False, 'generation': 0, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': True, 'start': True, 'transition_order': ['dispose', 'start']} | {'accept': False, 'active_after_done': True, 'dispose_outer': False, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': True, 'start': True, 'transition_order': ['dispose', 'start']} | Failed |
| transition 4 | {'accept': True, 'active_after_done': True, 'dispose_outer': False, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | {'accept': True, 'active_after_done': True, 'dispose_outer': False, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | Passed |
| transition 5 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | Passed |
| transition 6 | {'accept': False, 'active_after_done': False, 'dispose_outer': False, 'generation': 0, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | {'accept': False, 'active_after_done': False, 'dispose_outer': False, 'generation': 0, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | Passed |
| transition 7 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 2, 'inner_complete': True, 'late_value': False, 'outer_complete': True, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': True, 'late_value': False, 'outer_complete': True, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | Failed |
SHA-256 / 07c541336a28e74db8060deb379bc2c7d6fe02a925f3d91a8a07c5063f3a32d3
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(s):
return {
'replace': s['outer_value'] and s['inner_active'],
'generation': s['generation']+1,
'accept': s['event_generation']==s['generation'] and s['inner_active'] and not s['cancel'] and s['error'] is None,
'outer_complete': s['outer_done'] and not any(active for generation,active in s['inner_records'] if generation==s['generation']),
'inner_complete': s['inner_done'] and s['outer_done'],
'start': s['outer_value'] and not s['outer_done'] and not s['cancel'] and s['error'] is None,
'transition_order': ['dispose','start'] if s['outer_value'] and s['inner_active'] else (['start'] if s['outer_value'] else []),
'active_after_done': s['inner_active'] and not(s['inner_done'] and s['event_generation']==s['generation']),
'dispose_outer': s['error'] is not None or s['cancel'],
'late_value': s['event_generation']!=s['generation'],
}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 2, 'event_generation': 2, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False], [2, True]]}, {'replace': True, 'generation': 3, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 2, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, False], [2, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 2, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 2, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, True], [2, False]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': False, 'generation': 2, 'event_generation': 2, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 2, 'accept': True, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': False, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 2, 'event_generation': 2, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, True], [2, False]]}, {'replace': False, 'generation': 2, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 2, 'event_generation': 2, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 3, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 2: [({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 4, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, True], [4, False]]}, {'replace': False, 'generation': 4, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 4, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False], [4, True]]}, {'replace': False, 'generation': 5, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 0, 'event_generation': 4, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, True], [4, False]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, False], [4, True]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 4, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False], [4, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 4, 'event_generation': 4, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 5, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 3: [({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False], [6, True]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 6, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, False], [6, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': True, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False], [6, True]]}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 6, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, True], [6, False]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, True], [6, False]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, False], [6, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 6, 'event_generation': 6, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 7, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 4: [({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 8, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False], [8, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 8, 'event_generation': 8, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 8, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 8, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, True], [8, False]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 8, 'event_generation': 8, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 9, 'accept': True, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': False, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 8, 'event_generation': 8, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 9, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 5: [({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': False, 'generation': 10, 'event_generation': 10, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, True], [10, False]]}, {'replace': True, 'generation': 11, 'accept': False, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 10, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, False], [10, True]]}, {'replace': False, 'generation': 10, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': True, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, False], [10, True]]}, {'replace': True, 'generation': 1, 'accept': True, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 10, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, True], [10, False]]}, {'replace': True, 'generation': 11, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 0, 'event_generation': 10, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 10, 'event_generation': 10, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 11, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})]}
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 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | Passed |
| transition 1 | {'accept': False, 'active_after_done': True, 'dispose_outer': True, 'generation': 1, 'inner_complete': True, 'late_value': True, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | {'accept': False, 'active_after_done': True, 'dispose_outer': True, 'generation': 0, 'inner_complete': True, 'late_value': True, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | Failed |
| transition 2 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': ['start']} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': ['start']} | Passed |
| transition 3 | {'accept': False, 'active_after_done': True, 'dispose_outer': False, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': True, 'start': True, 'transition_order': ['dispose', 'start']} | {'accept': False, 'active_after_done': True, 'dispose_outer': False, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': True, 'start': True, 'transition_order': ['dispose', 'start']} | Passed |
| transition 4 | {'accept': True, 'active_after_done': True, 'dispose_outer': False, 'generation': 3, 'inner_complete': False, 'late_value': False, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | {'accept': True, 'active_after_done': True, 'dispose_outer': False, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | Failed |
| transition 5 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | Failed |
| transition 6 | {'accept': False, 'active_after_done': False, 'dispose_outer': False, 'generation': 1, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | {'accept': False, 'active_after_done': False, 'dispose_outer': False, 'generation': 0, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | Failed |
| transition 7 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': True, 'late_value': False, 'outer_complete': True, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': True, 'late_value': False, 'outer_complete': True, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | Passed |
SHA-256 / caebe6ed1cf1f4839092b68752cd5f11bc8a20b2d74118de0687be35be07db45
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(s):
return {
'replace': s['outer_value'] and s['inner_active'],
'generation': s['generation']+int(s['outer_value']),
'accept': s['event_generation']==s['generation'] and s['inner_active'] and not s['cancel'] and s['error'] is None,
'outer_complete': s['outer_done'] and not any(active for generation,active in s['inner_records'] if generation==s['generation']),
'inner_complete': s['inner_done'] and s['outer_done'],
'start': s['outer_value'] and not s['outer_done'] and not s['cancel'] and s['error'] is None,
'transition_order': ['dispose','start'] if s['outer_value'] and s['inner_active'] else (['start'] if s['outer_value'] else []),
'active_after_done': s['inner_active'] and not(s['inner_done'] and s['event_generation']==s['generation']),
'dispose_outer': s['error'] is not None or s['cancel'],
'late_value': s['event_generation']!=s['generation'],
}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = {1: [({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 2, 'event_generation': 2, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False], [2, True]]}, {'replace': True, 'generation': 3, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 2, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, False], [2, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 2, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 2, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, True], [2, False]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': False, 'generation': 2, 'event_generation': 2, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 2, 'accept': True, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': False, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 2, 'event_generation': 2, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, True], [2, False]]}, {'replace': False, 'generation': 2, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 2, 'event_generation': 2, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 3, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 2: [({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 4, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, True], [4, False]]}, {'replace': False, 'generation': 4, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 4, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False], [4, True]]}, {'replace': False, 'generation': 5, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 0, 'event_generation': 4, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, True], [4, False]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, False], [4, True]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 4, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False], [4, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 4, 'event_generation': 4, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 5, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 3: [({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, False], [6, True]]}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 6, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, False], [6, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': True, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False], [6, True]]}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 6, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, True], [6, False]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, True], [6, False]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, False], [6, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 6, 'event_generation': 6, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 7, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 4: [({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': True, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 8, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False], [8, True]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 8, 'event_generation': 8, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 8, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': True, 'inner_active': False, 'inner_done': True, 'generation': 0, 'event_generation': 8, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, True], [8, False]]}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': True, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 8, 'event_generation': 8, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 9, 'accept': True, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': False, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 8, 'event_generation': 8, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 9, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})], 5: [({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': False, 'generation': 10, 'event_generation': 10, 'error': 'bad', 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': [[0, True], [10, False]]}, {'replace': True, 'generation': 11, 'accept': False, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': True, 'late_value': False}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 10, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, False], [10, True]]}, {'replace': False, 'generation': 10, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': True, 'outer_done': True, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': 'bad', 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 1, 'accept': False, 'outer_complete': True, 'inner_complete': False, 'start': False, 'transition_order': ['start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': True, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': True, 'inner_records': [[0, False], [10, True]]}, {'replace': True, 'generation': 1, 'accept': True, 'outer_complete': False, 'inner_complete': False, 'start': True, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 10, 'event_generation': 0, 'error': None, 'cancel': True, 'inner_value': 'value', 'inner_seen': False, 'inner_records': [[0, True], [10, False]]}, {'replace': True, 'generation': 11, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': True, 'dispose_outer': True, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': True, 'inner_done': False, 'generation': 0, 'event_generation': 10, 'error': None, 'cancel': False, 'inner_value': 'value', 'inner_seen': True, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': True, 'dispose_outer': False, 'late_value': True}), ({'outer_value': False, 'outer_done': False, 'inner_active': False, 'inner_done': False, 'generation': 0, 'event_generation': 0, 'error': None, 'cancel': False, 'inner_value': None, 'inner_seen': False, 'inner_records': []}, {'replace': False, 'generation': 0, 'accept': False, 'outer_complete': False, 'inner_complete': False, 'start': False, 'transition_order': [], 'active_after_done': False, 'dispose_outer': False, 'late_value': False}), ({'outer_value': True, 'outer_done': True, 'inner_active': True, 'inner_done': True, 'generation': 10, 'event_generation': 10, 'error': 'bad', 'cancel': True, 'inner_value': 'value', 'inner_seen': True, 'inner_records': [[0, False]]}, {'replace': True, 'generation': 11, 'accept': False, 'outer_complete': True, 'inner_complete': True, 'start': False, 'transition_order': ['dispose', 'start'], 'active_after_done': False, 'dispose_outer': True, 'late_value': False})]}
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 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | Passed |
| transition 1 | {'accept': False, 'active_after_done': True, 'dispose_outer': True, 'generation': 0, 'inner_complete': True, 'late_value': True, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | {'accept': False, 'active_after_done': True, 'dispose_outer': True, 'generation': 0, 'inner_complete': True, 'late_value': True, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | Passed |
| transition 2 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': ['start']} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': ['start']} | Passed |
| transition 3 | {'accept': False, 'active_after_done': True, 'dispose_outer': False, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': True, 'start': True, 'transition_order': ['dispose', 'start']} | {'accept': False, 'active_after_done': True, 'dispose_outer': False, 'generation': 1, 'inner_complete': False, 'late_value': True, 'outer_complete': False, 'replace': True, 'start': True, 'transition_order': ['dispose', 'start']} | Passed |
| transition 4 | {'accept': True, 'active_after_done': True, 'dispose_outer': False, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | {'accept': True, 'active_after_done': True, 'dispose_outer': False, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': True, 'replace': False, 'start': False, 'transition_order': []} | Passed |
| transition 5 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 2, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | Passed |
| transition 6 | {'accept': False, 'active_after_done': False, 'dispose_outer': False, 'generation': 0, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | {'accept': False, 'active_after_done': False, 'dispose_outer': False, 'generation': 0, 'inner_complete': False, 'late_value': False, 'outer_complete': False, 'replace': False, 'start': False, 'transition_order': []} | Passed |
| transition 7 | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': True, 'late_value': False, 'outer_complete': True, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | {'accept': False, 'active_after_done': False, 'dispose_outer': True, 'generation': 3, 'inner_complete': True, 'late_value': False, 'outer_complete': True, 'replace': True, 'start': False, 'transition_order': ['dispose', 'start']} | Passed |
SHA-256 / 60e215ae62bfd8699595fdd5d4dde1981917260c08f5cb4e9accf02b50f6ae51
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.767940+00:00.
Case digest / 42c840746d08ee6c377ba593292a1b49a295f14fb989b395607aab1494db914f