FA-23991 / Client state / Open access
Deferred render transition state: Stale transition result · case 01
Stale transition result.
ROOT CAUSE
The stale-transition-result client decision evaluates `True` instead of `result_generation==active_generation`.
VERIFIED REPAIR
Apply the modeled stale-transition-result rule: `result_generation==active_generation`.
Unsuccessful approach: The partial repair `result_generation<=active_generation` still violates the explicit fixture contract.
Case contract
Urgent input echoes immediately while deferred content may lag. Only the active transition can commit or clear pending work. A suspended update retains any prior screen, including empty text; first render uses fallback. Operation stale-transition-result 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):
urgent, deferred, pending, active_generation, result_generation, suspended, previous, fallback = s
if operation == 'urgent-value-echo':
return urgent
if operation == 'deferred-content-during-pending':
return deferred if pending else urgent
if operation == 'stale-transition-result':
return True
if operation == 'suspension-preserves-prior-screen':
return previous if suspended and previous is not None else (fallback if suspended else urgent)
if operation == 'pending-indicator-not-equality':
return pending
if operation == 'commit-clears-only-current-pending':
return pending and result_generation!=active_generation
if operation == 'deferred-value-commit':
return urgent if result_generation==active_generation and not suspended else deferred
if operation == 'fallback-first-render':
return suspended and previous is None
if operation == 'transition-target-identity':
return (active_generation,urgent)
if operation == 'previous-empty-screen':
return previous is not None
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('urgent-value-echo scenario 1', solve('urgent-value-echo', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'q'+str(N))
check('urgent-value-echo scenario 2', solve('urgent-value-echo', ('','',False,1,1,False,'old','wait')), '')
check('urgent-value-echo scenario 3', solve('urgent-value-echo', ('new','old',True,2,2,True,'screen','spinner')), 'new')
check('urgent-value-echo scenario 4', solve('urgent-value-echo', ('new','old',True,2,2,False,None,'spinner')), 'new')
check('urgent-value-echo scenario 5', solve('urgent-value-echo', ('x','x',False,3,2,True,None,'spinner')), 'x')
check('urgent-value-echo scenario 6', solve('urgent-value-echo', ('','old',False,3,3,True,'','spinner')), '')
check('deferred-content-during-pending scenario 1', solve('deferred-content-during-pending', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'old')
check('deferred-content-during-pending scenario 2', solve('deferred-content-during-pending', ('','',False,1,1,False,'old','wait')), '')
check('deferred-content-during-pending scenario 3', solve('deferred-content-during-pending', ('new','old',True,2,2,True,'screen','spinner')), 'old')
check('deferred-content-during-pending scenario 4', solve('deferred-content-during-pending', ('new','old',True,2,2,False,None,'spinner')), 'old')
check('deferred-content-during-pending scenario 5', solve('deferred-content-during-pending', ('x','x',False,3,2,True,None,'spinner')), 'x')
check('deferred-content-during-pending scenario 6', solve('deferred-content-during-pending', ('','old',False,3,3,True,'','spinner')), '')
check('stale-transition-result scenario 1', solve('stale-transition-result', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), False)
check('stale-transition-result scenario 2', solve('stale-transition-result', ('','',False,1,1,False,'old','wait')), True)
check('stale-transition-result scenario 3', solve('stale-transition-result', ('new','old',True,2,2,True,'screen','spinner')), True)
check('stale-transition-result scenario 4', solve('stale-transition-result', ('new','old',True,2,2,False,None,'spinner')), True)
check('stale-transition-result scenario 5', solve('stale-transition-result', ('x','x',False,3,2,True,None,'spinner')), False)
check('stale-transition-result scenario 6', solve('stale-transition-result', ('','old',False,3,3,True,'','spinner')), True)
check('suspension-preserves-prior-screen scenario 1', solve('suspension-preserves-prior-screen', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'q'+str(N))
check('suspension-preserves-prior-screen scenario 2', solve('suspension-preserves-prior-screen', ('','',False,1,1,False,'old','wait')), '')
check('suspension-preserves-prior-screen scenario 3', solve('suspension-preserves-prior-screen', ('new','old',True,2,2,True,'screen','spinner')), 'screen')
check('suspension-preserves-prior-screen scenario 4', solve('suspension-preserves-prior-screen', ('new','old',True,2,2,False,None,'spinner')), 'new')
check('suspension-preserves-prior-screen scenario 5', solve('suspension-preserves-prior-screen', ('x','x',False,3,2,True,None,'spinner')), 'spinner')
check('suspension-preserves-prior-screen scenario 6', solve('suspension-preserves-prior-screen', ('','old',False,3,3,True,'','spinner')), '')
check('pending-indicator-not-equality scenario 1', solve('pending-indicator-not-equality', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), True)
check('pending-indicator-not-equality scenario 2', solve('pending-indicator-not-equality', ('','',False,1,1,False,'old','wait')), False)
check('pending-indicator-not-equality scenario 3', solve('pending-indicator-not-equality', ('new','old',True,2,2,True,'screen','spinner')), True)
check('pending-indicator-not-equality scenario 4', solve('pending-indicator-not-equality', ('new','old',True,2,2,False,None,'spinner')), True)
check('pending-indicator-not-equality scenario 5', solve('pending-indicator-not-equality', ('x','x',False,3,2,True,None,'spinner')), False)
check('pending-indicator-not-equality scenario 6', solve('pending-indicator-not-equality', ('','old',False,3,3,True,'','spinner')), False)
check('commit-clears-only-current-pending scenario 1', solve('commit-clears-only-current-pending', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), True)
check('commit-clears-only-current-pending scenario 2', solve('commit-clears-only-current-pending', ('','',False,1,1,False,'old','wait')), False)
check('commit-clears-only-current-pending scenario 3', solve('commit-clears-only-current-pending', ('new','old',True,2,2,True,'screen','spinner')), False)
check('commit-clears-only-current-pending scenario 4', solve('commit-clears-only-current-pending', ('new','old',True,2,2,False,None,'spinner')), False)
check('commit-clears-only-current-pending scenario 5', solve('commit-clears-only-current-pending', ('x','x',False,3,2,True,None,'spinner')), False)
check('commit-clears-only-current-pending scenario 6', solve('commit-clears-only-current-pending', ('','old',False,3,3,True,'','spinner')), False)
check('deferred-value-commit scenario 1', solve('deferred-value-commit', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'old')
check('deferred-value-commit scenario 2', solve('deferred-value-commit', ('','',False,1,1,False,'old','wait')), '')
check('deferred-value-commit scenario 3', solve('deferred-value-commit', ('new','old',True,2,2,True,'screen','spinner')), 'old')
check('deferred-value-commit scenario 4', solve('deferred-value-commit', ('new','old',True,2,2,False,None,'spinner')), 'new')
check('deferred-value-commit scenario 5', solve('deferred-value-commit', ('x','x',False,3,2,True,None,'spinner')), 'x')
check('deferred-value-commit scenario 6', solve('deferred-value-commit', ('','old',False,3,3,True,'','spinner')), 'old')
check('fallback-first-render scenario 1', solve('fallback-first-render', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), False)
check('fallback-first-render scenario 2', solve('fallback-first-render', ('','',False,1,1,False,'old','wait')), False)
check('fallback-first-render scenario 3', solve('fallback-first-render', ('new','old',True,2,2,True,'screen','spinner')), False)
check('fallback-first-render scenario 4', solve('fallback-first-render', ('new','old',True,2,2,False,None,'spinner')), False)
check('fallback-first-render scenario 5', solve('fallback-first-render', ('x','x',False,3,2,True,None,'spinner')), True)
check('fallback-first-render scenario 6', solve('fallback-first-render', ('','old',False,3,3,True,'','spinner')), False)
check('transition-target-identity scenario 1', solve('transition-target-identity', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), (2,'q'+str(N)))
check('transition-target-identity scenario 2', solve('transition-target-identity', ('','',False,1,1,False,'old','wait')), (1,''))
check('transition-target-identity scenario 3', solve('transition-target-identity', ('new','old',True,2,2,True,'screen','spinner')), (2,'new'))
check('transition-target-identity scenario 4', solve('transition-target-identity', ('new','old',True,2,2,False,None,'spinner')), (2,'new'))
check('transition-target-identity scenario 5', solve('transition-target-identity', ('x','x',False,3,2,True,None,'spinner')), (3,'x'))
check('transition-target-identity scenario 6', solve('transition-target-identity', ('','old',False,3,3,True,'','spinner')), (3,''))
check('previous-empty-screen scenario 1', solve('previous-empty-screen', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), True)
check('previous-empty-screen scenario 2', solve('previous-empty-screen', ('','',False,1,1,False,'old','wait')), True)
check('previous-empty-screen scenario 3', solve('previous-empty-screen', ('new','old',True,2,2,True,'screen','spinner')), True)
check('previous-empty-screen scenario 4', solve('previous-empty-screen', ('new','old',True,2,2,False,None,'spinner')), False)
check('previous-empty-screen scenario 5', solve('previous-empty-screen', ('x','x',False,3,2,True,None,'spinner')), False)
check('previous-empty-screen scenario 6', solve('previous-empty-screen', ('','old',False,3,3,True,'','spinner')), True)
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 |
|---|---|---|---|
| urgent-value-echo scenario 1 | q1 | q1 | Passed |
| urgent-value-echo scenario 2 | | | Passed |
| urgent-value-echo scenario 3 | new | new | Passed |
| urgent-value-echo scenario 4 | new | new | Passed |
| urgent-value-echo scenario 5 | x | x | Passed |
| urgent-value-echo scenario 6 | | | Passed |
| deferred-content-during-pending scenario 1 | old | old | Passed |
| deferred-content-during-pending scenario 2 | | | Passed |
| deferred-content-during-pending scenario 3 | old | old | Passed |
| deferred-content-during-pending scenario 4 | old | old | Passed |
| deferred-content-during-pending scenario 5 | x | x | Passed |
| deferred-content-during-pending scenario 6 | | | Passed |
| stale-transition-result scenario 1 | True | False | Failed |
| stale-transition-result scenario 2 | True | True | Passed |
| stale-transition-result scenario 3 | True | True | Passed |
| stale-transition-result scenario 4 | True | True | Passed |
| stale-transition-result scenario 5 | True | False | Failed |
| stale-transition-result scenario 6 | True | True | Passed |
| suspension-preserves-prior-screen scenario 1 | q1 | q1 | Passed |
| suspension-preserves-prior-screen scenario 2 | | | Passed |
| suspension-preserves-prior-screen scenario 3 | screen | screen | Passed |
| suspension-preserves-prior-screen scenario 4 | new | new | Passed |
| suspension-preserves-prior-screen scenario 5 | spinner | spinner | Passed |
| suspension-preserves-prior-screen scenario 6 | | | Passed |
| pending-indicator-not-equality scenario 1 | True | True | Passed |
| pending-indicator-not-equality scenario 2 | False | False | Passed |
| pending-indicator-not-equality scenario 3 | True | True | Passed |
| pending-indicator-not-equality scenario 4 | True | True | Passed |
| pending-indicator-not-equality scenario 5 | False | False | Passed |
| pending-indicator-not-equality scenario 6 | False | False | Passed |
| commit-clears-only-current-pending scenario 1 | True | True | Passed |
| commit-clears-only-current-pending scenario 2 | False | False | Passed |
| commit-clears-only-current-pending scenario 3 | False | False | Passed |
| commit-clears-only-current-pending scenario 4 | False | False | Passed |
| commit-clears-only-current-pending scenario 5 | False | False | Passed |
| commit-clears-only-current-pending scenario 6 | False | False | Passed |
| deferred-value-commit scenario 1 | old | old | Passed |
| deferred-value-commit scenario 2 | | | Passed |
| deferred-value-commit scenario 3 | old | old | Passed |
| deferred-value-commit scenario 4 | new | new | Passed |
| deferred-value-commit scenario 5 | x | x | Passed |
| deferred-value-commit scenario 6 | old | old | Passed |
| fallback-first-render scenario 1 | False | False | Passed |
| fallback-first-render scenario 2 | False | False | Passed |
| fallback-first-render scenario 3 | False | False | Passed |
| fallback-first-render scenario 4 | False | False | Passed |
| fallback-first-render scenario 5 | True | True | Passed |
| fallback-first-render scenario 6 | False | False | Passed |
| transition-target-identity scenario 1 | [2, 'q1'] | [2, 'q1'] | Passed |
| transition-target-identity scenario 2 | [1, ''] | [1, ''] | Passed |
| transition-target-identity scenario 3 | [2, 'new'] | [2, 'new'] | Passed |
| transition-target-identity scenario 4 | [2, 'new'] | [2, 'new'] | Passed |
| transition-target-identity scenario 5 | [3, 'x'] | [3, 'x'] | Passed |
| transition-target-identity scenario 6 | [3, ''] | [3, ''] | Passed |
| previous-empty-screen scenario 1 | True | True | Passed |
| previous-empty-screen scenario 2 | True | True | Passed |
| previous-empty-screen scenario 3 | True | True | Passed |
| previous-empty-screen scenario 4 | False | False | Passed |
| previous-empty-screen scenario 5 | False | False | Passed |
| previous-empty-screen scenario 6 | True | True | Passed |
SHA-256 / 655821a37c39507cc6427613c302b2ef1c4209fb012bb765acab749b82c100c7
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
urgent, deferred, pending, active_generation, result_generation, suspended, previous, fallback = s
if operation == 'urgent-value-echo':
return urgent
if operation == 'deferred-content-during-pending':
return deferred if pending else urgent
if operation == 'stale-transition-result':
return result_generation<=active_generation
if operation == 'suspension-preserves-prior-screen':
return previous if suspended and previous is not None else (fallback if suspended else urgent)
if operation == 'pending-indicator-not-equality':
return pending
if operation == 'commit-clears-only-current-pending':
return pending and result_generation!=active_generation
if operation == 'deferred-value-commit':
return urgent if result_generation==active_generation and not suspended else deferred
if operation == 'fallback-first-render':
return suspended and previous is None
if operation == 'transition-target-identity':
return (active_generation,urgent)
if operation == 'previous-empty-screen':
return previous is not None
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('urgent-value-echo scenario 1', solve('urgent-value-echo', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'q'+str(N))
check('urgent-value-echo scenario 2', solve('urgent-value-echo', ('','',False,1,1,False,'old','wait')), '')
check('urgent-value-echo scenario 3', solve('urgent-value-echo', ('new','old',True,2,2,True,'screen','spinner')), 'new')
check('urgent-value-echo scenario 4', solve('urgent-value-echo', ('new','old',True,2,2,False,None,'spinner')), 'new')
check('urgent-value-echo scenario 5', solve('urgent-value-echo', ('x','x',False,3,2,True,None,'spinner')), 'x')
check('urgent-value-echo scenario 6', solve('urgent-value-echo', ('','old',False,3,3,True,'','spinner')), '')
check('deferred-content-during-pending scenario 1', solve('deferred-content-during-pending', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'old')
check('deferred-content-during-pending scenario 2', solve('deferred-content-during-pending', ('','',False,1,1,False,'old','wait')), '')
check('deferred-content-during-pending scenario 3', solve('deferred-content-during-pending', ('new','old',True,2,2,True,'screen','spinner')), 'old')
check('deferred-content-during-pending scenario 4', solve('deferred-content-during-pending', ('new','old',True,2,2,False,None,'spinner')), 'old')
check('deferred-content-during-pending scenario 5', solve('deferred-content-during-pending', ('x','x',False,3,2,True,None,'spinner')), 'x')
check('deferred-content-during-pending scenario 6', solve('deferred-content-during-pending', ('','old',False,3,3,True,'','spinner')), '')
check('stale-transition-result scenario 1', solve('stale-transition-result', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), False)
check('stale-transition-result scenario 2', solve('stale-transition-result', ('','',False,1,1,False,'old','wait')), True)
check('stale-transition-result scenario 3', solve('stale-transition-result', ('new','old',True,2,2,True,'screen','spinner')), True)
check('stale-transition-result scenario 4', solve('stale-transition-result', ('new','old',True,2,2,False,None,'spinner')), True)
check('stale-transition-result scenario 5', solve('stale-transition-result', ('x','x',False,3,2,True,None,'spinner')), False)
check('stale-transition-result scenario 6', solve('stale-transition-result', ('','old',False,3,3,True,'','spinner')), True)
check('suspension-preserves-prior-screen scenario 1', solve('suspension-preserves-prior-screen', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'q'+str(N))
check('suspension-preserves-prior-screen scenario 2', solve('suspension-preserves-prior-screen', ('','',False,1,1,False,'old','wait')), '')
check('suspension-preserves-prior-screen scenario 3', solve('suspension-preserves-prior-screen', ('new','old',True,2,2,True,'screen','spinner')), 'screen')
check('suspension-preserves-prior-screen scenario 4', solve('suspension-preserves-prior-screen', ('new','old',True,2,2,False,None,'spinner')), 'new')
check('suspension-preserves-prior-screen scenario 5', solve('suspension-preserves-prior-screen', ('x','x',False,3,2,True,None,'spinner')), 'spinner')
check('suspension-preserves-prior-screen scenario 6', solve('suspension-preserves-prior-screen', ('','old',False,3,3,True,'','spinner')), '')
check('pending-indicator-not-equality scenario 1', solve('pending-indicator-not-equality', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), True)
check('pending-indicator-not-equality scenario 2', solve('pending-indicator-not-equality', ('','',False,1,1,False,'old','wait')), False)
check('pending-indicator-not-equality scenario 3', solve('pending-indicator-not-equality', ('new','old',True,2,2,True,'screen','spinner')), True)
check('pending-indicator-not-equality scenario 4', solve('pending-indicator-not-equality', ('new','old',True,2,2,False,None,'spinner')), True)
check('pending-indicator-not-equality scenario 5', solve('pending-indicator-not-equality', ('x','x',False,3,2,True,None,'spinner')), False)
check('pending-indicator-not-equality scenario 6', solve('pending-indicator-not-equality', ('','old',False,3,3,True,'','spinner')), False)
check('commit-clears-only-current-pending scenario 1', solve('commit-clears-only-current-pending', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), True)
check('commit-clears-only-current-pending scenario 2', solve('commit-clears-only-current-pending', ('','',False,1,1,False,'old','wait')), False)
check('commit-clears-only-current-pending scenario 3', solve('commit-clears-only-current-pending', ('new','old',True,2,2,True,'screen','spinner')), False)
check('commit-clears-only-current-pending scenario 4', solve('commit-clears-only-current-pending', ('new','old',True,2,2,False,None,'spinner')), False)
check('commit-clears-only-current-pending scenario 5', solve('commit-clears-only-current-pending', ('x','x',False,3,2,True,None,'spinner')), False)
check('commit-clears-only-current-pending scenario 6', solve('commit-clears-only-current-pending', ('','old',False,3,3,True,'','spinner')), False)
check('deferred-value-commit scenario 1', solve('deferred-value-commit', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'old')
check('deferred-value-commit scenario 2', solve('deferred-value-commit', ('','',False,1,1,False,'old','wait')), '')
check('deferred-value-commit scenario 3', solve('deferred-value-commit', ('new','old',True,2,2,True,'screen','spinner')), 'old')
check('deferred-value-commit scenario 4', solve('deferred-value-commit', ('new','old',True,2,2,False,None,'spinner')), 'new')
check('deferred-value-commit scenario 5', solve('deferred-value-commit', ('x','x',False,3,2,True,None,'spinner')), 'x')
check('deferred-value-commit scenario 6', solve('deferred-value-commit', ('','old',False,3,3,True,'','spinner')), 'old')
check('fallback-first-render scenario 1', solve('fallback-first-render', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), False)
check('fallback-first-render scenario 2', solve('fallback-first-render', ('','',False,1,1,False,'old','wait')), False)
check('fallback-first-render scenario 3', solve('fallback-first-render', ('new','old',True,2,2,True,'screen','spinner')), False)
check('fallback-first-render scenario 4', solve('fallback-first-render', ('new','old',True,2,2,False,None,'spinner')), False)
check('fallback-first-render scenario 5', solve('fallback-first-render', ('x','x',False,3,2,True,None,'spinner')), True)
check('fallback-first-render scenario 6', solve('fallback-first-render', ('','old',False,3,3,True,'','spinner')), False)
check('transition-target-identity scenario 1', solve('transition-target-identity', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), (2,'q'+str(N)))
check('transition-target-identity scenario 2', solve('transition-target-identity', ('','',False,1,1,False,'old','wait')), (1,''))
check('transition-target-identity scenario 3', solve('transition-target-identity', ('new','old',True,2,2,True,'screen','spinner')), (2,'new'))
check('transition-target-identity scenario 4', solve('transition-target-identity', ('new','old',True,2,2,False,None,'spinner')), (2,'new'))
check('transition-target-identity scenario 5', solve('transition-target-identity', ('x','x',False,3,2,True,None,'spinner')), (3,'x'))
check('transition-target-identity scenario 6', solve('transition-target-identity', ('','old',False,3,3,True,'','spinner')), (3,''))
check('previous-empty-screen scenario 1', solve('previous-empty-screen', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), True)
check('previous-empty-screen scenario 2', solve('previous-empty-screen', ('','',False,1,1,False,'old','wait')), True)
check('previous-empty-screen scenario 3', solve('previous-empty-screen', ('new','old',True,2,2,True,'screen','spinner')), True)
check('previous-empty-screen scenario 4', solve('previous-empty-screen', ('new','old',True,2,2,False,None,'spinner')), False)
check('previous-empty-screen scenario 5', solve('previous-empty-screen', ('x','x',False,3,2,True,None,'spinner')), False)
check('previous-empty-screen scenario 6', solve('previous-empty-screen', ('','old',False,3,3,True,'','spinner')), True)
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 |
|---|---|---|---|
| urgent-value-echo scenario 1 | q1 | q1 | Passed |
| urgent-value-echo scenario 2 | | | Passed |
| urgent-value-echo scenario 3 | new | new | Passed |
| urgent-value-echo scenario 4 | new | new | Passed |
| urgent-value-echo scenario 5 | x | x | Passed |
| urgent-value-echo scenario 6 | | | Passed |
| deferred-content-during-pending scenario 1 | old | old | Passed |
| deferred-content-during-pending scenario 2 | | | Passed |
| deferred-content-during-pending scenario 3 | old | old | Passed |
| deferred-content-during-pending scenario 4 | old | old | Passed |
| deferred-content-during-pending scenario 5 | x | x | Passed |
| deferred-content-during-pending scenario 6 | | | Passed |
| stale-transition-result scenario 1 | True | False | Failed |
| stale-transition-result scenario 2 | True | True | Passed |
| stale-transition-result scenario 3 | True | True | Passed |
| stale-transition-result scenario 4 | True | True | Passed |
| stale-transition-result scenario 5 | True | False | Failed |
| stale-transition-result scenario 6 | True | True | Passed |
| suspension-preserves-prior-screen scenario 1 | q1 | q1 | Passed |
| suspension-preserves-prior-screen scenario 2 | | | Passed |
| suspension-preserves-prior-screen scenario 3 | screen | screen | Passed |
| suspension-preserves-prior-screen scenario 4 | new | new | Passed |
| suspension-preserves-prior-screen scenario 5 | spinner | spinner | Passed |
| suspension-preserves-prior-screen scenario 6 | | | Passed |
| pending-indicator-not-equality scenario 1 | True | True | Passed |
| pending-indicator-not-equality scenario 2 | False | False | Passed |
| pending-indicator-not-equality scenario 3 | True | True | Passed |
| pending-indicator-not-equality scenario 4 | True | True | Passed |
| pending-indicator-not-equality scenario 5 | False | False | Passed |
| pending-indicator-not-equality scenario 6 | False | False | Passed |
| commit-clears-only-current-pending scenario 1 | True | True | Passed |
| commit-clears-only-current-pending scenario 2 | False | False | Passed |
| commit-clears-only-current-pending scenario 3 | False | False | Passed |
| commit-clears-only-current-pending scenario 4 | False | False | Passed |
| commit-clears-only-current-pending scenario 5 | False | False | Passed |
| commit-clears-only-current-pending scenario 6 | False | False | Passed |
| deferred-value-commit scenario 1 | old | old | Passed |
| deferred-value-commit scenario 2 | | | Passed |
| deferred-value-commit scenario 3 | old | old | Passed |
| deferred-value-commit scenario 4 | new | new | Passed |
| deferred-value-commit scenario 5 | x | x | Passed |
| deferred-value-commit scenario 6 | old | old | Passed |
| fallback-first-render scenario 1 | False | False | Passed |
| fallback-first-render scenario 2 | False | False | Passed |
| fallback-first-render scenario 3 | False | False | Passed |
| fallback-first-render scenario 4 | False | False | Passed |
| fallback-first-render scenario 5 | True | True | Passed |
| fallback-first-render scenario 6 | False | False | Passed |
| transition-target-identity scenario 1 | [2, 'q1'] | [2, 'q1'] | Passed |
| transition-target-identity scenario 2 | [1, ''] | [1, ''] | Passed |
| transition-target-identity scenario 3 | [2, 'new'] | [2, 'new'] | Passed |
| transition-target-identity scenario 4 | [2, 'new'] | [2, 'new'] | Passed |
| transition-target-identity scenario 5 | [3, 'x'] | [3, 'x'] | Passed |
| transition-target-identity scenario 6 | [3, ''] | [3, ''] | Passed |
| previous-empty-screen scenario 1 | True | True | Passed |
| previous-empty-screen scenario 2 | True | True | Passed |
| previous-empty-screen scenario 3 | True | True | Passed |
| previous-empty-screen scenario 4 | False | False | Passed |
| previous-empty-screen scenario 5 | False | False | Passed |
| previous-empty-screen scenario 6 | True | True | Passed |
SHA-256 / e2baf765cd2aaa851f90fbc2cd731ab1e702a1db8991a182aae3a626bf3ecac0
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
urgent, deferred, pending, active_generation, result_generation, suspended, previous, fallback = s
if operation == 'urgent-value-echo':
return urgent
if operation == 'deferred-content-during-pending':
return deferred if pending else urgent
if operation == 'stale-transition-result':
return result_generation==active_generation
if operation == 'suspension-preserves-prior-screen':
return previous if suspended and previous is not None else (fallback if suspended else urgent)
if operation == 'pending-indicator-not-equality':
return pending
if operation == 'commit-clears-only-current-pending':
return pending and result_generation!=active_generation
if operation == 'deferred-value-commit':
return urgent if result_generation==active_generation and not suspended else deferred
if operation == 'fallback-first-render':
return suspended and previous is None
if operation == 'transition-target-identity':
return (active_generation,urgent)
if operation == 'previous-empty-screen':
return previous is not None
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('urgent-value-echo scenario 1', solve('urgent-value-echo', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'q'+str(N))
check('urgent-value-echo scenario 2', solve('urgent-value-echo', ('','',False,1,1,False,'old','wait')), '')
check('urgent-value-echo scenario 3', solve('urgent-value-echo', ('new','old',True,2,2,True,'screen','spinner')), 'new')
check('urgent-value-echo scenario 4', solve('urgent-value-echo', ('new','old',True,2,2,False,None,'spinner')), 'new')
check('urgent-value-echo scenario 5', solve('urgent-value-echo', ('x','x',False,3,2,True,None,'spinner')), 'x')
check('urgent-value-echo scenario 6', solve('urgent-value-echo', ('','old',False,3,3,True,'','spinner')), '')
check('deferred-content-during-pending scenario 1', solve('deferred-content-during-pending', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'old')
check('deferred-content-during-pending scenario 2', solve('deferred-content-during-pending', ('','',False,1,1,False,'old','wait')), '')
check('deferred-content-during-pending scenario 3', solve('deferred-content-during-pending', ('new','old',True,2,2,True,'screen','spinner')), 'old')
check('deferred-content-during-pending scenario 4', solve('deferred-content-during-pending', ('new','old',True,2,2,False,None,'spinner')), 'old')
check('deferred-content-during-pending scenario 5', solve('deferred-content-during-pending', ('x','x',False,3,2,True,None,'spinner')), 'x')
check('deferred-content-during-pending scenario 6', solve('deferred-content-during-pending', ('','old',False,3,3,True,'','spinner')), '')
check('stale-transition-result scenario 1', solve('stale-transition-result', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), False)
check('stale-transition-result scenario 2', solve('stale-transition-result', ('','',False,1,1,False,'old','wait')), True)
check('stale-transition-result scenario 3', solve('stale-transition-result', ('new','old',True,2,2,True,'screen','spinner')), True)
check('stale-transition-result scenario 4', solve('stale-transition-result', ('new','old',True,2,2,False,None,'spinner')), True)
check('stale-transition-result scenario 5', solve('stale-transition-result', ('x','x',False,3,2,True,None,'spinner')), False)
check('stale-transition-result scenario 6', solve('stale-transition-result', ('','old',False,3,3,True,'','spinner')), True)
check('suspension-preserves-prior-screen scenario 1', solve('suspension-preserves-prior-screen', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'q'+str(N))
check('suspension-preserves-prior-screen scenario 2', solve('suspension-preserves-prior-screen', ('','',False,1,1,False,'old','wait')), '')
check('suspension-preserves-prior-screen scenario 3', solve('suspension-preserves-prior-screen', ('new','old',True,2,2,True,'screen','spinner')), 'screen')
check('suspension-preserves-prior-screen scenario 4', solve('suspension-preserves-prior-screen', ('new','old',True,2,2,False,None,'spinner')), 'new')
check('suspension-preserves-prior-screen scenario 5', solve('suspension-preserves-prior-screen', ('x','x',False,3,2,True,None,'spinner')), 'spinner')
check('suspension-preserves-prior-screen scenario 6', solve('suspension-preserves-prior-screen', ('','old',False,3,3,True,'','spinner')), '')
check('pending-indicator-not-equality scenario 1', solve('pending-indicator-not-equality', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), True)
check('pending-indicator-not-equality scenario 2', solve('pending-indicator-not-equality', ('','',False,1,1,False,'old','wait')), False)
check('pending-indicator-not-equality scenario 3', solve('pending-indicator-not-equality', ('new','old',True,2,2,True,'screen','spinner')), True)
check('pending-indicator-not-equality scenario 4', solve('pending-indicator-not-equality', ('new','old',True,2,2,False,None,'spinner')), True)
check('pending-indicator-not-equality scenario 5', solve('pending-indicator-not-equality', ('x','x',False,3,2,True,None,'spinner')), False)
check('pending-indicator-not-equality scenario 6', solve('pending-indicator-not-equality', ('','old',False,3,3,True,'','spinner')), False)
check('commit-clears-only-current-pending scenario 1', solve('commit-clears-only-current-pending', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), True)
check('commit-clears-only-current-pending scenario 2', solve('commit-clears-only-current-pending', ('','',False,1,1,False,'old','wait')), False)
check('commit-clears-only-current-pending scenario 3', solve('commit-clears-only-current-pending', ('new','old',True,2,2,True,'screen','spinner')), False)
check('commit-clears-only-current-pending scenario 4', solve('commit-clears-only-current-pending', ('new','old',True,2,2,False,None,'spinner')), False)
check('commit-clears-only-current-pending scenario 5', solve('commit-clears-only-current-pending', ('x','x',False,3,2,True,None,'spinner')), False)
check('commit-clears-only-current-pending scenario 6', solve('commit-clears-only-current-pending', ('','old',False,3,3,True,'','spinner')), False)
check('deferred-value-commit scenario 1', solve('deferred-value-commit', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), 'old')
check('deferred-value-commit scenario 2', solve('deferred-value-commit', ('','',False,1,1,False,'old','wait')), '')
check('deferred-value-commit scenario 3', solve('deferred-value-commit', ('new','old',True,2,2,True,'screen','spinner')), 'old')
check('deferred-value-commit scenario 4', solve('deferred-value-commit', ('new','old',True,2,2,False,None,'spinner')), 'new')
check('deferred-value-commit scenario 5', solve('deferred-value-commit', ('x','x',False,3,2,True,None,'spinner')), 'x')
check('deferred-value-commit scenario 6', solve('deferred-value-commit', ('','old',False,3,3,True,'','spinner')), 'old')
check('fallback-first-render scenario 1', solve('fallback-first-render', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), False)
check('fallback-first-render scenario 2', solve('fallback-first-render', ('','',False,1,1,False,'old','wait')), False)
check('fallback-first-render scenario 3', solve('fallback-first-render', ('new','old',True,2,2,True,'screen','spinner')), False)
check('fallback-first-render scenario 4', solve('fallback-first-render', ('new','old',True,2,2,False,None,'spinner')), False)
check('fallback-first-render scenario 5', solve('fallback-first-render', ('x','x',False,3,2,True,None,'spinner')), True)
check('fallback-first-render scenario 6', solve('fallback-first-render', ('','old',False,3,3,True,'','spinner')), False)
check('transition-target-identity scenario 1', solve('transition-target-identity', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), (2,'q'+str(N)))
check('transition-target-identity scenario 2', solve('transition-target-identity', ('','',False,1,1,False,'old','wait')), (1,''))
check('transition-target-identity scenario 3', solve('transition-target-identity', ('new','old',True,2,2,True,'screen','spinner')), (2,'new'))
check('transition-target-identity scenario 4', solve('transition-target-identity', ('new','old',True,2,2,False,None,'spinner')), (2,'new'))
check('transition-target-identity scenario 5', solve('transition-target-identity', ('x','x',False,3,2,True,None,'spinner')), (3,'x'))
check('transition-target-identity scenario 6', solve('transition-target-identity', ('','old',False,3,3,True,'','spinner')), (3,''))
check('previous-empty-screen scenario 1', solve('previous-empty-screen', ('q'+str(N),'old',True,2,1,False,'screen','spinner')), True)
check('previous-empty-screen scenario 2', solve('previous-empty-screen', ('','',False,1,1,False,'old','wait')), True)
check('previous-empty-screen scenario 3', solve('previous-empty-screen', ('new','old',True,2,2,True,'screen','spinner')), True)
check('previous-empty-screen scenario 4', solve('previous-empty-screen', ('new','old',True,2,2,False,None,'spinner')), False)
check('previous-empty-screen scenario 5', solve('previous-empty-screen', ('x','x',False,3,2,True,None,'spinner')), False)
check('previous-empty-screen scenario 6', solve('previous-empty-screen', ('','old',False,3,3,True,'','spinner')), True)
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 |
|---|---|---|---|
| urgent-value-echo scenario 1 | q1 | q1 | Passed |
| urgent-value-echo scenario 2 | | | Passed |
| urgent-value-echo scenario 3 | new | new | Passed |
| urgent-value-echo scenario 4 | new | new | Passed |
| urgent-value-echo scenario 5 | x | x | Passed |
| urgent-value-echo scenario 6 | | | Passed |
| deferred-content-during-pending scenario 1 | old | old | Passed |
| deferred-content-during-pending scenario 2 | | | Passed |
| deferred-content-during-pending scenario 3 | old | old | Passed |
| deferred-content-during-pending scenario 4 | old | old | Passed |
| deferred-content-during-pending scenario 5 | x | x | Passed |
| deferred-content-during-pending scenario 6 | | | Passed |
| stale-transition-result scenario 1 | False | False | Passed |
| stale-transition-result scenario 2 | True | True | Passed |
| stale-transition-result scenario 3 | True | True | Passed |
| stale-transition-result scenario 4 | True | True | Passed |
| stale-transition-result scenario 5 | False | False | Passed |
| stale-transition-result scenario 6 | True | True | Passed |
| suspension-preserves-prior-screen scenario 1 | q1 | q1 | Passed |
| suspension-preserves-prior-screen scenario 2 | | | Passed |
| suspension-preserves-prior-screen scenario 3 | screen | screen | Passed |
| suspension-preserves-prior-screen scenario 4 | new | new | Passed |
| suspension-preserves-prior-screen scenario 5 | spinner | spinner | Passed |
| suspension-preserves-prior-screen scenario 6 | | | Passed |
| pending-indicator-not-equality scenario 1 | True | True | Passed |
| pending-indicator-not-equality scenario 2 | False | False | Passed |
| pending-indicator-not-equality scenario 3 | True | True | Passed |
| pending-indicator-not-equality scenario 4 | True | True | Passed |
| pending-indicator-not-equality scenario 5 | False | False | Passed |
| pending-indicator-not-equality scenario 6 | False | False | Passed |
| commit-clears-only-current-pending scenario 1 | True | True | Passed |
| commit-clears-only-current-pending scenario 2 | False | False | Passed |
| commit-clears-only-current-pending scenario 3 | False | False | Passed |
| commit-clears-only-current-pending scenario 4 | False | False | Passed |
| commit-clears-only-current-pending scenario 5 | False | False | Passed |
| commit-clears-only-current-pending scenario 6 | False | False | Passed |
| deferred-value-commit scenario 1 | old | old | Passed |
| deferred-value-commit scenario 2 | | | Passed |
| deferred-value-commit scenario 3 | old | old | Passed |
| deferred-value-commit scenario 4 | new | new | Passed |
| deferred-value-commit scenario 5 | x | x | Passed |
| deferred-value-commit scenario 6 | old | old | Passed |
| fallback-first-render scenario 1 | False | False | Passed |
| fallback-first-render scenario 2 | False | False | Passed |
| fallback-first-render scenario 3 | False | False | Passed |
| fallback-first-render scenario 4 | False | False | Passed |
| fallback-first-render scenario 5 | True | True | Passed |
| fallback-first-render scenario 6 | False | False | Passed |
| transition-target-identity scenario 1 | [2, 'q1'] | [2, 'q1'] | Passed |
| transition-target-identity scenario 2 | [1, ''] | [1, ''] | Passed |
| transition-target-identity scenario 3 | [2, 'new'] | [2, 'new'] | Passed |
| transition-target-identity scenario 4 | [2, 'new'] | [2, 'new'] | Passed |
| transition-target-identity scenario 5 | [3, 'x'] | [3, 'x'] | Passed |
| transition-target-identity scenario 6 | [3, ''] | [3, ''] | Passed |
| previous-empty-screen scenario 1 | True | True | Passed |
| previous-empty-screen scenario 2 | True | True | Passed |
| previous-empty-screen scenario 3 | True | True | Passed |
| previous-empty-screen scenario 4 | False | False | Passed |
| previous-empty-screen scenario 5 | False | False | Passed |
| previous-empty-screen scenario 6 | True | True | Passed |
SHA-256 / 437c41959e774c2ae83d2c1f571c8bb2c244e1c238f780871a0c8c8174e4262c
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:53.105618+00:00.
Case digest / 70fdd9e1940b254cad1428abbcae686126eaba6aa8b24462b2002384b0f15081