FAILURE MAP
← Case archive

FA-24466 / Client state / Open access

Keyed component instance reconciliation: Cleanup before replacement mount · case 01

Cleanup before replacement mount.

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

ROOT CAUSE

The cleanup-before-replacement-mount client decision evaluates `[(k,'mount') for k,t in incoming if k in dict(old) and (k,t) not in old]` instead of `[(k,'cleanup') for k,t in old if k in dict(incoming) and (k,t) not in incoming]+[(k,'mount') for k,t in incoming if k in dict(old) and (k,t) not in old]`.

VERIFIED REPAIR

Apply the modeled cleanup-before-replacement-mount rule: `[(k,'cleanup') for k,t in old if k in dict(incoming) and (k,t) not in incoming]+[(k,'mount') for k,t in incoming if k in dict(old) and (k,t) not in old]`.

Unsuccessful approach: The partial repair `[(k,'mount') for k,t in incoming if k in dict(old) and (k,t) not in old]+[(k,'cleanup') for k,t in old if k in dict(incoming) and (k,t) not in incoming]` still violates the explicit fixture contract.

Case contract

A component instance is identified by sibling key plus component type. Reordering preserves its state, changing type remounts, removed keys lose state, and replacement cleanup happens before mount. Operation cleanup-before-replacement-mount 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):
    old, incoming, state = s
    if operation == 'type-and-key-reuse':
        return [k for k,t in incoming if (k,t) in old]
    if operation == 'new-instance-mounts':
        return [k for k,t in incoming if (k,t) not in old]
    if operation == 'old-instance-unmounts':
        return [k for k,t in old if (k,t) not in incoming]
    if operation == 'state-follows-key-through-reorder':
        return [state.get(k) for k,t in incoming if (k,t) in old]
    if operation == 'render-order-follows-incoming':
        return [k for k,t in incoming]
    if operation == 'changed-type-state-reset':
        return {k:state.get(k) if (k,t) in old else None for k,t in incoming}
    if operation == 'cleanup-before-replacement-mount':
        return [(k,'mount') for k,t in incoming if k in dict(old) and (k,t) not in old]
    if operation == 'removed-state-pruning':
        return {k:v for k,v in state.items() if k in dict(incoming)}
    if operation == 'insertion-position':
        return {k:i for i,(k,t) in enumerate(incoming)}
    if operation == 'retained-instance-moves':
        return [k for i,(k,t) in enumerate(incoming) if (k,t) in old and old.index((k,t))!=i]
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('type-and-key-reuse scenario 1', solve('type-and-key-reuse', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), ['b','a'])
check('type-and-key-reuse scenario 2', solve('type-and-key-reuse', ([], [('a','card')],{})), [])
check('type-and-key-reuse scenario 3', solve('type-and-key-reuse', ([('a','card')],[('a','panel')],{'a':0})), [])
check('type-and-key-reuse scenario 4', solve('type-and-key-reuse', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['b'])
check('type-and-key-reuse scenario 5', solve('type-and-key-reuse', ([('a','card')],[],{'a':N})), [])
check('type-and-key-reuse scenario 6', solve('type-and-key-reuse', ([('a','card')],[('a','card'),('b','card')],{'a':False})), ['a'])
check('new-instance-mounts scenario 1', solve('new-instance-mounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [])
check('new-instance-mounts scenario 2', solve('new-instance-mounts', ([], [('a','card')],{})), ['a'])
check('new-instance-mounts scenario 3', solve('new-instance-mounts', ([('a','card')],[('a','panel')],{'a':0})), ['a'])
check('new-instance-mounts scenario 4', solve('new-instance-mounts', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), [])
check('new-instance-mounts scenario 5', solve('new-instance-mounts', ([('a','card')],[],{'a':N})), [])
check('new-instance-mounts scenario 6', solve('new-instance-mounts', ([('a','card')],[('a','card'),('b','card')],{'a':False})), ['b'])
check('old-instance-unmounts scenario 1', solve('old-instance-unmounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [])
check('old-instance-unmounts scenario 2', solve('old-instance-unmounts', ([], [('a','card')],{})), [])
check('old-instance-unmounts scenario 3', solve('old-instance-unmounts', ([('a','card')],[('a','panel')],{'a':0})), ['a'])
check('old-instance-unmounts scenario 4', solve('old-instance-unmounts', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['a'])
check('old-instance-unmounts scenario 5', solve('old-instance-unmounts', ([('a','card')],[],{'a':N})), ['a'])
check('old-instance-unmounts scenario 6', solve('old-instance-unmounts', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [])
check('state-follows-key-through-reorder scenario 1', solve('state-follows-key-through-reorder', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [2,N])
check('state-follows-key-through-reorder scenario 2', solve('state-follows-key-through-reorder', ([], [('a','card')],{})), [])
check('state-follows-key-through-reorder scenario 3', solve('state-follows-key-through-reorder', ([('a','card')],[('a','panel')],{'a':0})), [])
check('state-follows-key-through-reorder scenario 4', solve('state-follows-key-through-reorder', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), [None])
check('state-follows-key-through-reorder scenario 5', solve('state-follows-key-through-reorder', ([('a','card')],[],{'a':N})), [])
check('state-follows-key-through-reorder scenario 6', solve('state-follows-key-through-reorder', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [False])
check('render-order-follows-incoming scenario 1', solve('render-order-follows-incoming', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), ['b','a'])
check('render-order-follows-incoming scenario 2', solve('render-order-follows-incoming', ([], [('a','card')],{})), ['a'])
check('render-order-follows-incoming scenario 3', solve('render-order-follows-incoming', ([('a','card')],[('a','panel')],{'a':0})), ['a'])
check('render-order-follows-incoming scenario 4', solve('render-order-follows-incoming', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['b'])
check('render-order-follows-incoming scenario 5', solve('render-order-follows-incoming', ([('a','card')],[],{'a':N})), [])
check('render-order-follows-incoming scenario 6', solve('render-order-follows-incoming', ([('a','card')],[('a','card'),('b','card')],{'a':False})), ['a','b'])
check('changed-type-state-reset scenario 1', solve('changed-type-state-reset', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), {'b':2,'a':N})
check('changed-type-state-reset scenario 2', solve('changed-type-state-reset', ([], [('a','card')],{})), {'a':None})
check('changed-type-state-reset scenario 3', solve('changed-type-state-reset', ([('a','card')],[('a','panel')],{'a':0})), {'a':None})
check('changed-type-state-reset scenario 4', solve('changed-type-state-reset', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), {'b':None})
check('changed-type-state-reset scenario 5', solve('changed-type-state-reset', ([('a','card')],[],{'a':N})), {})
check('changed-type-state-reset scenario 6', solve('changed-type-state-reset', ([('a','card')],[('a','card'),('b','card')],{'a':False})), {'a':False,'b':None})
check('cleanup-before-replacement-mount scenario 1', solve('cleanup-before-replacement-mount', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [])
check('cleanup-before-replacement-mount scenario 2', solve('cleanup-before-replacement-mount', ([], [('a','card')],{})), [])
check('cleanup-before-replacement-mount scenario 3', solve('cleanup-before-replacement-mount', ([('a','card')],[('a','panel')],{'a':0})), [('a','cleanup'),('a','mount')])
check('cleanup-before-replacement-mount scenario 4', solve('cleanup-before-replacement-mount', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), [])
check('cleanup-before-replacement-mount scenario 5', solve('cleanup-before-replacement-mount', ([('a','card')],[],{'a':N})), [])
check('cleanup-before-replacement-mount scenario 6', solve('cleanup-before-replacement-mount', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [])
check('removed-state-pruning scenario 1', solve('removed-state-pruning', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), {'a':N,'b':2})
check('removed-state-pruning scenario 2', solve('removed-state-pruning', ([], [('a','card')],{})), {})
check('removed-state-pruning scenario 3', solve('removed-state-pruning', ([('a','card')],[('a','panel')],{'a':0})), {'a':0})
check('removed-state-pruning scenario 4', solve('removed-state-pruning', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), {'b':None})
check('removed-state-pruning scenario 5', solve('removed-state-pruning', ([('a','card')],[],{'a':N})), {})
check('removed-state-pruning scenario 6', solve('removed-state-pruning', ([('a','card')],[('a','card'),('b','card')],{'a':False})), {'a':False})
check('insertion-position scenario 1', solve('insertion-position', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), {'b':0,'a':1})
check('insertion-position scenario 2', solve('insertion-position', ([], [('a','card')],{})), {'a':0})
check('insertion-position scenario 3', solve('insertion-position', ([('a','card')],[('a','panel')],{'a':0})), {'a':0})
check('insertion-position scenario 4', solve('insertion-position', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), {'b':0})
check('insertion-position scenario 5', solve('insertion-position', ([('a','card')],[],{'a':N})), {})
check('insertion-position scenario 6', solve('insertion-position', ([('a','card')],[('a','card'),('b','card')],{'a':False})), {'a':0,'b':1})
check('retained-instance-moves scenario 1', solve('retained-instance-moves', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), ['b','a'])
check('retained-instance-moves scenario 2', solve('retained-instance-moves', ([], [('a','card')],{})), [])
check('retained-instance-moves scenario 3', solve('retained-instance-moves', ([('a','card')],[('a','panel')],{'a':0})), [])
check('retained-instance-moves scenario 4', solve('retained-instance-moves', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['b'])
check('retained-instance-moves scenario 5', solve('retained-instance-moves', ([('a','card')],[],{'a':N})), [])
check('retained-instance-moves scenario 6', solve('retained-instance-moves', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [])
check('reordering distinct state values for every seed: type-and-key-reuse', solve('type-and-key-reuse', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), ['b','a'])
check('reordering distinct state values for every seed: new-instance-mounts', solve('new-instance-mounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [])
check('reordering distinct state values for every seed: old-instance-unmounts', solve('old-instance-unmounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [])
check('reordering distinct state values for every seed: state-follows-key-through-reorder', solve('state-follows-key-through-reorder', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [2,N+10])
check('reordering distinct state values for every seed: render-order-follows-incoming', solve('render-order-follows-incoming', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), ['b','a'])
check('reordering distinct state values for every seed: changed-type-state-reset', solve('changed-type-state-reset', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), {'b':2,'a':N+10})
check('reordering distinct state values for every seed: cleanup-before-replacement-mount', solve('cleanup-before-replacement-mount', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [])
check('reordering distinct state values for every seed: removed-state-pruning', solve('removed-state-pruning', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), {'a':N+10,'b':2})
check('reordering distinct state values for every seed: insertion-position', solve('insertion-position', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), {'b':0,'a':1})
check('reordering distinct state values for every seed: retained-instance-moves', solve('retained-instance-moves', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), ['b','a'])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
type-and-key-reuse scenario 1['b', 'a']['b', 'a']Passed
type-and-key-reuse scenario 2[][]Passed
type-and-key-reuse scenario 3[][]Passed
type-and-key-reuse scenario 4['b']['b']Passed
type-and-key-reuse scenario 5[][]Passed
type-and-key-reuse scenario 6['a']['a']Passed
new-instance-mounts scenario 1[][]Passed
new-instance-mounts scenario 2['a']['a']Passed
new-instance-mounts scenario 3['a']['a']Passed
new-instance-mounts scenario 4[][]Passed
new-instance-mounts scenario 5[][]Passed
new-instance-mounts scenario 6['b']['b']Passed
old-instance-unmounts scenario 1[][]Passed
old-instance-unmounts scenario 2[][]Passed
old-instance-unmounts scenario 3['a']['a']Passed
old-instance-unmounts scenario 4['a']['a']Passed
old-instance-unmounts scenario 5['a']['a']Passed
old-instance-unmounts scenario 6[][]Passed
state-follows-key-through-reorder scenario 1[2, 1][2, 1]Passed
state-follows-key-through-reorder scenario 2[][]Passed
state-follows-key-through-reorder scenario 3[][]Passed
state-follows-key-through-reorder scenario 4[None][None]Passed
state-follows-key-through-reorder scenario 5[][]Passed
state-follows-key-through-reorder scenario 6[False][False]Passed
render-order-follows-incoming scenario 1['b', 'a']['b', 'a']Passed
render-order-follows-incoming scenario 2['a']['a']Passed
render-order-follows-incoming scenario 3['a']['a']Passed
render-order-follows-incoming scenario 4['b']['b']Passed
render-order-follows-incoming scenario 5[][]Passed
render-order-follows-incoming scenario 6['a', 'b']['a', 'b']Passed
changed-type-state-reset scenario 1{'a': 1, 'b': 2}{'a': 1, 'b': 2}Passed
changed-type-state-reset scenario 2{'a': None}{'a': None}Passed
changed-type-state-reset scenario 3{'a': None}{'a': None}Passed
changed-type-state-reset scenario 4{'b': None}{'b': None}Passed
changed-type-state-reset scenario 5{}{}Passed
changed-type-state-reset scenario 6{'a': False, 'b': None}{'a': False, 'b': None}Passed
cleanup-before-replacement-mount scenario 1[][]Passed
cleanup-before-replacement-mount scenario 2[][]Passed
cleanup-before-replacement-mount scenario 3[['a', 'mount']][['a', 'cleanup'], ['a', 'mount']]Failed
cleanup-before-replacement-mount scenario 4[][]Passed
cleanup-before-replacement-mount scenario 5[][]Passed
cleanup-before-replacement-mount scenario 6[][]Passed
removed-state-pruning scenario 1{'a': 1, 'b': 2}{'a': 1, 'b': 2}Passed
removed-state-pruning scenario 2{}{}Passed
removed-state-pruning scenario 3{'a': 0}{'a': 0}Passed
removed-state-pruning scenario 4{'b': None}{'b': None}Passed
removed-state-pruning scenario 5{}{}Passed
removed-state-pruning scenario 6{'a': False}{'a': False}Passed
insertion-position scenario 1{'a': 1, 'b': 0}{'a': 1, 'b': 0}Passed
insertion-position scenario 2{'a': 0}{'a': 0}Passed
insertion-position scenario 3{'a': 0}{'a': 0}Passed
insertion-position scenario 4{'b': 0}{'b': 0}Passed
insertion-position scenario 5{}{}Passed
insertion-position scenario 6{'a': 0, 'b': 1}{'a': 0, 'b': 1}Passed
retained-instance-moves scenario 1['b', 'a']['b', 'a']Passed
retained-instance-moves scenario 2[][]Passed
retained-instance-moves scenario 3[][]Passed
retained-instance-moves scenario 4['b']['b']Passed
retained-instance-moves scenario 5[][]Passed
retained-instance-moves scenario 6[][]Passed
reordering distinct state values for every seed: type-and-key-reuse['b', 'a']['b', 'a']Passed
reordering distinct state values for every seed: new-instance-mounts[][]Passed
reordering distinct state values for every seed: old-instance-unmounts[][]Passed
reordering distinct state values for every seed: state-follows-key-through-reorder[2, 11][2, 11]Passed
reordering distinct state values for every seed: render-order-follows-incoming['b', 'a']['b', 'a']Passed
reordering distinct state values for every seed: changed-type-state-reset{'a': 11, 'b': 2}{'a': 11, 'b': 2}Passed
reordering distinct state values for every seed: cleanup-before-replacement-mount[][]Passed
reordering distinct state values for every seed: removed-state-pruning{'a': 11, 'b': 2}{'a': 11, 'b': 2}Passed
reordering distinct state values for every seed: insertion-position{'a': 1, 'b': 0}{'a': 1, 'b': 0}Passed
reordering distinct state values for every seed: retained-instance-moves['b', 'a']['b', 'a']Passed

SHA-256 / bb7a9087f67d53827a98231a2a760fcbf203ff59264ed9845be5d66789852cc0

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(operation, s):
    old, incoming, state = s
    if operation == 'type-and-key-reuse':
        return [k for k,t in incoming if (k,t) in old]
    if operation == 'new-instance-mounts':
        return [k for k,t in incoming if (k,t) not in old]
    if operation == 'old-instance-unmounts':
        return [k for k,t in old if (k,t) not in incoming]
    if operation == 'state-follows-key-through-reorder':
        return [state.get(k) for k,t in incoming if (k,t) in old]
    if operation == 'render-order-follows-incoming':
        return [k for k,t in incoming]
    if operation == 'changed-type-state-reset':
        return {k:state.get(k) if (k,t) in old else None for k,t in incoming}
    if operation == 'cleanup-before-replacement-mount':
        return [(k,'mount') for k,t in incoming if k in dict(old) and (k,t) not in old]+[(k,'cleanup') for k,t in old if k in dict(incoming) and (k,t) not in incoming]
    if operation == 'removed-state-pruning':
        return {k:v for k,v in state.items() if k in dict(incoming)}
    if operation == 'insertion-position':
        return {k:i for i,(k,t) in enumerate(incoming)}
    if operation == 'retained-instance-moves':
        return [k for i,(k,t) in enumerate(incoming) if (k,t) in old and old.index((k,t))!=i]
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('type-and-key-reuse scenario 1', solve('type-and-key-reuse', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), ['b','a'])
check('type-and-key-reuse scenario 2', solve('type-and-key-reuse', ([], [('a','card')],{})), [])
check('type-and-key-reuse scenario 3', solve('type-and-key-reuse', ([('a','card')],[('a','panel')],{'a':0})), [])
check('type-and-key-reuse scenario 4', solve('type-and-key-reuse', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['b'])
check('type-and-key-reuse scenario 5', solve('type-and-key-reuse', ([('a','card')],[],{'a':N})), [])
check('type-and-key-reuse scenario 6', solve('type-and-key-reuse', ([('a','card')],[('a','card'),('b','card')],{'a':False})), ['a'])
check('new-instance-mounts scenario 1', solve('new-instance-mounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [])
check('new-instance-mounts scenario 2', solve('new-instance-mounts', ([], [('a','card')],{})), ['a'])
check('new-instance-mounts scenario 3', solve('new-instance-mounts', ([('a','card')],[('a','panel')],{'a':0})), ['a'])
check('new-instance-mounts scenario 4', solve('new-instance-mounts', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), [])
check('new-instance-mounts scenario 5', solve('new-instance-mounts', ([('a','card')],[],{'a':N})), [])
check('new-instance-mounts scenario 6', solve('new-instance-mounts', ([('a','card')],[('a','card'),('b','card')],{'a':False})), ['b'])
check('old-instance-unmounts scenario 1', solve('old-instance-unmounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [])
check('old-instance-unmounts scenario 2', solve('old-instance-unmounts', ([], [('a','card')],{})), [])
check('old-instance-unmounts scenario 3', solve('old-instance-unmounts', ([('a','card')],[('a','panel')],{'a':0})), ['a'])
check('old-instance-unmounts scenario 4', solve('old-instance-unmounts', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['a'])
check('old-instance-unmounts scenario 5', solve('old-instance-unmounts', ([('a','card')],[],{'a':N})), ['a'])
check('old-instance-unmounts scenario 6', solve('old-instance-unmounts', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [])
check('state-follows-key-through-reorder scenario 1', solve('state-follows-key-through-reorder', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [2,N])
check('state-follows-key-through-reorder scenario 2', solve('state-follows-key-through-reorder', ([], [('a','card')],{})), [])
check('state-follows-key-through-reorder scenario 3', solve('state-follows-key-through-reorder', ([('a','card')],[('a','panel')],{'a':0})), [])
check('state-follows-key-through-reorder scenario 4', solve('state-follows-key-through-reorder', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), [None])
check('state-follows-key-through-reorder scenario 5', solve('state-follows-key-through-reorder', ([('a','card')],[],{'a':N})), [])
check('state-follows-key-through-reorder scenario 6', solve('state-follows-key-through-reorder', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [False])
check('render-order-follows-incoming scenario 1', solve('render-order-follows-incoming', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), ['b','a'])
check('render-order-follows-incoming scenario 2', solve('render-order-follows-incoming', ([], [('a','card')],{})), ['a'])
check('render-order-follows-incoming scenario 3', solve('render-order-follows-incoming', ([('a','card')],[('a','panel')],{'a':0})), ['a'])
check('render-order-follows-incoming scenario 4', solve('render-order-follows-incoming', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['b'])
check('render-order-follows-incoming scenario 5', solve('render-order-follows-incoming', ([('a','card')],[],{'a':N})), [])
check('render-order-follows-incoming scenario 6', solve('render-order-follows-incoming', ([('a','card')],[('a','card'),('b','card')],{'a':False})), ['a','b'])
check('changed-type-state-reset scenario 1', solve('changed-type-state-reset', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), {'b':2,'a':N})
check('changed-type-state-reset scenario 2', solve('changed-type-state-reset', ([], [('a','card')],{})), {'a':None})
check('changed-type-state-reset scenario 3', solve('changed-type-state-reset', ([('a','card')],[('a','panel')],{'a':0})), {'a':None})
check('changed-type-state-reset scenario 4', solve('changed-type-state-reset', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), {'b':None})
check('changed-type-state-reset scenario 5', solve('changed-type-state-reset', ([('a','card')],[],{'a':N})), {})
check('changed-type-state-reset scenario 6', solve('changed-type-state-reset', ([('a','card')],[('a','card'),('b','card')],{'a':False})), {'a':False,'b':None})
check('cleanup-before-replacement-mount scenario 1', solve('cleanup-before-replacement-mount', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [])
check('cleanup-before-replacement-mount scenario 2', solve('cleanup-before-replacement-mount', ([], [('a','card')],{})), [])
check('cleanup-before-replacement-mount scenario 3', solve('cleanup-before-replacement-mount', ([('a','card')],[('a','panel')],{'a':0})), [('a','cleanup'),('a','mount')])
check('cleanup-before-replacement-mount scenario 4', solve('cleanup-before-replacement-mount', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), [])
check('cleanup-before-replacement-mount scenario 5', solve('cleanup-before-replacement-mount', ([('a','card')],[],{'a':N})), [])
check('cleanup-before-replacement-mount scenario 6', solve('cleanup-before-replacement-mount', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [])
check('removed-state-pruning scenario 1', solve('removed-state-pruning', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), {'a':N,'b':2})
check('removed-state-pruning scenario 2', solve('removed-state-pruning', ([], [('a','card')],{})), {})
check('removed-state-pruning scenario 3', solve('removed-state-pruning', ([('a','card')],[('a','panel')],{'a':0})), {'a':0})
check('removed-state-pruning scenario 4', solve('removed-state-pruning', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), {'b':None})
check('removed-state-pruning scenario 5', solve('removed-state-pruning', ([('a','card')],[],{'a':N})), {})
check('removed-state-pruning scenario 6', solve('removed-state-pruning', ([('a','card')],[('a','card'),('b','card')],{'a':False})), {'a':False})
check('insertion-position scenario 1', solve('insertion-position', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), {'b':0,'a':1})
check('insertion-position scenario 2', solve('insertion-position', ([], [('a','card')],{})), {'a':0})
check('insertion-position scenario 3', solve('insertion-position', ([('a','card')],[('a','panel')],{'a':0})), {'a':0})
check('insertion-position scenario 4', solve('insertion-position', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), {'b':0})
check('insertion-position scenario 5', solve('insertion-position', ([('a','card')],[],{'a':N})), {})
check('insertion-position scenario 6', solve('insertion-position', ([('a','card')],[('a','card'),('b','card')],{'a':False})), {'a':0,'b':1})
check('retained-instance-moves scenario 1', solve('retained-instance-moves', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), ['b','a'])
check('retained-instance-moves scenario 2', solve('retained-instance-moves', ([], [('a','card')],{})), [])
check('retained-instance-moves scenario 3', solve('retained-instance-moves', ([('a','card')],[('a','panel')],{'a':0})), [])
check('retained-instance-moves scenario 4', solve('retained-instance-moves', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['b'])
check('retained-instance-moves scenario 5', solve('retained-instance-moves', ([('a','card')],[],{'a':N})), [])
check('retained-instance-moves scenario 6', solve('retained-instance-moves', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [])
check('reordering distinct state values for every seed: type-and-key-reuse', solve('type-and-key-reuse', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), ['b','a'])
check('reordering distinct state values for every seed: new-instance-mounts', solve('new-instance-mounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [])
check('reordering distinct state values for every seed: old-instance-unmounts', solve('old-instance-unmounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [])
check('reordering distinct state values for every seed: state-follows-key-through-reorder', solve('state-follows-key-through-reorder', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [2,N+10])
check('reordering distinct state values for every seed: render-order-follows-incoming', solve('render-order-follows-incoming', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), ['b','a'])
check('reordering distinct state values for every seed: changed-type-state-reset', solve('changed-type-state-reset', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), {'b':2,'a':N+10})
check('reordering distinct state values for every seed: cleanup-before-replacement-mount', solve('cleanup-before-replacement-mount', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [])
check('reordering distinct state values for every seed: removed-state-pruning', solve('removed-state-pruning', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), {'a':N+10,'b':2})
check('reordering distinct state values for every seed: insertion-position', solve('insertion-position', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), {'b':0,'a':1})
check('reordering distinct state values for every seed: retained-instance-moves', solve('retained-instance-moves', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), ['b','a'])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
type-and-key-reuse scenario 1['b', 'a']['b', 'a']Passed
type-and-key-reuse scenario 2[][]Passed
type-and-key-reuse scenario 3[][]Passed
type-and-key-reuse scenario 4['b']['b']Passed
type-and-key-reuse scenario 5[][]Passed
type-and-key-reuse scenario 6['a']['a']Passed
new-instance-mounts scenario 1[][]Passed
new-instance-mounts scenario 2['a']['a']Passed
new-instance-mounts scenario 3['a']['a']Passed
new-instance-mounts scenario 4[][]Passed
new-instance-mounts scenario 5[][]Passed
new-instance-mounts scenario 6['b']['b']Passed
old-instance-unmounts scenario 1[][]Passed
old-instance-unmounts scenario 2[][]Passed
old-instance-unmounts scenario 3['a']['a']Passed
old-instance-unmounts scenario 4['a']['a']Passed
old-instance-unmounts scenario 5['a']['a']Passed
old-instance-unmounts scenario 6[][]Passed
state-follows-key-through-reorder scenario 1[2, 1][2, 1]Passed
state-follows-key-through-reorder scenario 2[][]Passed
state-follows-key-through-reorder scenario 3[][]Passed
state-follows-key-through-reorder scenario 4[None][None]Passed
state-follows-key-through-reorder scenario 5[][]Passed
state-follows-key-through-reorder scenario 6[False][False]Passed
render-order-follows-incoming scenario 1['b', 'a']['b', 'a']Passed
render-order-follows-incoming scenario 2['a']['a']Passed
render-order-follows-incoming scenario 3['a']['a']Passed
render-order-follows-incoming scenario 4['b']['b']Passed
render-order-follows-incoming scenario 5[][]Passed
render-order-follows-incoming scenario 6['a', 'b']['a', 'b']Passed
changed-type-state-reset scenario 1{'a': 1, 'b': 2}{'a': 1, 'b': 2}Passed
changed-type-state-reset scenario 2{'a': None}{'a': None}Passed
changed-type-state-reset scenario 3{'a': None}{'a': None}Passed
changed-type-state-reset scenario 4{'b': None}{'b': None}Passed
changed-type-state-reset scenario 5{}{}Passed
changed-type-state-reset scenario 6{'a': False, 'b': None}{'a': False, 'b': None}Passed
cleanup-before-replacement-mount scenario 1[][]Passed
cleanup-before-replacement-mount scenario 2[][]Passed
cleanup-before-replacement-mount scenario 3[['a', 'mount'], ['a', 'cleanup']][['a', 'cleanup'], ['a', 'mount']]Failed
cleanup-before-replacement-mount scenario 4[][]Passed
cleanup-before-replacement-mount scenario 5[][]Passed
cleanup-before-replacement-mount scenario 6[][]Passed
removed-state-pruning scenario 1{'a': 1, 'b': 2}{'a': 1, 'b': 2}Passed
removed-state-pruning scenario 2{}{}Passed
removed-state-pruning scenario 3{'a': 0}{'a': 0}Passed
removed-state-pruning scenario 4{'b': None}{'b': None}Passed
removed-state-pruning scenario 5{}{}Passed
removed-state-pruning scenario 6{'a': False}{'a': False}Passed
insertion-position scenario 1{'a': 1, 'b': 0}{'a': 1, 'b': 0}Passed
insertion-position scenario 2{'a': 0}{'a': 0}Passed
insertion-position scenario 3{'a': 0}{'a': 0}Passed
insertion-position scenario 4{'b': 0}{'b': 0}Passed
insertion-position scenario 5{}{}Passed
insertion-position scenario 6{'a': 0, 'b': 1}{'a': 0, 'b': 1}Passed
retained-instance-moves scenario 1['b', 'a']['b', 'a']Passed
retained-instance-moves scenario 2[][]Passed
retained-instance-moves scenario 3[][]Passed
retained-instance-moves scenario 4['b']['b']Passed
retained-instance-moves scenario 5[][]Passed
retained-instance-moves scenario 6[][]Passed
reordering distinct state values for every seed: type-and-key-reuse['b', 'a']['b', 'a']Passed
reordering distinct state values for every seed: new-instance-mounts[][]Passed
reordering distinct state values for every seed: old-instance-unmounts[][]Passed
reordering distinct state values for every seed: state-follows-key-through-reorder[2, 11][2, 11]Passed
reordering distinct state values for every seed: render-order-follows-incoming['b', 'a']['b', 'a']Passed
reordering distinct state values for every seed: changed-type-state-reset{'a': 11, 'b': 2}{'a': 11, 'b': 2}Passed
reordering distinct state values for every seed: cleanup-before-replacement-mount[][]Passed
reordering distinct state values for every seed: removed-state-pruning{'a': 11, 'b': 2}{'a': 11, 'b': 2}Passed
reordering distinct state values for every seed: insertion-position{'a': 1, 'b': 0}{'a': 1, 'b': 0}Passed
reordering distinct state values for every seed: retained-instance-moves['b', 'a']['b', 'a']Passed

SHA-256 / c08fe0c0f4d1901a423cd75ff6b4e4247a6f2ce35f8b9179c653623a09e59159

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(operation, s):
    old, incoming, state = s
    if operation == 'type-and-key-reuse':
        return [k for k,t in incoming if (k,t) in old]
    if operation == 'new-instance-mounts':
        return [k for k,t in incoming if (k,t) not in old]
    if operation == 'old-instance-unmounts':
        return [k for k,t in old if (k,t) not in incoming]
    if operation == 'state-follows-key-through-reorder':
        return [state.get(k) for k,t in incoming if (k,t) in old]
    if operation == 'render-order-follows-incoming':
        return [k for k,t in incoming]
    if operation == 'changed-type-state-reset':
        return {k:state.get(k) if (k,t) in old else None for k,t in incoming}
    if operation == 'cleanup-before-replacement-mount':
        return [(k,'cleanup') for k,t in old if k in dict(incoming) and (k,t) not in incoming]+[(k,'mount') for k,t in incoming if k in dict(old) and (k,t) not in old]
    if operation == 'removed-state-pruning':
        return {k:v for k,v in state.items() if k in dict(incoming)}
    if operation == 'insertion-position':
        return {k:i for i,(k,t) in enumerate(incoming)}
    if operation == 'retained-instance-moves':
        return [k for i,(k,t) in enumerate(incoming) if (k,t) in old and old.index((k,t))!=i]
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('type-and-key-reuse scenario 1', solve('type-and-key-reuse', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), ['b','a'])
check('type-and-key-reuse scenario 2', solve('type-and-key-reuse', ([], [('a','card')],{})), [])
check('type-and-key-reuse scenario 3', solve('type-and-key-reuse', ([('a','card')],[('a','panel')],{'a':0})), [])
check('type-and-key-reuse scenario 4', solve('type-and-key-reuse', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['b'])
check('type-and-key-reuse scenario 5', solve('type-and-key-reuse', ([('a','card')],[],{'a':N})), [])
check('type-and-key-reuse scenario 6', solve('type-and-key-reuse', ([('a','card')],[('a','card'),('b','card')],{'a':False})), ['a'])
check('new-instance-mounts scenario 1', solve('new-instance-mounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [])
check('new-instance-mounts scenario 2', solve('new-instance-mounts', ([], [('a','card')],{})), ['a'])
check('new-instance-mounts scenario 3', solve('new-instance-mounts', ([('a','card')],[('a','panel')],{'a':0})), ['a'])
check('new-instance-mounts scenario 4', solve('new-instance-mounts', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), [])
check('new-instance-mounts scenario 5', solve('new-instance-mounts', ([('a','card')],[],{'a':N})), [])
check('new-instance-mounts scenario 6', solve('new-instance-mounts', ([('a','card')],[('a','card'),('b','card')],{'a':False})), ['b'])
check('old-instance-unmounts scenario 1', solve('old-instance-unmounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [])
check('old-instance-unmounts scenario 2', solve('old-instance-unmounts', ([], [('a','card')],{})), [])
check('old-instance-unmounts scenario 3', solve('old-instance-unmounts', ([('a','card')],[('a','panel')],{'a':0})), ['a'])
check('old-instance-unmounts scenario 4', solve('old-instance-unmounts', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['a'])
check('old-instance-unmounts scenario 5', solve('old-instance-unmounts', ([('a','card')],[],{'a':N})), ['a'])
check('old-instance-unmounts scenario 6', solve('old-instance-unmounts', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [])
check('state-follows-key-through-reorder scenario 1', solve('state-follows-key-through-reorder', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [2,N])
check('state-follows-key-through-reorder scenario 2', solve('state-follows-key-through-reorder', ([], [('a','card')],{})), [])
check('state-follows-key-through-reorder scenario 3', solve('state-follows-key-through-reorder', ([('a','card')],[('a','panel')],{'a':0})), [])
check('state-follows-key-through-reorder scenario 4', solve('state-follows-key-through-reorder', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), [None])
check('state-follows-key-through-reorder scenario 5', solve('state-follows-key-through-reorder', ([('a','card')],[],{'a':N})), [])
check('state-follows-key-through-reorder scenario 6', solve('state-follows-key-through-reorder', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [False])
check('render-order-follows-incoming scenario 1', solve('render-order-follows-incoming', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), ['b','a'])
check('render-order-follows-incoming scenario 2', solve('render-order-follows-incoming', ([], [('a','card')],{})), ['a'])
check('render-order-follows-incoming scenario 3', solve('render-order-follows-incoming', ([('a','card')],[('a','panel')],{'a':0})), ['a'])
check('render-order-follows-incoming scenario 4', solve('render-order-follows-incoming', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['b'])
check('render-order-follows-incoming scenario 5', solve('render-order-follows-incoming', ([('a','card')],[],{'a':N})), [])
check('render-order-follows-incoming scenario 6', solve('render-order-follows-incoming', ([('a','card')],[('a','card'),('b','card')],{'a':False})), ['a','b'])
check('changed-type-state-reset scenario 1', solve('changed-type-state-reset', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), {'b':2,'a':N})
check('changed-type-state-reset scenario 2', solve('changed-type-state-reset', ([], [('a','card')],{})), {'a':None})
check('changed-type-state-reset scenario 3', solve('changed-type-state-reset', ([('a','card')],[('a','panel')],{'a':0})), {'a':None})
check('changed-type-state-reset scenario 4', solve('changed-type-state-reset', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), {'b':None})
check('changed-type-state-reset scenario 5', solve('changed-type-state-reset', ([('a','card')],[],{'a':N})), {})
check('changed-type-state-reset scenario 6', solve('changed-type-state-reset', ([('a','card')],[('a','card'),('b','card')],{'a':False})), {'a':False,'b':None})
check('cleanup-before-replacement-mount scenario 1', solve('cleanup-before-replacement-mount', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), [])
check('cleanup-before-replacement-mount scenario 2', solve('cleanup-before-replacement-mount', ([], [('a','card')],{})), [])
check('cleanup-before-replacement-mount scenario 3', solve('cleanup-before-replacement-mount', ([('a','card')],[('a','panel')],{'a':0})), [('a','cleanup'),('a','mount')])
check('cleanup-before-replacement-mount scenario 4', solve('cleanup-before-replacement-mount', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), [])
check('cleanup-before-replacement-mount scenario 5', solve('cleanup-before-replacement-mount', ([('a','card')],[],{'a':N})), [])
check('cleanup-before-replacement-mount scenario 6', solve('cleanup-before-replacement-mount', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [])
check('removed-state-pruning scenario 1', solve('removed-state-pruning', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), {'a':N,'b':2})
check('removed-state-pruning scenario 2', solve('removed-state-pruning', ([], [('a','card')],{})), {})
check('removed-state-pruning scenario 3', solve('removed-state-pruning', ([('a','card')],[('a','panel')],{'a':0})), {'a':0})
check('removed-state-pruning scenario 4', solve('removed-state-pruning', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), {'b':None})
check('removed-state-pruning scenario 5', solve('removed-state-pruning', ([('a','card')],[],{'a':N})), {})
check('removed-state-pruning scenario 6', solve('removed-state-pruning', ([('a','card')],[('a','card'),('b','card')],{'a':False})), {'a':False})
check('insertion-position scenario 1', solve('insertion-position', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), {'b':0,'a':1})
check('insertion-position scenario 2', solve('insertion-position', ([], [('a','card')],{})), {'a':0})
check('insertion-position scenario 3', solve('insertion-position', ([('a','card')],[('a','panel')],{'a':0})), {'a':0})
check('insertion-position scenario 4', solve('insertion-position', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), {'b':0})
check('insertion-position scenario 5', solve('insertion-position', ([('a','card')],[],{'a':N})), {})
check('insertion-position scenario 6', solve('insertion-position', ([('a','card')],[('a','card'),('b','card')],{'a':False})), {'a':0,'b':1})
check('retained-instance-moves scenario 1', solve('retained-instance-moves', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N,'b':2})), ['b','a'])
check('retained-instance-moves scenario 2', solve('retained-instance-moves', ([], [('a','card')],{})), [])
check('retained-instance-moves scenario 3', solve('retained-instance-moves', ([('a','card')],[('a','panel')],{'a':0})), [])
check('retained-instance-moves scenario 4', solve('retained-instance-moves', ([('a','card'),('b','panel')],[('b','panel')],{'a':1,'b':None})), ['b'])
check('retained-instance-moves scenario 5', solve('retained-instance-moves', ([('a','card')],[],{'a':N})), [])
check('retained-instance-moves scenario 6', solve('retained-instance-moves', ([('a','card')],[('a','card'),('b','card')],{'a':False})), [])
check('reordering distinct state values for every seed: type-and-key-reuse', solve('type-and-key-reuse', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), ['b','a'])
check('reordering distinct state values for every seed: new-instance-mounts', solve('new-instance-mounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [])
check('reordering distinct state values for every seed: old-instance-unmounts', solve('old-instance-unmounts', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [])
check('reordering distinct state values for every seed: state-follows-key-through-reorder', solve('state-follows-key-through-reorder', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [2,N+10])
check('reordering distinct state values for every seed: render-order-follows-incoming', solve('render-order-follows-incoming', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), ['b','a'])
check('reordering distinct state values for every seed: changed-type-state-reset', solve('changed-type-state-reset', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), {'b':2,'a':N+10})
check('reordering distinct state values for every seed: cleanup-before-replacement-mount', solve('cleanup-before-replacement-mount', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), [])
check('reordering distinct state values for every seed: removed-state-pruning', solve('removed-state-pruning', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), {'a':N+10,'b':2})
check('reordering distinct state values for every seed: insertion-position', solve('insertion-position', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), {'b':0,'a':1})
check('reordering distinct state values for every seed: retained-instance-moves', solve('retained-instance-moves', ([('a','card'),('b','card')],[('b','card'),('a','card')],{'a':N+10,'b':2})), ['b','a'])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
type-and-key-reuse scenario 1['b', 'a']['b', 'a']Passed
type-and-key-reuse scenario 2[][]Passed
type-and-key-reuse scenario 3[][]Passed
type-and-key-reuse scenario 4['b']['b']Passed
type-and-key-reuse scenario 5[][]Passed
type-and-key-reuse scenario 6['a']['a']Passed
new-instance-mounts scenario 1[][]Passed
new-instance-mounts scenario 2['a']['a']Passed
new-instance-mounts scenario 3['a']['a']Passed
new-instance-mounts scenario 4[][]Passed
new-instance-mounts scenario 5[][]Passed
new-instance-mounts scenario 6['b']['b']Passed
old-instance-unmounts scenario 1[][]Passed
old-instance-unmounts scenario 2[][]Passed
old-instance-unmounts scenario 3['a']['a']Passed
old-instance-unmounts scenario 4['a']['a']Passed
old-instance-unmounts scenario 5['a']['a']Passed
old-instance-unmounts scenario 6[][]Passed
state-follows-key-through-reorder scenario 1[2, 1][2, 1]Passed
state-follows-key-through-reorder scenario 2[][]Passed
state-follows-key-through-reorder scenario 3[][]Passed
state-follows-key-through-reorder scenario 4[None][None]Passed
state-follows-key-through-reorder scenario 5[][]Passed
state-follows-key-through-reorder scenario 6[False][False]Passed
render-order-follows-incoming scenario 1['b', 'a']['b', 'a']Passed
render-order-follows-incoming scenario 2['a']['a']Passed
render-order-follows-incoming scenario 3['a']['a']Passed
render-order-follows-incoming scenario 4['b']['b']Passed
render-order-follows-incoming scenario 5[][]Passed
render-order-follows-incoming scenario 6['a', 'b']['a', 'b']Passed
changed-type-state-reset scenario 1{'a': 1, 'b': 2}{'a': 1, 'b': 2}Passed
changed-type-state-reset scenario 2{'a': None}{'a': None}Passed
changed-type-state-reset scenario 3{'a': None}{'a': None}Passed
changed-type-state-reset scenario 4{'b': None}{'b': None}Passed
changed-type-state-reset scenario 5{}{}Passed
changed-type-state-reset scenario 6{'a': False, 'b': None}{'a': False, 'b': None}Passed
cleanup-before-replacement-mount scenario 1[][]Passed
cleanup-before-replacement-mount scenario 2[][]Passed
cleanup-before-replacement-mount scenario 3[['a', 'cleanup'], ['a', 'mount']][['a', 'cleanup'], ['a', 'mount']]Passed
cleanup-before-replacement-mount scenario 4[][]Passed
cleanup-before-replacement-mount scenario 5[][]Passed
cleanup-before-replacement-mount scenario 6[][]Passed
removed-state-pruning scenario 1{'a': 1, 'b': 2}{'a': 1, 'b': 2}Passed
removed-state-pruning scenario 2{}{}Passed
removed-state-pruning scenario 3{'a': 0}{'a': 0}Passed
removed-state-pruning scenario 4{'b': None}{'b': None}Passed
removed-state-pruning scenario 5{}{}Passed
removed-state-pruning scenario 6{'a': False}{'a': False}Passed
insertion-position scenario 1{'a': 1, 'b': 0}{'a': 1, 'b': 0}Passed
insertion-position scenario 2{'a': 0}{'a': 0}Passed
insertion-position scenario 3{'a': 0}{'a': 0}Passed
insertion-position scenario 4{'b': 0}{'b': 0}Passed
insertion-position scenario 5{}{}Passed
insertion-position scenario 6{'a': 0, 'b': 1}{'a': 0, 'b': 1}Passed
retained-instance-moves scenario 1['b', 'a']['b', 'a']Passed
retained-instance-moves scenario 2[][]Passed
retained-instance-moves scenario 3[][]Passed
retained-instance-moves scenario 4['b']['b']Passed
retained-instance-moves scenario 5[][]Passed
retained-instance-moves scenario 6[][]Passed
reordering distinct state values for every seed: type-and-key-reuse['b', 'a']['b', 'a']Passed
reordering distinct state values for every seed: new-instance-mounts[][]Passed
reordering distinct state values for every seed: old-instance-unmounts[][]Passed
reordering distinct state values for every seed: state-follows-key-through-reorder[2, 11][2, 11]Passed
reordering distinct state values for every seed: render-order-follows-incoming['b', 'a']['b', 'a']Passed
reordering distinct state values for every seed: changed-type-state-reset{'a': 11, 'b': 2}{'a': 11, 'b': 2}Passed
reordering distinct state values for every seed: cleanup-before-replacement-mount[][]Passed
reordering distinct state values for every seed: removed-state-pruning{'a': 11, 'b': 2}{'a': 11, 'b': 2}Passed
reordering distinct state values for every seed: insertion-position{'a': 1, 'b': 0}{'a': 1, 'b': 0}Passed
reordering distinct state values for every seed: retained-instance-moves['b', 'a']['b', 'a']Passed

SHA-256 / 8ab35c285e892b82a66289872a20ea352d897c4a69d142bb0aa001cc45a97b3a

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

Case digest / 5a3dbf197d45e25a954fb7e620d985903f1cf30507e437b1de9d15e1830b299e