FAILURE MAP
← Case archive

FA-23891 / Client state / Open access

Component effect lifecycle: Generation increment · case 01

Generation increment.

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

ROOT CAUSE

The generation-increment client decision evaluates `run` instead of `run+1`.

VERIFIED REPAIR

Apply the modeled generation-increment rule: `run+1`.

Unsuccessful approach: The partial repair `1` still violates the explicit fixture contract.

Case contract

An effect tracks dependency length, values and scalar types; an empty dependency vector differs from no prior run. Cleanup precedes setup, unmount suppresses completion writes, and each setup advances a generation. Operation generation-increment 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):
    mounted, dependencies, previous, cleanup, run, owner, completion_owner = s
    if operation == 'dependency-shape-comparison':
        return previous is None or len(dependencies)!=len(previous) or any(type(a)!=type(b) or a!=b for a,b in zip(dependencies,previous))
    if operation == 'unmount-cleanup':
        return cleanup and not mounted
    if operation == 'initial-effect-run':
        return previous is None or run==0
    if operation == 'cleanup-before-rerun':
        return ['cleanup','setup'] if cleanup else ['setup']
    if operation == 'completion-owner-check':
        return mounted and owner==completion_owner
    if operation == 'dependency-snapshot-copy':
        return list(dependencies)
    if operation == 'generation-increment':
        return run
    if operation == 'setup-after-unmount':
        return 'setup' if mounted else 'skip'
    if operation == 'cleanup-registration-retained':
        return cleanup if mounted else False
    if operation == 'owner-change-invalidates':
        return owner!=completion_owner
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dependency-shape-comparison scenario 1', solve('dependency-shape-comparison', (True,[N,2],[N,1],True,2,'a','a')), True)
check('dependency-shape-comparison scenario 2', solve('dependency-shape-comparison', (True,[],[],False,0,'a','a')), False)
check('dependency-shape-comparison scenario 3', solve('dependency-shape-comparison', (False,[1],[1],True,1,'a','a')), False)
check('dependency-shape-comparison scenario 4', solve('dependency-shape-comparison', (True,[0],[False],True,3,'a','b')), True)
check('dependency-shape-comparison scenario 5', solve('dependency-shape-comparison', (True,[None],None,False,0,'b','b')), True)
check('dependency-shape-comparison scenario 6', solve('dependency-shape-comparison', (True,[1,2],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 1', solve('unmount-cleanup', (True,[N,2],[N,1],True,2,'a','a')), False)
check('unmount-cleanup scenario 2', solve('unmount-cleanup', (True,[],[],False,0,'a','a')), False)
check('unmount-cleanup scenario 3', solve('unmount-cleanup', (False,[1],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 4', solve('unmount-cleanup', (True,[0],[False],True,3,'a','b')), False)
check('unmount-cleanup scenario 5', solve('unmount-cleanup', (True,[None],None,False,0,'b','b')), False)
check('unmount-cleanup scenario 6', solve('unmount-cleanup', (True,[1,2],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 1', solve('initial-effect-run', (True,[N,2],[N,1],True,2,'a','a')), False)
check('initial-effect-run scenario 2', solve('initial-effect-run', (True,[],[],False,0,'a','a')), True)
check('initial-effect-run scenario 3', solve('initial-effect-run', (False,[1],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 4', solve('initial-effect-run', (True,[0],[False],True,3,'a','b')), False)
check('initial-effect-run scenario 5', solve('initial-effect-run', (True,[None],None,False,0,'b','b')), True)
check('initial-effect-run scenario 6', solve('initial-effect-run', (True,[1,2],[1],True,1,'a','a')), False)
check('cleanup-before-rerun scenario 1', solve('cleanup-before-rerun', (True,[N,2],[N,1],True,2,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 2', solve('cleanup-before-rerun', (True,[],[],False,0,'a','a')), ['setup'])
check('cleanup-before-rerun scenario 3', solve('cleanup-before-rerun', (False,[1],[1],True,1,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 4', solve('cleanup-before-rerun', (True,[0],[False],True,3,'a','b')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 5', solve('cleanup-before-rerun', (True,[None],None,False,0,'b','b')), ['setup'])
check('cleanup-before-rerun scenario 6', solve('cleanup-before-rerun', (True,[1,2],[1],True,1,'a','a')), ['cleanup','setup'])
check('completion-owner-check scenario 1', solve('completion-owner-check', (True,[N,2],[N,1],True,2,'a','a')), True)
check('completion-owner-check scenario 2', solve('completion-owner-check', (True,[],[],False,0,'a','a')), True)
check('completion-owner-check scenario 3', solve('completion-owner-check', (False,[1],[1],True,1,'a','a')), False)
check('completion-owner-check scenario 4', solve('completion-owner-check', (True,[0],[False],True,3,'a','b')), False)
check('completion-owner-check scenario 5', solve('completion-owner-check', (True,[None],None,False,0,'b','b')), True)
check('completion-owner-check scenario 6', solve('completion-owner-check', (True,[1,2],[1],True,1,'a','a')), True)
check('dependency-snapshot-copy scenario 1', solve('dependency-snapshot-copy', (True,[N,2],[N,1],True,2,'a','a')), [N,2])
check('dependency-snapshot-copy scenario 2', solve('dependency-snapshot-copy', (True,[],[],False,0,'a','a')), [])
check('dependency-snapshot-copy scenario 3', solve('dependency-snapshot-copy', (False,[1],[1],True,1,'a','a')), [1])
check('dependency-snapshot-copy scenario 4', solve('dependency-snapshot-copy', (True,[0],[False],True,3,'a','b')), [0])
check('dependency-snapshot-copy scenario 5', solve('dependency-snapshot-copy', (True,[None],None,False,0,'b','b')), [None])
check('dependency-snapshot-copy scenario 6', solve('dependency-snapshot-copy', (True,[1,2],[1],True,1,'a','a')), [1,2])
check('generation-increment scenario 1', solve('generation-increment', (True,[N,2],[N,1],True,2,'a','a')), 3)
check('generation-increment scenario 2', solve('generation-increment', (True,[],[],False,0,'a','a')), 1)
check('generation-increment scenario 3', solve('generation-increment', (False,[1],[1],True,1,'a','a')), 2)
check('generation-increment scenario 4', solve('generation-increment', (True,[0],[False],True,3,'a','b')), 4)
check('generation-increment scenario 5', solve('generation-increment', (True,[None],None,False,0,'b','b')), 1)
check('generation-increment scenario 6', solve('generation-increment', (True,[1,2],[1],True,1,'a','a')), 2)
check('setup-after-unmount scenario 1', solve('setup-after-unmount', (True,[N,2],[N,1],True,2,'a','a')), 'setup')
check('setup-after-unmount scenario 2', solve('setup-after-unmount', (True,[],[],False,0,'a','a')), 'setup')
check('setup-after-unmount scenario 3', solve('setup-after-unmount', (False,[1],[1],True,1,'a','a')), 'skip')
check('setup-after-unmount scenario 4', solve('setup-after-unmount', (True,[0],[False],True,3,'a','b')), 'setup')
check('setup-after-unmount scenario 5', solve('setup-after-unmount', (True,[None],None,False,0,'b','b')), 'setup')
check('setup-after-unmount scenario 6', solve('setup-after-unmount', (True,[1,2],[1],True,1,'a','a')), 'setup')
check('cleanup-registration-retained scenario 1', solve('cleanup-registration-retained', (True,[N,2],[N,1],True,2,'a','a')), True)
check('cleanup-registration-retained scenario 2', solve('cleanup-registration-retained', (True,[],[],False,0,'a','a')), False)
check('cleanup-registration-retained scenario 3', solve('cleanup-registration-retained', (False,[1],[1],True,1,'a','a')), False)
check('cleanup-registration-retained scenario 4', solve('cleanup-registration-retained', (True,[0],[False],True,3,'a','b')), True)
check('cleanup-registration-retained scenario 5', solve('cleanup-registration-retained', (True,[None],None,False,0,'b','b')), False)
check('cleanup-registration-retained scenario 6', solve('cleanup-registration-retained', (True,[1,2],[1],True,1,'a','a')), True)
check('owner-change-invalidates scenario 1', solve('owner-change-invalidates', (True,[N,2],[N,1],True,2,'a','a')), False)
check('owner-change-invalidates scenario 2', solve('owner-change-invalidates', (True,[],[],False,0,'a','a')), False)
check('owner-change-invalidates scenario 3', solve('owner-change-invalidates', (False,[1],[1],True,1,'a','a')), False)
check('owner-change-invalidates scenario 4', solve('owner-change-invalidates', (True,[0],[False],True,3,'a','b')), True)
check('owner-change-invalidates scenario 5', solve('owner-change-invalidates', (True,[None],None,False,0,'b','b')), False)
check('owner-change-invalidates scenario 6', solve('owner-change-invalidates', (True,[1,2],[1],True,1,'a','a')), False)
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
dependency-shape-comparison scenario 1TrueTruePassed
dependency-shape-comparison scenario 2FalseFalsePassed
dependency-shape-comparison scenario 3FalseFalsePassed
dependency-shape-comparison scenario 4TrueTruePassed
dependency-shape-comparison scenario 5TrueTruePassed
dependency-shape-comparison scenario 6TrueTruePassed
unmount-cleanup scenario 1FalseFalsePassed
unmount-cleanup scenario 2FalseFalsePassed
unmount-cleanup scenario 3TrueTruePassed
unmount-cleanup scenario 4FalseFalsePassed
unmount-cleanup scenario 5FalseFalsePassed
unmount-cleanup scenario 6FalseFalsePassed
initial-effect-run scenario 1FalseFalsePassed
initial-effect-run scenario 2TrueTruePassed
initial-effect-run scenario 3FalseFalsePassed
initial-effect-run scenario 4FalseFalsePassed
initial-effect-run scenario 5TrueTruePassed
initial-effect-run scenario 6FalseFalsePassed
cleanup-before-rerun scenario 1['cleanup', 'setup']['cleanup', 'setup']Passed
cleanup-before-rerun scenario 2['setup']['setup']Passed
cleanup-before-rerun scenario 3['cleanup', 'setup']['cleanup', 'setup']Passed
cleanup-before-rerun scenario 4['cleanup', 'setup']['cleanup', 'setup']Passed
cleanup-before-rerun scenario 5['setup']['setup']Passed
cleanup-before-rerun scenario 6['cleanup', 'setup']['cleanup', 'setup']Passed
completion-owner-check scenario 1TrueTruePassed
completion-owner-check scenario 2TrueTruePassed
completion-owner-check scenario 3FalseFalsePassed
completion-owner-check scenario 4FalseFalsePassed
completion-owner-check scenario 5TrueTruePassed
completion-owner-check scenario 6TrueTruePassed
dependency-snapshot-copy scenario 1[1, 2][1, 2]Passed
dependency-snapshot-copy scenario 2[][]Passed
dependency-snapshot-copy scenario 3[1][1]Passed
dependency-snapshot-copy scenario 4[0][0]Passed
dependency-snapshot-copy scenario 5[None][None]Passed
dependency-snapshot-copy scenario 6[1, 2][1, 2]Passed
generation-increment scenario 123Failed
generation-increment scenario 201Failed
generation-increment scenario 312Failed
generation-increment scenario 434Failed
generation-increment scenario 501Failed
generation-increment scenario 612Failed
setup-after-unmount scenario 1setupsetupPassed
setup-after-unmount scenario 2setupsetupPassed
setup-after-unmount scenario 3skipskipPassed
setup-after-unmount scenario 4setupsetupPassed
setup-after-unmount scenario 5setupsetupPassed
setup-after-unmount scenario 6setupsetupPassed
cleanup-registration-retained scenario 1TrueTruePassed
cleanup-registration-retained scenario 2FalseFalsePassed
cleanup-registration-retained scenario 3FalseFalsePassed
cleanup-registration-retained scenario 4TrueTruePassed
cleanup-registration-retained scenario 5FalseFalsePassed
cleanup-registration-retained scenario 6TrueTruePassed
owner-change-invalidates scenario 1FalseFalsePassed
owner-change-invalidates scenario 2FalseFalsePassed
owner-change-invalidates scenario 3FalseFalsePassed
owner-change-invalidates scenario 4TrueTruePassed
owner-change-invalidates scenario 5FalseFalsePassed
owner-change-invalidates scenario 6FalseFalsePassed

SHA-256 / 234f689f7b7fcd34a57aa9dbbe2318d540bfabb032f84ce43e11a97ebb884074

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(operation, s):
    mounted, dependencies, previous, cleanup, run, owner, completion_owner = s
    if operation == 'dependency-shape-comparison':
        return previous is None or len(dependencies)!=len(previous) or any(type(a)!=type(b) or a!=b for a,b in zip(dependencies,previous))
    if operation == 'unmount-cleanup':
        return cleanup and not mounted
    if operation == 'initial-effect-run':
        return previous is None or run==0
    if operation == 'cleanup-before-rerun':
        return ['cleanup','setup'] if cleanup else ['setup']
    if operation == 'completion-owner-check':
        return mounted and owner==completion_owner
    if operation == 'dependency-snapshot-copy':
        return list(dependencies)
    if operation == 'generation-increment':
        return 1
    if operation == 'setup-after-unmount':
        return 'setup' if mounted else 'skip'
    if operation == 'cleanup-registration-retained':
        return cleanup if mounted else False
    if operation == 'owner-change-invalidates':
        return owner!=completion_owner
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dependency-shape-comparison scenario 1', solve('dependency-shape-comparison', (True,[N,2],[N,1],True,2,'a','a')), True)
check('dependency-shape-comparison scenario 2', solve('dependency-shape-comparison', (True,[],[],False,0,'a','a')), False)
check('dependency-shape-comparison scenario 3', solve('dependency-shape-comparison', (False,[1],[1],True,1,'a','a')), False)
check('dependency-shape-comparison scenario 4', solve('dependency-shape-comparison', (True,[0],[False],True,3,'a','b')), True)
check('dependency-shape-comparison scenario 5', solve('dependency-shape-comparison', (True,[None],None,False,0,'b','b')), True)
check('dependency-shape-comparison scenario 6', solve('dependency-shape-comparison', (True,[1,2],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 1', solve('unmount-cleanup', (True,[N,2],[N,1],True,2,'a','a')), False)
check('unmount-cleanup scenario 2', solve('unmount-cleanup', (True,[],[],False,0,'a','a')), False)
check('unmount-cleanup scenario 3', solve('unmount-cleanup', (False,[1],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 4', solve('unmount-cleanup', (True,[0],[False],True,3,'a','b')), False)
check('unmount-cleanup scenario 5', solve('unmount-cleanup', (True,[None],None,False,0,'b','b')), False)
check('unmount-cleanup scenario 6', solve('unmount-cleanup', (True,[1,2],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 1', solve('initial-effect-run', (True,[N,2],[N,1],True,2,'a','a')), False)
check('initial-effect-run scenario 2', solve('initial-effect-run', (True,[],[],False,0,'a','a')), True)
check('initial-effect-run scenario 3', solve('initial-effect-run', (False,[1],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 4', solve('initial-effect-run', (True,[0],[False],True,3,'a','b')), False)
check('initial-effect-run scenario 5', solve('initial-effect-run', (True,[None],None,False,0,'b','b')), True)
check('initial-effect-run scenario 6', solve('initial-effect-run', (True,[1,2],[1],True,1,'a','a')), False)
check('cleanup-before-rerun scenario 1', solve('cleanup-before-rerun', (True,[N,2],[N,1],True,2,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 2', solve('cleanup-before-rerun', (True,[],[],False,0,'a','a')), ['setup'])
check('cleanup-before-rerun scenario 3', solve('cleanup-before-rerun', (False,[1],[1],True,1,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 4', solve('cleanup-before-rerun', (True,[0],[False],True,3,'a','b')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 5', solve('cleanup-before-rerun', (True,[None],None,False,0,'b','b')), ['setup'])
check('cleanup-before-rerun scenario 6', solve('cleanup-before-rerun', (True,[1,2],[1],True,1,'a','a')), ['cleanup','setup'])
check('completion-owner-check scenario 1', solve('completion-owner-check', (True,[N,2],[N,1],True,2,'a','a')), True)
check('completion-owner-check scenario 2', solve('completion-owner-check', (True,[],[],False,0,'a','a')), True)
check('completion-owner-check scenario 3', solve('completion-owner-check', (False,[1],[1],True,1,'a','a')), False)
check('completion-owner-check scenario 4', solve('completion-owner-check', (True,[0],[False],True,3,'a','b')), False)
check('completion-owner-check scenario 5', solve('completion-owner-check', (True,[None],None,False,0,'b','b')), True)
check('completion-owner-check scenario 6', solve('completion-owner-check', (True,[1,2],[1],True,1,'a','a')), True)
check('dependency-snapshot-copy scenario 1', solve('dependency-snapshot-copy', (True,[N,2],[N,1],True,2,'a','a')), [N,2])
check('dependency-snapshot-copy scenario 2', solve('dependency-snapshot-copy', (True,[],[],False,0,'a','a')), [])
check('dependency-snapshot-copy scenario 3', solve('dependency-snapshot-copy', (False,[1],[1],True,1,'a','a')), [1])
check('dependency-snapshot-copy scenario 4', solve('dependency-snapshot-copy', (True,[0],[False],True,3,'a','b')), [0])
check('dependency-snapshot-copy scenario 5', solve('dependency-snapshot-copy', (True,[None],None,False,0,'b','b')), [None])
check('dependency-snapshot-copy scenario 6', solve('dependency-snapshot-copy', (True,[1,2],[1],True,1,'a','a')), [1,2])
check('generation-increment scenario 1', solve('generation-increment', (True,[N,2],[N,1],True,2,'a','a')), 3)
check('generation-increment scenario 2', solve('generation-increment', (True,[],[],False,0,'a','a')), 1)
check('generation-increment scenario 3', solve('generation-increment', (False,[1],[1],True,1,'a','a')), 2)
check('generation-increment scenario 4', solve('generation-increment', (True,[0],[False],True,3,'a','b')), 4)
check('generation-increment scenario 5', solve('generation-increment', (True,[None],None,False,0,'b','b')), 1)
check('generation-increment scenario 6', solve('generation-increment', (True,[1,2],[1],True,1,'a','a')), 2)
check('setup-after-unmount scenario 1', solve('setup-after-unmount', (True,[N,2],[N,1],True,2,'a','a')), 'setup')
check('setup-after-unmount scenario 2', solve('setup-after-unmount', (True,[],[],False,0,'a','a')), 'setup')
check('setup-after-unmount scenario 3', solve('setup-after-unmount', (False,[1],[1],True,1,'a','a')), 'skip')
check('setup-after-unmount scenario 4', solve('setup-after-unmount', (True,[0],[False],True,3,'a','b')), 'setup')
check('setup-after-unmount scenario 5', solve('setup-after-unmount', (True,[None],None,False,0,'b','b')), 'setup')
check('setup-after-unmount scenario 6', solve('setup-after-unmount', (True,[1,2],[1],True,1,'a','a')), 'setup')
check('cleanup-registration-retained scenario 1', solve('cleanup-registration-retained', (True,[N,2],[N,1],True,2,'a','a')), True)
check('cleanup-registration-retained scenario 2', solve('cleanup-registration-retained', (True,[],[],False,0,'a','a')), False)
check('cleanup-registration-retained scenario 3', solve('cleanup-registration-retained', (False,[1],[1],True,1,'a','a')), False)
check('cleanup-registration-retained scenario 4', solve('cleanup-registration-retained', (True,[0],[False],True,3,'a','b')), True)
check('cleanup-registration-retained scenario 5', solve('cleanup-registration-retained', (True,[None],None,False,0,'b','b')), False)
check('cleanup-registration-retained scenario 6', solve('cleanup-registration-retained', (True,[1,2],[1],True,1,'a','a')), True)
check('owner-change-invalidates scenario 1', solve('owner-change-invalidates', (True,[N,2],[N,1],True,2,'a','a')), False)
check('owner-change-invalidates scenario 2', solve('owner-change-invalidates', (True,[],[],False,0,'a','a')), False)
check('owner-change-invalidates scenario 3', solve('owner-change-invalidates', (False,[1],[1],True,1,'a','a')), False)
check('owner-change-invalidates scenario 4', solve('owner-change-invalidates', (True,[0],[False],True,3,'a','b')), True)
check('owner-change-invalidates scenario 5', solve('owner-change-invalidates', (True,[None],None,False,0,'b','b')), False)
check('owner-change-invalidates scenario 6', solve('owner-change-invalidates', (True,[1,2],[1],True,1,'a','a')), False)
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
dependency-shape-comparison scenario 1TrueTruePassed
dependency-shape-comparison scenario 2FalseFalsePassed
dependency-shape-comparison scenario 3FalseFalsePassed
dependency-shape-comparison scenario 4TrueTruePassed
dependency-shape-comparison scenario 5TrueTruePassed
dependency-shape-comparison scenario 6TrueTruePassed
unmount-cleanup scenario 1FalseFalsePassed
unmount-cleanup scenario 2FalseFalsePassed
unmount-cleanup scenario 3TrueTruePassed
unmount-cleanup scenario 4FalseFalsePassed
unmount-cleanup scenario 5FalseFalsePassed
unmount-cleanup scenario 6FalseFalsePassed
initial-effect-run scenario 1FalseFalsePassed
initial-effect-run scenario 2TrueTruePassed
initial-effect-run scenario 3FalseFalsePassed
initial-effect-run scenario 4FalseFalsePassed
initial-effect-run scenario 5TrueTruePassed
initial-effect-run scenario 6FalseFalsePassed
cleanup-before-rerun scenario 1['cleanup', 'setup']['cleanup', 'setup']Passed
cleanup-before-rerun scenario 2['setup']['setup']Passed
cleanup-before-rerun scenario 3['cleanup', 'setup']['cleanup', 'setup']Passed
cleanup-before-rerun scenario 4['cleanup', 'setup']['cleanup', 'setup']Passed
cleanup-before-rerun scenario 5['setup']['setup']Passed
cleanup-before-rerun scenario 6['cleanup', 'setup']['cleanup', 'setup']Passed
completion-owner-check scenario 1TrueTruePassed
completion-owner-check scenario 2TrueTruePassed
completion-owner-check scenario 3FalseFalsePassed
completion-owner-check scenario 4FalseFalsePassed
completion-owner-check scenario 5TrueTruePassed
completion-owner-check scenario 6TrueTruePassed
dependency-snapshot-copy scenario 1[1, 2][1, 2]Passed
dependency-snapshot-copy scenario 2[][]Passed
dependency-snapshot-copy scenario 3[1][1]Passed
dependency-snapshot-copy scenario 4[0][0]Passed
dependency-snapshot-copy scenario 5[None][None]Passed
dependency-snapshot-copy scenario 6[1, 2][1, 2]Passed
generation-increment scenario 113Failed
generation-increment scenario 211Passed
generation-increment scenario 312Failed
generation-increment scenario 414Failed
generation-increment scenario 511Passed
generation-increment scenario 612Failed
setup-after-unmount scenario 1setupsetupPassed
setup-after-unmount scenario 2setupsetupPassed
setup-after-unmount scenario 3skipskipPassed
setup-after-unmount scenario 4setupsetupPassed
setup-after-unmount scenario 5setupsetupPassed
setup-after-unmount scenario 6setupsetupPassed
cleanup-registration-retained scenario 1TrueTruePassed
cleanup-registration-retained scenario 2FalseFalsePassed
cleanup-registration-retained scenario 3FalseFalsePassed
cleanup-registration-retained scenario 4TrueTruePassed
cleanup-registration-retained scenario 5FalseFalsePassed
cleanup-registration-retained scenario 6TrueTruePassed
owner-change-invalidates scenario 1FalseFalsePassed
owner-change-invalidates scenario 2FalseFalsePassed
owner-change-invalidates scenario 3FalseFalsePassed
owner-change-invalidates scenario 4TrueTruePassed
owner-change-invalidates scenario 5FalseFalsePassed
owner-change-invalidates scenario 6FalseFalsePassed

SHA-256 / f4363c632e98ef1c6c347391220de226253c7b82bee9d9a7e6fb4f9c55ae3d43

3 / The verified repair

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

N = 1
observations = []
def solve(operation, s):
    mounted, dependencies, previous, cleanup, run, owner, completion_owner = s
    if operation == 'dependency-shape-comparison':
        return previous is None or len(dependencies)!=len(previous) or any(type(a)!=type(b) or a!=b for a,b in zip(dependencies,previous))
    if operation == 'unmount-cleanup':
        return cleanup and not mounted
    if operation == 'initial-effect-run':
        return previous is None or run==0
    if operation == 'cleanup-before-rerun':
        return ['cleanup','setup'] if cleanup else ['setup']
    if operation == 'completion-owner-check':
        return mounted and owner==completion_owner
    if operation == 'dependency-snapshot-copy':
        return list(dependencies)
    if operation == 'generation-increment':
        return run+1
    if operation == 'setup-after-unmount':
        return 'setup' if mounted else 'skip'
    if operation == 'cleanup-registration-retained':
        return cleanup if mounted else False
    if operation == 'owner-change-invalidates':
        return owner!=completion_owner
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('dependency-shape-comparison scenario 1', solve('dependency-shape-comparison', (True,[N,2],[N,1],True,2,'a','a')), True)
check('dependency-shape-comparison scenario 2', solve('dependency-shape-comparison', (True,[],[],False,0,'a','a')), False)
check('dependency-shape-comparison scenario 3', solve('dependency-shape-comparison', (False,[1],[1],True,1,'a','a')), False)
check('dependency-shape-comparison scenario 4', solve('dependency-shape-comparison', (True,[0],[False],True,3,'a','b')), True)
check('dependency-shape-comparison scenario 5', solve('dependency-shape-comparison', (True,[None],None,False,0,'b','b')), True)
check('dependency-shape-comparison scenario 6', solve('dependency-shape-comparison', (True,[1,2],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 1', solve('unmount-cleanup', (True,[N,2],[N,1],True,2,'a','a')), False)
check('unmount-cleanup scenario 2', solve('unmount-cleanup', (True,[],[],False,0,'a','a')), False)
check('unmount-cleanup scenario 3', solve('unmount-cleanup', (False,[1],[1],True,1,'a','a')), True)
check('unmount-cleanup scenario 4', solve('unmount-cleanup', (True,[0],[False],True,3,'a','b')), False)
check('unmount-cleanup scenario 5', solve('unmount-cleanup', (True,[None],None,False,0,'b','b')), False)
check('unmount-cleanup scenario 6', solve('unmount-cleanup', (True,[1,2],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 1', solve('initial-effect-run', (True,[N,2],[N,1],True,2,'a','a')), False)
check('initial-effect-run scenario 2', solve('initial-effect-run', (True,[],[],False,0,'a','a')), True)
check('initial-effect-run scenario 3', solve('initial-effect-run', (False,[1],[1],True,1,'a','a')), False)
check('initial-effect-run scenario 4', solve('initial-effect-run', (True,[0],[False],True,3,'a','b')), False)
check('initial-effect-run scenario 5', solve('initial-effect-run', (True,[None],None,False,0,'b','b')), True)
check('initial-effect-run scenario 6', solve('initial-effect-run', (True,[1,2],[1],True,1,'a','a')), False)
check('cleanup-before-rerun scenario 1', solve('cleanup-before-rerun', (True,[N,2],[N,1],True,2,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 2', solve('cleanup-before-rerun', (True,[],[],False,0,'a','a')), ['setup'])
check('cleanup-before-rerun scenario 3', solve('cleanup-before-rerun', (False,[1],[1],True,1,'a','a')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 4', solve('cleanup-before-rerun', (True,[0],[False],True,3,'a','b')), ['cleanup','setup'])
check('cleanup-before-rerun scenario 5', solve('cleanup-before-rerun', (True,[None],None,False,0,'b','b')), ['setup'])
check('cleanup-before-rerun scenario 6', solve('cleanup-before-rerun', (True,[1,2],[1],True,1,'a','a')), ['cleanup','setup'])
check('completion-owner-check scenario 1', solve('completion-owner-check', (True,[N,2],[N,1],True,2,'a','a')), True)
check('completion-owner-check scenario 2', solve('completion-owner-check', (True,[],[],False,0,'a','a')), True)
check('completion-owner-check scenario 3', solve('completion-owner-check', (False,[1],[1],True,1,'a','a')), False)
check('completion-owner-check scenario 4', solve('completion-owner-check', (True,[0],[False],True,3,'a','b')), False)
check('completion-owner-check scenario 5', solve('completion-owner-check', (True,[None],None,False,0,'b','b')), True)
check('completion-owner-check scenario 6', solve('completion-owner-check', (True,[1,2],[1],True,1,'a','a')), True)
check('dependency-snapshot-copy scenario 1', solve('dependency-snapshot-copy', (True,[N,2],[N,1],True,2,'a','a')), [N,2])
check('dependency-snapshot-copy scenario 2', solve('dependency-snapshot-copy', (True,[],[],False,0,'a','a')), [])
check('dependency-snapshot-copy scenario 3', solve('dependency-snapshot-copy', (False,[1],[1],True,1,'a','a')), [1])
check('dependency-snapshot-copy scenario 4', solve('dependency-snapshot-copy', (True,[0],[False],True,3,'a','b')), [0])
check('dependency-snapshot-copy scenario 5', solve('dependency-snapshot-copy', (True,[None],None,False,0,'b','b')), [None])
check('dependency-snapshot-copy scenario 6', solve('dependency-snapshot-copy', (True,[1,2],[1],True,1,'a','a')), [1,2])
check('generation-increment scenario 1', solve('generation-increment', (True,[N,2],[N,1],True,2,'a','a')), 3)
check('generation-increment scenario 2', solve('generation-increment', (True,[],[],False,0,'a','a')), 1)
check('generation-increment scenario 3', solve('generation-increment', (False,[1],[1],True,1,'a','a')), 2)
check('generation-increment scenario 4', solve('generation-increment', (True,[0],[False],True,3,'a','b')), 4)
check('generation-increment scenario 5', solve('generation-increment', (True,[None],None,False,0,'b','b')), 1)
check('generation-increment scenario 6', solve('generation-increment', (True,[1,2],[1],True,1,'a','a')), 2)
check('setup-after-unmount scenario 1', solve('setup-after-unmount', (True,[N,2],[N,1],True,2,'a','a')), 'setup')
check('setup-after-unmount scenario 2', solve('setup-after-unmount', (True,[],[],False,0,'a','a')), 'setup')
check('setup-after-unmount scenario 3', solve('setup-after-unmount', (False,[1],[1],True,1,'a','a')), 'skip')
check('setup-after-unmount scenario 4', solve('setup-after-unmount', (True,[0],[False],True,3,'a','b')), 'setup')
check('setup-after-unmount scenario 5', solve('setup-after-unmount', (True,[None],None,False,0,'b','b')), 'setup')
check('setup-after-unmount scenario 6', solve('setup-after-unmount', (True,[1,2],[1],True,1,'a','a')), 'setup')
check('cleanup-registration-retained scenario 1', solve('cleanup-registration-retained', (True,[N,2],[N,1],True,2,'a','a')), True)
check('cleanup-registration-retained scenario 2', solve('cleanup-registration-retained', (True,[],[],False,0,'a','a')), False)
check('cleanup-registration-retained scenario 3', solve('cleanup-registration-retained', (False,[1],[1],True,1,'a','a')), False)
check('cleanup-registration-retained scenario 4', solve('cleanup-registration-retained', (True,[0],[False],True,3,'a','b')), True)
check('cleanup-registration-retained scenario 5', solve('cleanup-registration-retained', (True,[None],None,False,0,'b','b')), False)
check('cleanup-registration-retained scenario 6', solve('cleanup-registration-retained', (True,[1,2],[1],True,1,'a','a')), True)
check('owner-change-invalidates scenario 1', solve('owner-change-invalidates', (True,[N,2],[N,1],True,2,'a','a')), False)
check('owner-change-invalidates scenario 2', solve('owner-change-invalidates', (True,[],[],False,0,'a','a')), False)
check('owner-change-invalidates scenario 3', solve('owner-change-invalidates', (False,[1],[1],True,1,'a','a')), False)
check('owner-change-invalidates scenario 4', solve('owner-change-invalidates', (True,[0],[False],True,3,'a','b')), True)
check('owner-change-invalidates scenario 5', solve('owner-change-invalidates', (True,[None],None,False,0,'b','b')), False)
check('owner-change-invalidates scenario 6', solve('owner-change-invalidates', (True,[1,2],[1],True,1,'a','a')), False)
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
dependency-shape-comparison scenario 1TrueTruePassed
dependency-shape-comparison scenario 2FalseFalsePassed
dependency-shape-comparison scenario 3FalseFalsePassed
dependency-shape-comparison scenario 4TrueTruePassed
dependency-shape-comparison scenario 5TrueTruePassed
dependency-shape-comparison scenario 6TrueTruePassed
unmount-cleanup scenario 1FalseFalsePassed
unmount-cleanup scenario 2FalseFalsePassed
unmount-cleanup scenario 3TrueTruePassed
unmount-cleanup scenario 4FalseFalsePassed
unmount-cleanup scenario 5FalseFalsePassed
unmount-cleanup scenario 6FalseFalsePassed
initial-effect-run scenario 1FalseFalsePassed
initial-effect-run scenario 2TrueTruePassed
initial-effect-run scenario 3FalseFalsePassed
initial-effect-run scenario 4FalseFalsePassed
initial-effect-run scenario 5TrueTruePassed
initial-effect-run scenario 6FalseFalsePassed
cleanup-before-rerun scenario 1['cleanup', 'setup']['cleanup', 'setup']Passed
cleanup-before-rerun scenario 2['setup']['setup']Passed
cleanup-before-rerun scenario 3['cleanup', 'setup']['cleanup', 'setup']Passed
cleanup-before-rerun scenario 4['cleanup', 'setup']['cleanup', 'setup']Passed
cleanup-before-rerun scenario 5['setup']['setup']Passed
cleanup-before-rerun scenario 6['cleanup', 'setup']['cleanup', 'setup']Passed
completion-owner-check scenario 1TrueTruePassed
completion-owner-check scenario 2TrueTruePassed
completion-owner-check scenario 3FalseFalsePassed
completion-owner-check scenario 4FalseFalsePassed
completion-owner-check scenario 5TrueTruePassed
completion-owner-check scenario 6TrueTruePassed
dependency-snapshot-copy scenario 1[1, 2][1, 2]Passed
dependency-snapshot-copy scenario 2[][]Passed
dependency-snapshot-copy scenario 3[1][1]Passed
dependency-snapshot-copy scenario 4[0][0]Passed
dependency-snapshot-copy scenario 5[None][None]Passed
dependency-snapshot-copy scenario 6[1, 2][1, 2]Passed
generation-increment scenario 133Passed
generation-increment scenario 211Passed
generation-increment scenario 322Passed
generation-increment scenario 444Passed
generation-increment scenario 511Passed
generation-increment scenario 622Passed
setup-after-unmount scenario 1setupsetupPassed
setup-after-unmount scenario 2setupsetupPassed
setup-after-unmount scenario 3skipskipPassed
setup-after-unmount scenario 4setupsetupPassed
setup-after-unmount scenario 5setupsetupPassed
setup-after-unmount scenario 6setupsetupPassed
cleanup-registration-retained scenario 1TrueTruePassed
cleanup-registration-retained scenario 2FalseFalsePassed
cleanup-registration-retained scenario 3FalseFalsePassed
cleanup-registration-retained scenario 4TrueTruePassed
cleanup-registration-retained scenario 5FalseFalsePassed
cleanup-registration-retained scenario 6TrueTruePassed
owner-change-invalidates scenario 1FalseFalsePassed
owner-change-invalidates scenario 2FalseFalsePassed
owner-change-invalidates scenario 3FalseFalsePassed
owner-change-invalidates scenario 4TrueTruePassed
owner-change-invalidates scenario 5FalseFalsePassed
owner-change-invalidates scenario 6FalseFalsePassed

SHA-256 / e86fb948251b862a588aa5dbb98eaafcd12fc24c53af46a43854f3bc174b2e83

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

Case digest / df514d76c201e1641051ab41b2f6f2e12f43aba53820731d97595206364b8045