FA-24491 / Client state / Open access
Nested client render failure boundaries: Boundary cannot catch itself · case 01
Boundary cannot catch itself.
ROOT CAUSE
The boundary-cannot-catch-itself client decision evaluates `[k for k,enabled in ancestors if enabled]` instead of `[k for k,enabled in ancestors if enabled and k!=failed]`.
VERIFIED REPAIR
Apply the modeled boundary-cannot-catch-itself rule: `[k for k,enabled in ancestors if enabled and k!=failed]`.
Unsuccessful approach: The partial repair `[k for k,enabled in ancestors if k!=failed]` still violates the explicit fixture contract.
Case contract
This bounded render boundary model walks ancestors inside-out, excludes a failing boundary from catching itself, and catches render failures only. Reset keys compare shape and scalar types; event and asynchronous failures propagate to their callers. Operation boundary-cannot-catch-itself has the six explicit input/output oracles below.
Why this case matters
An offline client lifecycle model that isolates a state-management defect without DOM rendering or network services.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
ancestors, failed, reset_keys, previous_keys, handled, event_kind = s
if operation == 'nearest-eligible-boundary':
return next((k for k,enabled in reversed(ancestors) if enabled and k!=failed),None)
if operation == 'boundary-cannot-catch-itself':
return [k for k,enabled in ancestors if enabled]
if operation == 'reset-key-type-and-length':
return len(reset_keys)!=len(previous_keys) or any(type(a)!=type(b) or a!=b for a,b in zip(reset_keys,previous_keys))
if operation == 'render-only-catch':
return event_kind=='render'
if operation == 'unhandled-root-escalation':
return not any(enabled and k!=failed for k,enabled in ancestors)
if operation == 'capture-path-inside-out':
return [k for k,enabled in reversed(ancestors) if enabled and k!=failed]
if operation == 'reported-error-dedup':
return not handled
if operation == 'boundary-disabled-fallback':
return [k for k,enabled in ancestors if not enabled]
if operation == 'reset-clears-handled-marker':
return handled and reset_keys==previous_keys
if operation == 'event-error-propagation':
return 'caller' if event_kind!='render' else 'boundary'
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('nearest-eligible-boundary scenario 1', solve('nearest-eligible-boundary', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), 'outer')
check('nearest-eligible-boundary scenario 2', solve('nearest-eligible-boundary', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), 'outer')
check('nearest-eligible-boundary scenario 3', solve('nearest-eligible-boundary', ([], 'root',[1],[1],False,'render')), None)
check('nearest-eligible-boundary scenario 4', solve('nearest-eligible-boundary', ([('outer',True)],'leaf',[0],[False],True,'event')), 'outer')
check('nearest-eligible-boundary scenario 5', solve('nearest-eligible-boundary', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), 'inner')
check('nearest-eligible-boundary scenario 6', solve('nearest-eligible-boundary', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), 'inner')
check('boundary-cannot-catch-itself scenario 1', solve('boundary-cannot-catch-itself', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), ['outer'])
check('boundary-cannot-catch-itself scenario 2', solve('boundary-cannot-catch-itself', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), ['outer'])
check('boundary-cannot-catch-itself scenario 3', solve('boundary-cannot-catch-itself', ([], 'root',[1],[1],False,'render')), [])
check('boundary-cannot-catch-itself scenario 4', solve('boundary-cannot-catch-itself', ([('outer',True)],'leaf',[0],[False],True,'event')), ['outer'])
check('boundary-cannot-catch-itself scenario 5', solve('boundary-cannot-catch-itself', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), ['outer','inner'])
check('boundary-cannot-catch-itself scenario 6', solve('boundary-cannot-catch-itself', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), ['inner'])
check('reset-key-type-and-length scenario 1', solve('reset-key-type-and-length', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), True)
check('reset-key-type-and-length scenario 2', solve('reset-key-type-and-length', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), False)
check('reset-key-type-and-length scenario 3', solve('reset-key-type-and-length', ([], 'root',[1],[1],False,'render')), False)
check('reset-key-type-and-length scenario 4', solve('reset-key-type-and-length', ([('outer',True)],'leaf',[0],[False],True,'event')), True)
check('reset-key-type-and-length scenario 5', solve('reset-key-type-and-length', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), True)
check('reset-key-type-and-length scenario 6', solve('reset-key-type-and-length', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('render-only-catch scenario 1', solve('render-only-catch', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), True)
check('render-only-catch scenario 2', solve('render-only-catch', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), True)
check('render-only-catch scenario 3', solve('render-only-catch', ([], 'root',[1],[1],False,'render')), True)
check('render-only-catch scenario 4', solve('render-only-catch', ([('outer',True)],'leaf',[0],[False],True,'event')), False)
check('render-only-catch scenario 5', solve('render-only-catch', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), True)
check('render-only-catch scenario 6', solve('render-only-catch', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('unhandled-root-escalation scenario 1', solve('unhandled-root-escalation', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), False)
check('unhandled-root-escalation scenario 2', solve('unhandled-root-escalation', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), False)
check('unhandled-root-escalation scenario 3', solve('unhandled-root-escalation', ([], 'root',[1],[1],False,'render')), True)
check('unhandled-root-escalation scenario 4', solve('unhandled-root-escalation', ([('outer',True)],'leaf',[0],[False],True,'event')), False)
check('unhandled-root-escalation scenario 5', solve('unhandled-root-escalation', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), False)
check('unhandled-root-escalation scenario 6', solve('unhandled-root-escalation', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('capture-path-inside-out scenario 1', solve('capture-path-inside-out', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), ['outer'])
check('capture-path-inside-out scenario 2', solve('capture-path-inside-out', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), ['outer'])
check('capture-path-inside-out scenario 3', solve('capture-path-inside-out', ([], 'root',[1],[1],False,'render')), [])
check('capture-path-inside-out scenario 4', solve('capture-path-inside-out', ([('outer',True)],'leaf',[0],[False],True,'event')), ['outer'])
check('capture-path-inside-out scenario 5', solve('capture-path-inside-out', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), ['inner','outer'])
check('capture-path-inside-out scenario 6', solve('capture-path-inside-out', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), ['inner'])
check('reported-error-dedup scenario 1', solve('reported-error-dedup', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), True)
check('reported-error-dedup scenario 2', solve('reported-error-dedup', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), True)
check('reported-error-dedup scenario 3', solve('reported-error-dedup', ([], 'root',[1],[1],False,'render')), True)
check('reported-error-dedup scenario 4', solve('reported-error-dedup', ([('outer',True)],'leaf',[0],[False],True,'event')), False)
check('reported-error-dedup scenario 5', solve('reported-error-dedup', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), False)
check('reported-error-dedup scenario 6', solve('reported-error-dedup', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), True)
check('boundary-disabled-fallback scenario 1', solve('boundary-disabled-fallback', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), [])
check('boundary-disabled-fallback scenario 2', solve('boundary-disabled-fallback', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), ['inner'])
check('boundary-disabled-fallback scenario 3', solve('boundary-disabled-fallback', ([], 'root',[1],[1],False,'render')), [])
check('boundary-disabled-fallback scenario 4', solve('boundary-disabled-fallback', ([('outer',True)],'leaf',[0],[False],True,'event')), [])
check('boundary-disabled-fallback scenario 5', solve('boundary-disabled-fallback', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), [])
check('boundary-disabled-fallback scenario 6', solve('boundary-disabled-fallback', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), ['outer'])
check('reset-clears-handled-marker scenario 1', solve('reset-clears-handled-marker', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), False)
check('reset-clears-handled-marker scenario 2', solve('reset-clears-handled-marker', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), False)
check('reset-clears-handled-marker scenario 3', solve('reset-clears-handled-marker', ([], 'root',[1],[1],False,'render')), False)
check('reset-clears-handled-marker scenario 4', solve('reset-clears-handled-marker', ([('outer',True)],'leaf',[0],[False],True,'event')), True)
check('reset-clears-handled-marker scenario 5', solve('reset-clears-handled-marker', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), False)
check('reset-clears-handled-marker scenario 6', solve('reset-clears-handled-marker', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('event-error-propagation scenario 1', solve('event-error-propagation', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), 'boundary')
check('event-error-propagation scenario 2', solve('event-error-propagation', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), 'boundary')
check('event-error-propagation scenario 3', solve('event-error-propagation', ([], 'root',[1],[1],False,'render')), 'boundary')
check('event-error-propagation scenario 4', solve('event-error-propagation', ([('outer',True)],'leaf',[0],[False],True,'event')), 'caller')
check('event-error-propagation scenario 5', solve('event-error-propagation', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), 'boundary')
check('event-error-propagation scenario 6', solve('event-error-propagation', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), 'caller')
check('only disabled ancestor cannot intercept failure: nearest-eligible-boundary', solve('nearest-eligible-boundary', ([('outer',False)],'leaf',[],[],False,'render')), None)
check('only disabled ancestor cannot intercept failure: boundary-cannot-catch-itself', solve('boundary-cannot-catch-itself', ([('outer',False)],'leaf',[],[],False,'render')), [])
check('only disabled ancestor cannot intercept failure: reset-key-type-and-length', solve('reset-key-type-and-length', ([('outer',False)],'leaf',[],[],False,'render')), False)
check('only disabled ancestor cannot intercept failure: render-only-catch', solve('render-only-catch', ([('outer',False)],'leaf',[],[],False,'render')), True)
check('only disabled ancestor cannot intercept failure: unhandled-root-escalation', solve('unhandled-root-escalation', ([('outer',False)],'leaf',[],[],False,'render')), True)
check('only disabled ancestor cannot intercept failure: capture-path-inside-out', solve('capture-path-inside-out', ([('outer',False)],'leaf',[],[],False,'render')), [])
check('only disabled ancestor cannot intercept failure: reported-error-dedup', solve('reported-error-dedup', ([('outer',False)],'leaf',[],[],False,'render')), True)
check('only disabled ancestor cannot intercept failure: boundary-disabled-fallback', solve('boundary-disabled-fallback', ([('outer',False)],'leaf',[],[],False,'render')), ['outer'])
check('only disabled ancestor cannot intercept failure: reset-clears-handled-marker', solve('reset-clears-handled-marker', ([('outer',False)],'leaf',[],[],False,'render')), False)
check('only disabled ancestor cannot intercept failure: event-error-propagation', solve('event-error-propagation', ([('outer',False)],'leaf',[],[],False,'render')), 'boundary')
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 |
|---|---|---|---|
| nearest-eligible-boundary scenario 1 | outer | outer | Passed |
| nearest-eligible-boundary scenario 2 | outer | outer | Passed |
| nearest-eligible-boundary scenario 3 | None | None | Passed |
| nearest-eligible-boundary scenario 4 | outer | outer | Passed |
| nearest-eligible-boundary scenario 5 | inner | inner | Passed |
| nearest-eligible-boundary scenario 6 | inner | inner | Passed |
| boundary-cannot-catch-itself scenario 1 | ['outer', 'inner'] | ['outer'] | Failed |
| boundary-cannot-catch-itself scenario 2 | ['outer'] | ['outer'] | Passed |
| boundary-cannot-catch-itself scenario 3 | [] | [] | Passed |
| boundary-cannot-catch-itself scenario 4 | ['outer'] | ['outer'] | Passed |
| boundary-cannot-catch-itself scenario 5 | ['outer', 'inner'] | ['outer', 'inner'] | Passed |
| boundary-cannot-catch-itself scenario 6 | ['inner'] | ['inner'] | Passed |
| reset-key-type-and-length scenario 1 | True | True | Passed |
| reset-key-type-and-length scenario 2 | False | False | Passed |
| reset-key-type-and-length scenario 3 | False | False | Passed |
| reset-key-type-and-length scenario 4 | True | True | Passed |
| reset-key-type-and-length scenario 5 | True | True | Passed |
| reset-key-type-and-length scenario 6 | False | False | Passed |
| render-only-catch scenario 1 | True | True | Passed |
| render-only-catch scenario 2 | True | True | Passed |
| render-only-catch scenario 3 | True | True | Passed |
| render-only-catch scenario 4 | False | False | Passed |
| render-only-catch scenario 5 | True | True | Passed |
| render-only-catch scenario 6 | False | False | Passed |
| unhandled-root-escalation scenario 1 | False | False | Passed |
| unhandled-root-escalation scenario 2 | False | False | Passed |
| unhandled-root-escalation scenario 3 | True | True | Passed |
| unhandled-root-escalation scenario 4 | False | False | Passed |
| unhandled-root-escalation scenario 5 | False | False | Passed |
| unhandled-root-escalation scenario 6 | False | False | Passed |
| capture-path-inside-out scenario 1 | ['outer'] | ['outer'] | Passed |
| capture-path-inside-out scenario 2 | ['outer'] | ['outer'] | Passed |
| capture-path-inside-out scenario 3 | [] | [] | Passed |
| capture-path-inside-out scenario 4 | ['outer'] | ['outer'] | Passed |
| capture-path-inside-out scenario 5 | ['inner', 'outer'] | ['inner', 'outer'] | Passed |
| capture-path-inside-out scenario 6 | ['inner'] | ['inner'] | Passed |
| reported-error-dedup scenario 1 | True | True | Passed |
| reported-error-dedup scenario 2 | True | True | Passed |
| reported-error-dedup scenario 3 | True | True | Passed |
| reported-error-dedup scenario 4 | False | False | Passed |
| reported-error-dedup scenario 5 | False | False | Passed |
| reported-error-dedup scenario 6 | True | True | Passed |
| boundary-disabled-fallback scenario 1 | [] | [] | Passed |
| boundary-disabled-fallback scenario 2 | ['inner'] | ['inner'] | Passed |
| boundary-disabled-fallback scenario 3 | [] | [] | Passed |
| boundary-disabled-fallback scenario 4 | [] | [] | Passed |
| boundary-disabled-fallback scenario 5 | [] | [] | Passed |
| boundary-disabled-fallback scenario 6 | ['outer'] | ['outer'] | Passed |
| reset-clears-handled-marker scenario 1 | False | False | Passed |
| reset-clears-handled-marker scenario 2 | False | False | Passed |
| reset-clears-handled-marker scenario 3 | False | False | Passed |
| reset-clears-handled-marker scenario 4 | True | True | Passed |
| reset-clears-handled-marker scenario 5 | False | False | Passed |
| reset-clears-handled-marker scenario 6 | False | False | Passed |
| event-error-propagation scenario 1 | boundary | boundary | Passed |
| event-error-propagation scenario 2 | boundary | boundary | Passed |
| event-error-propagation scenario 3 | boundary | boundary | Passed |
| event-error-propagation scenario 4 | caller | caller | Passed |
| event-error-propagation scenario 5 | boundary | boundary | Passed |
| event-error-propagation scenario 6 | caller | caller | Passed |
| only disabled ancestor cannot intercept failure: nearest-eligible-boundary | None | None | Passed |
| only disabled ancestor cannot intercept failure: boundary-cannot-catch-itself | [] | [] | Passed |
| only disabled ancestor cannot intercept failure: reset-key-type-and-length | False | False | Passed |
| only disabled ancestor cannot intercept failure: render-only-catch | True | True | Passed |
| only disabled ancestor cannot intercept failure: unhandled-root-escalation | True | True | Passed |
| only disabled ancestor cannot intercept failure: capture-path-inside-out | [] | [] | Passed |
| only disabled ancestor cannot intercept failure: reported-error-dedup | True | True | Passed |
| only disabled ancestor cannot intercept failure: boundary-disabled-fallback | ['outer'] | ['outer'] | Passed |
| only disabled ancestor cannot intercept failure: reset-clears-handled-marker | False | False | Passed |
| only disabled ancestor cannot intercept failure: event-error-propagation | boundary | boundary | Passed |
SHA-256 / 765863a9a3842c185322fecaec0264abaef781122719da76f1cc73489b136997
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
ancestors, failed, reset_keys, previous_keys, handled, event_kind = s
if operation == 'nearest-eligible-boundary':
return next((k for k,enabled in reversed(ancestors) if enabled and k!=failed),None)
if operation == 'boundary-cannot-catch-itself':
return [k for k,enabled in ancestors if k!=failed]
if operation == 'reset-key-type-and-length':
return len(reset_keys)!=len(previous_keys) or any(type(a)!=type(b) or a!=b for a,b in zip(reset_keys,previous_keys))
if operation == 'render-only-catch':
return event_kind=='render'
if operation == 'unhandled-root-escalation':
return not any(enabled and k!=failed for k,enabled in ancestors)
if operation == 'capture-path-inside-out':
return [k for k,enabled in reversed(ancestors) if enabled and k!=failed]
if operation == 'reported-error-dedup':
return not handled
if operation == 'boundary-disabled-fallback':
return [k for k,enabled in ancestors if not enabled]
if operation == 'reset-clears-handled-marker':
return handled and reset_keys==previous_keys
if operation == 'event-error-propagation':
return 'caller' if event_kind!='render' else 'boundary'
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('nearest-eligible-boundary scenario 1', solve('nearest-eligible-boundary', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), 'outer')
check('nearest-eligible-boundary scenario 2', solve('nearest-eligible-boundary', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), 'outer')
check('nearest-eligible-boundary scenario 3', solve('nearest-eligible-boundary', ([], 'root',[1],[1],False,'render')), None)
check('nearest-eligible-boundary scenario 4', solve('nearest-eligible-boundary', ([('outer',True)],'leaf',[0],[False],True,'event')), 'outer')
check('nearest-eligible-boundary scenario 5', solve('nearest-eligible-boundary', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), 'inner')
check('nearest-eligible-boundary scenario 6', solve('nearest-eligible-boundary', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), 'inner')
check('boundary-cannot-catch-itself scenario 1', solve('boundary-cannot-catch-itself', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), ['outer'])
check('boundary-cannot-catch-itself scenario 2', solve('boundary-cannot-catch-itself', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), ['outer'])
check('boundary-cannot-catch-itself scenario 3', solve('boundary-cannot-catch-itself', ([], 'root',[1],[1],False,'render')), [])
check('boundary-cannot-catch-itself scenario 4', solve('boundary-cannot-catch-itself', ([('outer',True)],'leaf',[0],[False],True,'event')), ['outer'])
check('boundary-cannot-catch-itself scenario 5', solve('boundary-cannot-catch-itself', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), ['outer','inner'])
check('boundary-cannot-catch-itself scenario 6', solve('boundary-cannot-catch-itself', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), ['inner'])
check('reset-key-type-and-length scenario 1', solve('reset-key-type-and-length', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), True)
check('reset-key-type-and-length scenario 2', solve('reset-key-type-and-length', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), False)
check('reset-key-type-and-length scenario 3', solve('reset-key-type-and-length', ([], 'root',[1],[1],False,'render')), False)
check('reset-key-type-and-length scenario 4', solve('reset-key-type-and-length', ([('outer',True)],'leaf',[0],[False],True,'event')), True)
check('reset-key-type-and-length scenario 5', solve('reset-key-type-and-length', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), True)
check('reset-key-type-and-length scenario 6', solve('reset-key-type-and-length', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('render-only-catch scenario 1', solve('render-only-catch', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), True)
check('render-only-catch scenario 2', solve('render-only-catch', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), True)
check('render-only-catch scenario 3', solve('render-only-catch', ([], 'root',[1],[1],False,'render')), True)
check('render-only-catch scenario 4', solve('render-only-catch', ([('outer',True)],'leaf',[0],[False],True,'event')), False)
check('render-only-catch scenario 5', solve('render-only-catch', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), True)
check('render-only-catch scenario 6', solve('render-only-catch', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('unhandled-root-escalation scenario 1', solve('unhandled-root-escalation', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), False)
check('unhandled-root-escalation scenario 2', solve('unhandled-root-escalation', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), False)
check('unhandled-root-escalation scenario 3', solve('unhandled-root-escalation', ([], 'root',[1],[1],False,'render')), True)
check('unhandled-root-escalation scenario 4', solve('unhandled-root-escalation', ([('outer',True)],'leaf',[0],[False],True,'event')), False)
check('unhandled-root-escalation scenario 5', solve('unhandled-root-escalation', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), False)
check('unhandled-root-escalation scenario 6', solve('unhandled-root-escalation', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('capture-path-inside-out scenario 1', solve('capture-path-inside-out', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), ['outer'])
check('capture-path-inside-out scenario 2', solve('capture-path-inside-out', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), ['outer'])
check('capture-path-inside-out scenario 3', solve('capture-path-inside-out', ([], 'root',[1],[1],False,'render')), [])
check('capture-path-inside-out scenario 4', solve('capture-path-inside-out', ([('outer',True)],'leaf',[0],[False],True,'event')), ['outer'])
check('capture-path-inside-out scenario 5', solve('capture-path-inside-out', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), ['inner','outer'])
check('capture-path-inside-out scenario 6', solve('capture-path-inside-out', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), ['inner'])
check('reported-error-dedup scenario 1', solve('reported-error-dedup', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), True)
check('reported-error-dedup scenario 2', solve('reported-error-dedup', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), True)
check('reported-error-dedup scenario 3', solve('reported-error-dedup', ([], 'root',[1],[1],False,'render')), True)
check('reported-error-dedup scenario 4', solve('reported-error-dedup', ([('outer',True)],'leaf',[0],[False],True,'event')), False)
check('reported-error-dedup scenario 5', solve('reported-error-dedup', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), False)
check('reported-error-dedup scenario 6', solve('reported-error-dedup', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), True)
check('boundary-disabled-fallback scenario 1', solve('boundary-disabled-fallback', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), [])
check('boundary-disabled-fallback scenario 2', solve('boundary-disabled-fallback', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), ['inner'])
check('boundary-disabled-fallback scenario 3', solve('boundary-disabled-fallback', ([], 'root',[1],[1],False,'render')), [])
check('boundary-disabled-fallback scenario 4', solve('boundary-disabled-fallback', ([('outer',True)],'leaf',[0],[False],True,'event')), [])
check('boundary-disabled-fallback scenario 5', solve('boundary-disabled-fallback', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), [])
check('boundary-disabled-fallback scenario 6', solve('boundary-disabled-fallback', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), ['outer'])
check('reset-clears-handled-marker scenario 1', solve('reset-clears-handled-marker', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), False)
check('reset-clears-handled-marker scenario 2', solve('reset-clears-handled-marker', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), False)
check('reset-clears-handled-marker scenario 3', solve('reset-clears-handled-marker', ([], 'root',[1],[1],False,'render')), False)
check('reset-clears-handled-marker scenario 4', solve('reset-clears-handled-marker', ([('outer',True)],'leaf',[0],[False],True,'event')), True)
check('reset-clears-handled-marker scenario 5', solve('reset-clears-handled-marker', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), False)
check('reset-clears-handled-marker scenario 6', solve('reset-clears-handled-marker', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('event-error-propagation scenario 1', solve('event-error-propagation', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), 'boundary')
check('event-error-propagation scenario 2', solve('event-error-propagation', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), 'boundary')
check('event-error-propagation scenario 3', solve('event-error-propagation', ([], 'root',[1],[1],False,'render')), 'boundary')
check('event-error-propagation scenario 4', solve('event-error-propagation', ([('outer',True)],'leaf',[0],[False],True,'event')), 'caller')
check('event-error-propagation scenario 5', solve('event-error-propagation', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), 'boundary')
check('event-error-propagation scenario 6', solve('event-error-propagation', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), 'caller')
check('only disabled ancestor cannot intercept failure: nearest-eligible-boundary', solve('nearest-eligible-boundary', ([('outer',False)],'leaf',[],[],False,'render')), None)
check('only disabled ancestor cannot intercept failure: boundary-cannot-catch-itself', solve('boundary-cannot-catch-itself', ([('outer',False)],'leaf',[],[],False,'render')), [])
check('only disabled ancestor cannot intercept failure: reset-key-type-and-length', solve('reset-key-type-and-length', ([('outer',False)],'leaf',[],[],False,'render')), False)
check('only disabled ancestor cannot intercept failure: render-only-catch', solve('render-only-catch', ([('outer',False)],'leaf',[],[],False,'render')), True)
check('only disabled ancestor cannot intercept failure: unhandled-root-escalation', solve('unhandled-root-escalation', ([('outer',False)],'leaf',[],[],False,'render')), True)
check('only disabled ancestor cannot intercept failure: capture-path-inside-out', solve('capture-path-inside-out', ([('outer',False)],'leaf',[],[],False,'render')), [])
check('only disabled ancestor cannot intercept failure: reported-error-dedup', solve('reported-error-dedup', ([('outer',False)],'leaf',[],[],False,'render')), True)
check('only disabled ancestor cannot intercept failure: boundary-disabled-fallback', solve('boundary-disabled-fallback', ([('outer',False)],'leaf',[],[],False,'render')), ['outer'])
check('only disabled ancestor cannot intercept failure: reset-clears-handled-marker', solve('reset-clears-handled-marker', ([('outer',False)],'leaf',[],[],False,'render')), False)
check('only disabled ancestor cannot intercept failure: event-error-propagation', solve('event-error-propagation', ([('outer',False)],'leaf',[],[],False,'render')), 'boundary')
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 |
|---|---|---|---|
| nearest-eligible-boundary scenario 1 | outer | outer | Passed |
| nearest-eligible-boundary scenario 2 | outer | outer | Passed |
| nearest-eligible-boundary scenario 3 | None | None | Passed |
| nearest-eligible-boundary scenario 4 | outer | outer | Passed |
| nearest-eligible-boundary scenario 5 | inner | inner | Passed |
| nearest-eligible-boundary scenario 6 | inner | inner | Passed |
| boundary-cannot-catch-itself scenario 1 | ['outer'] | ['outer'] | Passed |
| boundary-cannot-catch-itself scenario 2 | ['outer', 'inner'] | ['outer'] | Failed |
| boundary-cannot-catch-itself scenario 3 | [] | [] | Passed |
| boundary-cannot-catch-itself scenario 4 | ['outer'] | ['outer'] | Passed |
| boundary-cannot-catch-itself scenario 5 | ['outer', 'inner'] | ['outer', 'inner'] | Passed |
| boundary-cannot-catch-itself scenario 6 | ['outer', 'inner'] | ['inner'] | Failed |
| reset-key-type-and-length scenario 1 | True | True | Passed |
| reset-key-type-and-length scenario 2 | False | False | Passed |
| reset-key-type-and-length scenario 3 | False | False | Passed |
| reset-key-type-and-length scenario 4 | True | True | Passed |
| reset-key-type-and-length scenario 5 | True | True | Passed |
| reset-key-type-and-length scenario 6 | False | False | Passed |
| render-only-catch scenario 1 | True | True | Passed |
| render-only-catch scenario 2 | True | True | Passed |
| render-only-catch scenario 3 | True | True | Passed |
| render-only-catch scenario 4 | False | False | Passed |
| render-only-catch scenario 5 | True | True | Passed |
| render-only-catch scenario 6 | False | False | Passed |
| unhandled-root-escalation scenario 1 | False | False | Passed |
| unhandled-root-escalation scenario 2 | False | False | Passed |
| unhandled-root-escalation scenario 3 | True | True | Passed |
| unhandled-root-escalation scenario 4 | False | False | Passed |
| unhandled-root-escalation scenario 5 | False | False | Passed |
| unhandled-root-escalation scenario 6 | False | False | Passed |
| capture-path-inside-out scenario 1 | ['outer'] | ['outer'] | Passed |
| capture-path-inside-out scenario 2 | ['outer'] | ['outer'] | Passed |
| capture-path-inside-out scenario 3 | [] | [] | Passed |
| capture-path-inside-out scenario 4 | ['outer'] | ['outer'] | Passed |
| capture-path-inside-out scenario 5 | ['inner', 'outer'] | ['inner', 'outer'] | Passed |
| capture-path-inside-out scenario 6 | ['inner'] | ['inner'] | Passed |
| reported-error-dedup scenario 1 | True | True | Passed |
| reported-error-dedup scenario 2 | True | True | Passed |
| reported-error-dedup scenario 3 | True | True | Passed |
| reported-error-dedup scenario 4 | False | False | Passed |
| reported-error-dedup scenario 5 | False | False | Passed |
| reported-error-dedup scenario 6 | True | True | Passed |
| boundary-disabled-fallback scenario 1 | [] | [] | Passed |
| boundary-disabled-fallback scenario 2 | ['inner'] | ['inner'] | Passed |
| boundary-disabled-fallback scenario 3 | [] | [] | Passed |
| boundary-disabled-fallback scenario 4 | [] | [] | Passed |
| boundary-disabled-fallback scenario 5 | [] | [] | Passed |
| boundary-disabled-fallback scenario 6 | ['outer'] | ['outer'] | Passed |
| reset-clears-handled-marker scenario 1 | False | False | Passed |
| reset-clears-handled-marker scenario 2 | False | False | Passed |
| reset-clears-handled-marker scenario 3 | False | False | Passed |
| reset-clears-handled-marker scenario 4 | True | True | Passed |
| reset-clears-handled-marker scenario 5 | False | False | Passed |
| reset-clears-handled-marker scenario 6 | False | False | Passed |
| event-error-propagation scenario 1 | boundary | boundary | Passed |
| event-error-propagation scenario 2 | boundary | boundary | Passed |
| event-error-propagation scenario 3 | boundary | boundary | Passed |
| event-error-propagation scenario 4 | caller | caller | Passed |
| event-error-propagation scenario 5 | boundary | boundary | Passed |
| event-error-propagation scenario 6 | caller | caller | Passed |
| only disabled ancestor cannot intercept failure: nearest-eligible-boundary | None | None | Passed |
| only disabled ancestor cannot intercept failure: boundary-cannot-catch-itself | ['outer'] | [] | Failed |
| only disabled ancestor cannot intercept failure: reset-key-type-and-length | False | False | Passed |
| only disabled ancestor cannot intercept failure: render-only-catch | True | True | Passed |
| only disabled ancestor cannot intercept failure: unhandled-root-escalation | True | True | Passed |
| only disabled ancestor cannot intercept failure: capture-path-inside-out | [] | [] | Passed |
| only disabled ancestor cannot intercept failure: reported-error-dedup | True | True | Passed |
| only disabled ancestor cannot intercept failure: boundary-disabled-fallback | ['outer'] | ['outer'] | Passed |
| only disabled ancestor cannot intercept failure: reset-clears-handled-marker | False | False | Passed |
| only disabled ancestor cannot intercept failure: event-error-propagation | boundary | boundary | Passed |
SHA-256 / 1bdcd6aa9fb55987fdaa9287f2e115302afda8356bec15aeeaa535acccf20fce
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
ancestors, failed, reset_keys, previous_keys, handled, event_kind = s
if operation == 'nearest-eligible-boundary':
return next((k for k,enabled in reversed(ancestors) if enabled and k!=failed),None)
if operation == 'boundary-cannot-catch-itself':
return [k for k,enabled in ancestors if enabled and k!=failed]
if operation == 'reset-key-type-and-length':
return len(reset_keys)!=len(previous_keys) or any(type(a)!=type(b) or a!=b for a,b in zip(reset_keys,previous_keys))
if operation == 'render-only-catch':
return event_kind=='render'
if operation == 'unhandled-root-escalation':
return not any(enabled and k!=failed for k,enabled in ancestors)
if operation == 'capture-path-inside-out':
return [k for k,enabled in reversed(ancestors) if enabled and k!=failed]
if operation == 'reported-error-dedup':
return not handled
if operation == 'boundary-disabled-fallback':
return [k for k,enabled in ancestors if not enabled]
if operation == 'reset-clears-handled-marker':
return handled and reset_keys==previous_keys
if operation == 'event-error-propagation':
return 'caller' if event_kind!='render' else 'boundary'
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('nearest-eligible-boundary scenario 1', solve('nearest-eligible-boundary', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), 'outer')
check('nearest-eligible-boundary scenario 2', solve('nearest-eligible-boundary', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), 'outer')
check('nearest-eligible-boundary scenario 3', solve('nearest-eligible-boundary', ([], 'root',[1],[1],False,'render')), None)
check('nearest-eligible-boundary scenario 4', solve('nearest-eligible-boundary', ([('outer',True)],'leaf',[0],[False],True,'event')), 'outer')
check('nearest-eligible-boundary scenario 5', solve('nearest-eligible-boundary', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), 'inner')
check('nearest-eligible-boundary scenario 6', solve('nearest-eligible-boundary', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), 'inner')
check('boundary-cannot-catch-itself scenario 1', solve('boundary-cannot-catch-itself', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), ['outer'])
check('boundary-cannot-catch-itself scenario 2', solve('boundary-cannot-catch-itself', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), ['outer'])
check('boundary-cannot-catch-itself scenario 3', solve('boundary-cannot-catch-itself', ([], 'root',[1],[1],False,'render')), [])
check('boundary-cannot-catch-itself scenario 4', solve('boundary-cannot-catch-itself', ([('outer',True)],'leaf',[0],[False],True,'event')), ['outer'])
check('boundary-cannot-catch-itself scenario 5', solve('boundary-cannot-catch-itself', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), ['outer','inner'])
check('boundary-cannot-catch-itself scenario 6', solve('boundary-cannot-catch-itself', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), ['inner'])
check('reset-key-type-and-length scenario 1', solve('reset-key-type-and-length', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), True)
check('reset-key-type-and-length scenario 2', solve('reset-key-type-and-length', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), False)
check('reset-key-type-and-length scenario 3', solve('reset-key-type-and-length', ([], 'root',[1],[1],False,'render')), False)
check('reset-key-type-and-length scenario 4', solve('reset-key-type-and-length', ([('outer',True)],'leaf',[0],[False],True,'event')), True)
check('reset-key-type-and-length scenario 5', solve('reset-key-type-and-length', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), True)
check('reset-key-type-and-length scenario 6', solve('reset-key-type-and-length', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('render-only-catch scenario 1', solve('render-only-catch', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), True)
check('render-only-catch scenario 2', solve('render-only-catch', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), True)
check('render-only-catch scenario 3', solve('render-only-catch', ([], 'root',[1],[1],False,'render')), True)
check('render-only-catch scenario 4', solve('render-only-catch', ([('outer',True)],'leaf',[0],[False],True,'event')), False)
check('render-only-catch scenario 5', solve('render-only-catch', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), True)
check('render-only-catch scenario 6', solve('render-only-catch', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('unhandled-root-escalation scenario 1', solve('unhandled-root-escalation', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), False)
check('unhandled-root-escalation scenario 2', solve('unhandled-root-escalation', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), False)
check('unhandled-root-escalation scenario 3', solve('unhandled-root-escalation', ([], 'root',[1],[1],False,'render')), True)
check('unhandled-root-escalation scenario 4', solve('unhandled-root-escalation', ([('outer',True)],'leaf',[0],[False],True,'event')), False)
check('unhandled-root-escalation scenario 5', solve('unhandled-root-escalation', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), False)
check('unhandled-root-escalation scenario 6', solve('unhandled-root-escalation', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('capture-path-inside-out scenario 1', solve('capture-path-inside-out', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), ['outer'])
check('capture-path-inside-out scenario 2', solve('capture-path-inside-out', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), ['outer'])
check('capture-path-inside-out scenario 3', solve('capture-path-inside-out', ([], 'root',[1],[1],False,'render')), [])
check('capture-path-inside-out scenario 4', solve('capture-path-inside-out', ([('outer',True)],'leaf',[0],[False],True,'event')), ['outer'])
check('capture-path-inside-out scenario 5', solve('capture-path-inside-out', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), ['inner','outer'])
check('capture-path-inside-out scenario 6', solve('capture-path-inside-out', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), ['inner'])
check('reported-error-dedup scenario 1', solve('reported-error-dedup', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), True)
check('reported-error-dedup scenario 2', solve('reported-error-dedup', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), True)
check('reported-error-dedup scenario 3', solve('reported-error-dedup', ([], 'root',[1],[1],False,'render')), True)
check('reported-error-dedup scenario 4', solve('reported-error-dedup', ([('outer',True)],'leaf',[0],[False],True,'event')), False)
check('reported-error-dedup scenario 5', solve('reported-error-dedup', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), False)
check('reported-error-dedup scenario 6', solve('reported-error-dedup', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), True)
check('boundary-disabled-fallback scenario 1', solve('boundary-disabled-fallback', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), [])
check('boundary-disabled-fallback scenario 2', solve('boundary-disabled-fallback', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), ['inner'])
check('boundary-disabled-fallback scenario 3', solve('boundary-disabled-fallback', ([], 'root',[1],[1],False,'render')), [])
check('boundary-disabled-fallback scenario 4', solve('boundary-disabled-fallback', ([('outer',True)],'leaf',[0],[False],True,'event')), [])
check('boundary-disabled-fallback scenario 5', solve('boundary-disabled-fallback', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), [])
check('boundary-disabled-fallback scenario 6', solve('boundary-disabled-fallback', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), ['outer'])
check('reset-clears-handled-marker scenario 1', solve('reset-clears-handled-marker', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), False)
check('reset-clears-handled-marker scenario 2', solve('reset-clears-handled-marker', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), False)
check('reset-clears-handled-marker scenario 3', solve('reset-clears-handled-marker', ([], 'root',[1],[1],False,'render')), False)
check('reset-clears-handled-marker scenario 4', solve('reset-clears-handled-marker', ([('outer',True)],'leaf',[0],[False],True,'event')), True)
check('reset-clears-handled-marker scenario 5', solve('reset-clears-handled-marker', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), False)
check('reset-clears-handled-marker scenario 6', solve('reset-clears-handled-marker', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), False)
check('event-error-propagation scenario 1', solve('event-error-propagation', ([('outer',True),('inner',True)],'inner',[N],[N-1],False,'render')), 'boundary')
check('event-error-propagation scenario 2', solve('event-error-propagation', ([('outer',True),('inner',False)],'leaf',[],[],False,'render')), 'boundary')
check('event-error-propagation scenario 3', solve('event-error-propagation', ([], 'root',[1],[1],False,'render')), 'boundary')
check('event-error-propagation scenario 4', solve('event-error-propagation', ([('outer',True)],'leaf',[0],[False],True,'event')), 'caller')
check('event-error-propagation scenario 5', solve('event-error-propagation', ([('outer',True),('inner',True)],'leaf',[1,2],[1],True,'render')), 'boundary')
check('event-error-propagation scenario 6', solve('event-error-propagation', ([('outer',False),('inner',True)],'leaf',[],[],False,'async')), 'caller')
check('only disabled ancestor cannot intercept failure: nearest-eligible-boundary', solve('nearest-eligible-boundary', ([('outer',False)],'leaf',[],[],False,'render')), None)
check('only disabled ancestor cannot intercept failure: boundary-cannot-catch-itself', solve('boundary-cannot-catch-itself', ([('outer',False)],'leaf',[],[],False,'render')), [])
check('only disabled ancestor cannot intercept failure: reset-key-type-and-length', solve('reset-key-type-and-length', ([('outer',False)],'leaf',[],[],False,'render')), False)
check('only disabled ancestor cannot intercept failure: render-only-catch', solve('render-only-catch', ([('outer',False)],'leaf',[],[],False,'render')), True)
check('only disabled ancestor cannot intercept failure: unhandled-root-escalation', solve('unhandled-root-escalation', ([('outer',False)],'leaf',[],[],False,'render')), True)
check('only disabled ancestor cannot intercept failure: capture-path-inside-out', solve('capture-path-inside-out', ([('outer',False)],'leaf',[],[],False,'render')), [])
check('only disabled ancestor cannot intercept failure: reported-error-dedup', solve('reported-error-dedup', ([('outer',False)],'leaf',[],[],False,'render')), True)
check('only disabled ancestor cannot intercept failure: boundary-disabled-fallback', solve('boundary-disabled-fallback', ([('outer',False)],'leaf',[],[],False,'render')), ['outer'])
check('only disabled ancestor cannot intercept failure: reset-clears-handled-marker', solve('reset-clears-handled-marker', ([('outer',False)],'leaf',[],[],False,'render')), False)
check('only disabled ancestor cannot intercept failure: event-error-propagation', solve('event-error-propagation', ([('outer',False)],'leaf',[],[],False,'render')), 'boundary')
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 |
|---|---|---|---|
| nearest-eligible-boundary scenario 1 | outer | outer | Passed |
| nearest-eligible-boundary scenario 2 | outer | outer | Passed |
| nearest-eligible-boundary scenario 3 | None | None | Passed |
| nearest-eligible-boundary scenario 4 | outer | outer | Passed |
| nearest-eligible-boundary scenario 5 | inner | inner | Passed |
| nearest-eligible-boundary scenario 6 | inner | inner | Passed |
| boundary-cannot-catch-itself scenario 1 | ['outer'] | ['outer'] | Passed |
| boundary-cannot-catch-itself scenario 2 | ['outer'] | ['outer'] | Passed |
| boundary-cannot-catch-itself scenario 3 | [] | [] | Passed |
| boundary-cannot-catch-itself scenario 4 | ['outer'] | ['outer'] | Passed |
| boundary-cannot-catch-itself scenario 5 | ['outer', 'inner'] | ['outer', 'inner'] | Passed |
| boundary-cannot-catch-itself scenario 6 | ['inner'] | ['inner'] | Passed |
| reset-key-type-and-length scenario 1 | True | True | Passed |
| reset-key-type-and-length scenario 2 | False | False | Passed |
| reset-key-type-and-length scenario 3 | False | False | Passed |
| reset-key-type-and-length scenario 4 | True | True | Passed |
| reset-key-type-and-length scenario 5 | True | True | Passed |
| reset-key-type-and-length scenario 6 | False | False | Passed |
| render-only-catch scenario 1 | True | True | Passed |
| render-only-catch scenario 2 | True | True | Passed |
| render-only-catch scenario 3 | True | True | Passed |
| render-only-catch scenario 4 | False | False | Passed |
| render-only-catch scenario 5 | True | True | Passed |
| render-only-catch scenario 6 | False | False | Passed |
| unhandled-root-escalation scenario 1 | False | False | Passed |
| unhandled-root-escalation scenario 2 | False | False | Passed |
| unhandled-root-escalation scenario 3 | True | True | Passed |
| unhandled-root-escalation scenario 4 | False | False | Passed |
| unhandled-root-escalation scenario 5 | False | False | Passed |
| unhandled-root-escalation scenario 6 | False | False | Passed |
| capture-path-inside-out scenario 1 | ['outer'] | ['outer'] | Passed |
| capture-path-inside-out scenario 2 | ['outer'] | ['outer'] | Passed |
| capture-path-inside-out scenario 3 | [] | [] | Passed |
| capture-path-inside-out scenario 4 | ['outer'] | ['outer'] | Passed |
| capture-path-inside-out scenario 5 | ['inner', 'outer'] | ['inner', 'outer'] | Passed |
| capture-path-inside-out scenario 6 | ['inner'] | ['inner'] | Passed |
| reported-error-dedup scenario 1 | True | True | Passed |
| reported-error-dedup scenario 2 | True | True | Passed |
| reported-error-dedup scenario 3 | True | True | Passed |
| reported-error-dedup scenario 4 | False | False | Passed |
| reported-error-dedup scenario 5 | False | False | Passed |
| reported-error-dedup scenario 6 | True | True | Passed |
| boundary-disabled-fallback scenario 1 | [] | [] | Passed |
| boundary-disabled-fallback scenario 2 | ['inner'] | ['inner'] | Passed |
| boundary-disabled-fallback scenario 3 | [] | [] | Passed |
| boundary-disabled-fallback scenario 4 | [] | [] | Passed |
| boundary-disabled-fallback scenario 5 | [] | [] | Passed |
| boundary-disabled-fallback scenario 6 | ['outer'] | ['outer'] | Passed |
| reset-clears-handled-marker scenario 1 | False | False | Passed |
| reset-clears-handled-marker scenario 2 | False | False | Passed |
| reset-clears-handled-marker scenario 3 | False | False | Passed |
| reset-clears-handled-marker scenario 4 | True | True | Passed |
| reset-clears-handled-marker scenario 5 | False | False | Passed |
| reset-clears-handled-marker scenario 6 | False | False | Passed |
| event-error-propagation scenario 1 | boundary | boundary | Passed |
| event-error-propagation scenario 2 | boundary | boundary | Passed |
| event-error-propagation scenario 3 | boundary | boundary | Passed |
| event-error-propagation scenario 4 | caller | caller | Passed |
| event-error-propagation scenario 5 | boundary | boundary | Passed |
| event-error-propagation scenario 6 | caller | caller | Passed |
| only disabled ancestor cannot intercept failure: nearest-eligible-boundary | None | None | Passed |
| only disabled ancestor cannot intercept failure: boundary-cannot-catch-itself | [] | [] | Passed |
| only disabled ancestor cannot intercept failure: reset-key-type-and-length | False | False | Passed |
| only disabled ancestor cannot intercept failure: render-only-catch | True | True | Passed |
| only disabled ancestor cannot intercept failure: unhandled-root-escalation | True | True | Passed |
| only disabled ancestor cannot intercept failure: capture-path-inside-out | [] | [] | Passed |
| only disabled ancestor cannot intercept failure: reported-error-dedup | True | True | Passed |
| only disabled ancestor cannot intercept failure: boundary-disabled-fallback | ['outer'] | ['outer'] | Passed |
| only disabled ancestor cannot intercept failure: reset-clears-handled-marker | False | False | Passed |
| only disabled ancestor cannot intercept failure: event-error-propagation | boundary | boundary | Passed |
SHA-256 / 415e69f88959b117cdd5a2885dfde48d34ca931ff375172fb7f9b3070c898de8
Verification & scope
Only the explicitly specified operations and finite deterministic records are modeled; no browser or framework conformance is claimed. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:40:57.890058+00:00.
Case digest / 0bf5fc183eaea9e6a2a88db78701e7f4f73fe649dcc393db043e70515f8dae84