FA-24481 / Client state / Open access
Keyed component instance reconciliation: Retained instance moves · case 01
Retained instance moves.
ROOT CAUSE
The retained-instance-moves client decision evaluates `[]` instead of `[k for i,(k,t) in enumerate(incoming) if (k,t) in old and old.index((k,t))!=i]`.
VERIFIED REPAIR
Apply the modeled retained-instance-moves rule: `[k for i,(k,t) in enumerate(incoming) if (k,t) in old and old.index((k,t))!=i]`.
Unsuccessful approach: The partial repair `[k for k,t in incoming if (k,t) in old]` 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 retained-instance-moves 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,'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 []
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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'] | Failed |
| retained-instance-moves scenario 2 | [] | [] | Passed |
| retained-instance-moves scenario 3 | [] | [] | Passed |
| retained-instance-moves scenario 4 | [] | ['b'] | Failed |
| 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'] | Failed |
SHA-256 / 841be29783e4670147369d6648788f0b7a1327adba53a86f5374dc62877579bc
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,'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 k,t in incoming if (k,t) in old]
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 | ['a'] | [] | Failed |
| 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 / 59728f391684d07d45a57917f8897af6639f8062eea1bd8b168d716b054c77e6
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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.868597+00:00.
Case digest / 4d5bb4454439c6efe564f41be22149841783c2a1a0a6b6e50b2f22739ff0c1ac