FA-24316 / Client state / Open access
Client generated-file delivery state: Blob reader reference release · case 01
Blob reader reference release.
ROOT CAUSE
The blob-reader-reference-release client decision evaluates `blob if detached else None` instead of `blob if detached and not readers else None`.
THE FAILURE
The blob-reader-reference-release client decision evaluates `blob if detached else None` instead of `blob if detached and not readers else None`.
Unsuccessful approach: The partial repair `blob if not readers else None` still violates the explicit fixture contract.
Case contract
The generated-file client tracks received chunk indexes, byte counts, blob readers and user gestures. Assembly uses chunk order, ready empty files remain valid, and save actions require a current gesture. Operation blob-reader-reference-release 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):
chunks, received, expected, status, gesture, blob, readers, detached = s
if operation == 'received-byte-accounting':
return sum(len(chunks[i]) for i in received)
if operation == 'file-assembly-part-order':
return ''.join(chunks[i] for i in sorted(received))
if operation == 'save-requires-current-gesture':
return status=='ready' and gesture
if operation == 'size-mismatch-error':
return status=='ready' and sum(len(chunks[i]) for i in received)!=expected
if operation == 'blob-reader-reference-release':
return blob if detached else None
if operation == 'reader-registry-preservation':
return list(readers)
if operation == 'download-action-status':
return 'save' if status=='ready' and gesture else ('retry' if status=='failed' else 'wait')
if operation == 'missing-part-display':
return [i for i in range(len(chunks)) if i not in received]
if operation == 'remaining-download-bytes':
return max(0,expected-sum(len(chunks[i]) for i in received))
if operation == 'complete-empty-download':
return status=='ready' and len(received)==len(chunks)
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('received-byte-accounting scenario 1', solve('received-byte-accounting', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), N+2)
check('received-byte-accounting scenario 2', solve('received-byte-accounting', ([],[],0,'ready',False,None,[],False)), 0)
check('received-byte-accounting scenario 3', solve('received-byte-accounting', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)
check('received-byte-accounting scenario 4', solve('received-byte-accounting', (['x'],[0],1,'ready',False,'blob:b',[],True)), 1)
check('received-byte-accounting scenario 5', solve('received-byte-accounting', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 2)
check('received-byte-accounting scenario 6', solve('received-byte-accounting', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 1)
check('file-assembly-part-order scenario 1', solve('file-assembly-part-order', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 'a'*N+'bc')
check('file-assembly-part-order scenario 2', solve('file-assembly-part-order', ([],[],0,'ready',False,None,[],False)), '')
check('file-assembly-part-order scenario 3', solve('file-assembly-part-order', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'cd')
check('file-assembly-part-order scenario 4', solve('file-assembly-part-order', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'x')
check('file-assembly-part-order scenario 5', solve('file-assembly-part-order', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'ab')
check('file-assembly-part-order scenario 6', solve('file-assembly-part-order', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'z')
check('save-requires-current-gesture scenario 1', solve('save-requires-current-gesture', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), True)
check('save-requires-current-gesture scenario 2', solve('save-requires-current-gesture', ([],[],0,'ready',False,None,[],False)), False)
check('save-requires-current-gesture scenario 3', solve('save-requires-current-gesture', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)
check('save-requires-current-gesture scenario 4', solve('save-requires-current-gesture', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)
check('save-requires-current-gesture scenario 5', solve('save-requires-current-gesture', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)
check('save-requires-current-gesture scenario 6', solve('save-requires-current-gesture', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)
check('size-mismatch-error scenario 1', solve('size-mismatch-error', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), False)
check('size-mismatch-error scenario 2', solve('size-mismatch-error', ([],[],0,'ready',False,None,[],False)), False)
check('size-mismatch-error scenario 3', solve('size-mismatch-error', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)
check('size-mismatch-error scenario 4', solve('size-mismatch-error', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)
check('size-mismatch-error scenario 5', solve('size-mismatch-error', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)
check('size-mismatch-error scenario 6', solve('size-mismatch-error', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), False)
check('blob-reader-reference-release scenario 1', solve('blob-reader-reference-release', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), None)
check('blob-reader-reference-release scenario 2', solve('blob-reader-reference-release', ([],[],0,'ready',False,None,[],False)), None)
check('blob-reader-reference-release scenario 3', solve('blob-reader-reference-release', (['ab','cd'],[1],4,'loading',True,None,[],False)), None)
check('blob-reader-reference-release scenario 4', solve('blob-reader-reference-release', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'blob:b')
check('blob-reader-reference-release scenario 5', solve('blob-reader-reference-release', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), None)
check('blob-reader-reference-release scenario 6', solve('blob-reader-reference-release', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), None)
check('reader-registry-preservation scenario 1', solve('reader-registry-preservation', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), ['preview'])
check('reader-registry-preservation scenario 2', solve('reader-registry-preservation', ([],[],0,'ready',False,None,[],False)), [])
check('reader-registry-preservation scenario 3', solve('reader-registry-preservation', (['ab','cd'],[1],4,'loading',True,None,[],False)), [])
check('reader-registry-preservation scenario 4', solve('reader-registry-preservation', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])
check('reader-registry-preservation scenario 5', solve('reader-registry-preservation', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), ['preview','save'])
check('reader-registry-preservation scenario 6', solve('reader-registry-preservation', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])
check('download-action-status scenario 1', solve('download-action-status', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 'save')
check('download-action-status scenario 2', solve('download-action-status', ([],[],0,'ready',False,None,[],False)), 'wait')
check('download-action-status scenario 3', solve('download-action-status', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'wait')
check('download-action-status scenario 4', solve('download-action-status', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'wait')
check('download-action-status scenario 5', solve('download-action-status', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'retry')
check('download-action-status scenario 6', solve('download-action-status', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'save')
check('missing-part-display scenario 1', solve('missing-part-display', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), [])
check('missing-part-display scenario 2', solve('missing-part-display', ([],[],0,'ready',False,None,[],False)), [])
check('missing-part-display scenario 3', solve('missing-part-display', (['ab','cd'],[1],4,'loading',True,None,[],False)), [0])
check('missing-part-display scenario 4', solve('missing-part-display', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])
check('missing-part-display scenario 5', solve('missing-part-display', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), [])
check('missing-part-display scenario 6', solve('missing-part-display', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])
check('remaining-download-bytes scenario 1', solve('remaining-download-bytes', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 0)
check('remaining-download-bytes scenario 2', solve('remaining-download-bytes', ([],[],0,'ready',False,None,[],False)), 0)
check('remaining-download-bytes scenario 3', solve('remaining-download-bytes', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)
check('remaining-download-bytes scenario 4', solve('remaining-download-bytes', (['x'],[0],1,'ready',False,'blob:b',[],True)), 0)
check('remaining-download-bytes scenario 5', solve('remaining-download-bytes', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 1)
check('remaining-download-bytes scenario 6', solve('remaining-download-bytes', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 0)
check('complete-empty-download scenario 1', solve('complete-empty-download', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), True)
check('complete-empty-download scenario 2', solve('complete-empty-download', ([],[],0,'ready',False,None,[],False)), True)
check('complete-empty-download scenario 3', solve('complete-empty-download', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)
check('complete-empty-download scenario 4', solve('complete-empty-download', (['x'],[0],1,'ready',False,'blob:b',[],True)), True)
check('complete-empty-download scenario 5', solve('complete-empty-download', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)
check('complete-empty-download scenario 6', solve('complete-empty-download', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)
check('save reader outlives preview detachment: received-byte-accounting', solve('received-byte-accounting', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 1)
check('save reader outlives preview detachment: file-assembly-part-order', solve('file-assembly-part-order', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'x')
check('save reader outlives preview detachment: save-requires-current-gesture', solve('save-requires-current-gesture', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), True)
check('save reader outlives preview detachment: size-mismatch-error', solve('size-mismatch-error', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), False)
check('save reader outlives preview detachment: blob-reader-reference-release', solve('blob-reader-reference-release', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), None)
check('save reader outlives preview detachment: reader-registry-preservation', solve('reader-registry-preservation', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), ['save'])
check('save reader outlives preview detachment: download-action-status', solve('download-action-status', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'save')
check('save reader outlives preview detachment: missing-part-display', solve('missing-part-display', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), [])
check('save reader outlives preview detachment: remaining-download-bytes', solve('remaining-download-bytes', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 0)
check('save reader outlives preview detachment: complete-empty-download', solve('complete-empty-download', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 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 |
|---|---|---|---|
| received-byte-accounting scenario 1 | 3 | 3 | Passed |
| received-byte-accounting scenario 2 | 0 | 0 | Passed |
| received-byte-accounting scenario 3 | 2 | 2 | Passed |
| received-byte-accounting scenario 4 | 1 | 1 | Passed |
| received-byte-accounting scenario 5 | 2 | 2 | Passed |
| received-byte-accounting scenario 6 | 1 | 1 | Passed |
| file-assembly-part-order scenario 1 | abc | abc | Passed |
| file-assembly-part-order scenario 2 | | | Passed |
| file-assembly-part-order scenario 3 | cd | cd | Passed |
| file-assembly-part-order scenario 4 | x | x | Passed |
| file-assembly-part-order scenario 5 | ab | ab | Passed |
| file-assembly-part-order scenario 6 | z | z | Passed |
| save-requires-current-gesture scenario 1 | True | True | Passed |
| save-requires-current-gesture scenario 2 | False | False | Passed |
| save-requires-current-gesture scenario 3 | False | False | Passed |
| save-requires-current-gesture scenario 4 | False | False | Passed |
| save-requires-current-gesture scenario 5 | False | False | Passed |
| save-requires-current-gesture scenario 6 | True | True | Passed |
| size-mismatch-error scenario 1 | False | False | Passed |
| size-mismatch-error scenario 2 | False | False | Passed |
| size-mismatch-error scenario 3 | False | False | Passed |
| size-mismatch-error scenario 4 | False | False | Passed |
| size-mismatch-error scenario 5 | False | False | Passed |
| size-mismatch-error scenario 6 | False | False | Passed |
| blob-reader-reference-release scenario 1 | None | None | Passed |
| blob-reader-reference-release scenario 2 | None | None | Passed |
| blob-reader-reference-release scenario 3 | None | None | Passed |
| blob-reader-reference-release scenario 4 | blob:b | blob:b | Passed |
| blob-reader-reference-release scenario 5 | None | None | Passed |
| blob-reader-reference-release scenario 6 | None | None | Passed |
| reader-registry-preservation scenario 1 | ['preview'] | ['preview'] | Passed |
| reader-registry-preservation scenario 2 | [] | [] | Passed |
| reader-registry-preservation scenario 3 | [] | [] | Passed |
| reader-registry-preservation scenario 4 | [] | [] | Passed |
| reader-registry-preservation scenario 5 | ['preview', 'save'] | ['preview', 'save'] | Passed |
| reader-registry-preservation scenario 6 | [] | [] | Passed |
| download-action-status scenario 1 | save | save | Passed |
| download-action-status scenario 2 | wait | wait | Passed |
| download-action-status scenario 3 | wait | wait | Passed |
| download-action-status scenario 4 | wait | wait | Passed |
| download-action-status scenario 5 | retry | retry | Passed |
| download-action-status scenario 6 | save | save | Passed |
| missing-part-display scenario 1 | [] | [] | Passed |
| missing-part-display scenario 2 | [] | [] | Passed |
| missing-part-display scenario 3 | [0] | [0] | Passed |
| missing-part-display scenario 4 | [] | [] | Passed |
| missing-part-display scenario 5 | [] | [] | Passed |
| missing-part-display scenario 6 | [] | [] | Passed |
| remaining-download-bytes scenario 1 | 0 | 0 | Passed |
| remaining-download-bytes scenario 2 | 0 | 0 | Passed |
| remaining-download-bytes scenario 3 | 2 | 2 | Passed |
| remaining-download-bytes scenario 4 | 0 | 0 | Passed |
| remaining-download-bytes scenario 5 | 1 | 1 | Passed |
| remaining-download-bytes scenario 6 | 0 | 0 | Passed |
| complete-empty-download scenario 1 | True | True | Passed |
| complete-empty-download scenario 2 | True | True | Passed |
| complete-empty-download scenario 3 | False | False | Passed |
| complete-empty-download scenario 4 | True | True | Passed |
| complete-empty-download scenario 5 | False | False | Passed |
| complete-empty-download scenario 6 | True | True | Passed |
| save reader outlives preview detachment: received-byte-accounting | 1 | 1 | Passed |
| save reader outlives preview detachment: file-assembly-part-order | x | x | Passed |
| save reader outlives preview detachment: save-requires-current-gesture | True | True | Passed |
| save reader outlives preview detachment: size-mismatch-error | False | False | Passed |
| save reader outlives preview detachment: blob-reader-reference-release | blob:z | None | Failed |
| save reader outlives preview detachment: reader-registry-preservation | ['save'] | ['save'] | Passed |
| save reader outlives preview detachment: download-action-status | save | save | Passed |
| save reader outlives preview detachment: missing-part-display | [] | [] | Passed |
| save reader outlives preview detachment: remaining-download-bytes | 0 | 0 | Passed |
| save reader outlives preview detachment: complete-empty-download | True | True | Passed |
SHA-256 / 668fbcc854515f5e15fe15f6e655114d5ea2f12f17d49e7b4fdd60087fd7b9ce
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(operation, s):
chunks, received, expected, status, gesture, blob, readers, detached = s
if operation == 'received-byte-accounting':
return sum(len(chunks[i]) for i in received)
if operation == 'file-assembly-part-order':
return ''.join(chunks[i] for i in sorted(received))
if operation == 'save-requires-current-gesture':
return status=='ready' and gesture
if operation == 'size-mismatch-error':
return status=='ready' and sum(len(chunks[i]) for i in received)!=expected
if operation == 'blob-reader-reference-release':
return blob if not readers else None
if operation == 'reader-registry-preservation':
return list(readers)
if operation == 'download-action-status':
return 'save' if status=='ready' and gesture else ('retry' if status=='failed' else 'wait')
if operation == 'missing-part-display':
return [i for i in range(len(chunks)) if i not in received]
if operation == 'remaining-download-bytes':
return max(0,expected-sum(len(chunks[i]) for i in received))
if operation == 'complete-empty-download':
return status=='ready' and len(received)==len(chunks)
raise ValueError('unknown modeled operation')
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('received-byte-accounting scenario 1', solve('received-byte-accounting', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), N+2)
check('received-byte-accounting scenario 2', solve('received-byte-accounting', ([],[],0,'ready',False,None,[],False)), 0)
check('received-byte-accounting scenario 3', solve('received-byte-accounting', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)
check('received-byte-accounting scenario 4', solve('received-byte-accounting', (['x'],[0],1,'ready',False,'blob:b',[],True)), 1)
check('received-byte-accounting scenario 5', solve('received-byte-accounting', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 2)
check('received-byte-accounting scenario 6', solve('received-byte-accounting', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 1)
check('file-assembly-part-order scenario 1', solve('file-assembly-part-order', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 'a'*N+'bc')
check('file-assembly-part-order scenario 2', solve('file-assembly-part-order', ([],[],0,'ready',False,None,[],False)), '')
check('file-assembly-part-order scenario 3', solve('file-assembly-part-order', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'cd')
check('file-assembly-part-order scenario 4', solve('file-assembly-part-order', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'x')
check('file-assembly-part-order scenario 5', solve('file-assembly-part-order', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'ab')
check('file-assembly-part-order scenario 6', solve('file-assembly-part-order', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'z')
check('save-requires-current-gesture scenario 1', solve('save-requires-current-gesture', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), True)
check('save-requires-current-gesture scenario 2', solve('save-requires-current-gesture', ([],[],0,'ready',False,None,[],False)), False)
check('save-requires-current-gesture scenario 3', solve('save-requires-current-gesture', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)
check('save-requires-current-gesture scenario 4', solve('save-requires-current-gesture', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)
check('save-requires-current-gesture scenario 5', solve('save-requires-current-gesture', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)
check('save-requires-current-gesture scenario 6', solve('save-requires-current-gesture', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)
check('size-mismatch-error scenario 1', solve('size-mismatch-error', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), False)
check('size-mismatch-error scenario 2', solve('size-mismatch-error', ([],[],0,'ready',False,None,[],False)), False)
check('size-mismatch-error scenario 3', solve('size-mismatch-error', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)
check('size-mismatch-error scenario 4', solve('size-mismatch-error', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)
check('size-mismatch-error scenario 5', solve('size-mismatch-error', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)
check('size-mismatch-error scenario 6', solve('size-mismatch-error', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), False)
check('blob-reader-reference-release scenario 1', solve('blob-reader-reference-release', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), None)
check('blob-reader-reference-release scenario 2', solve('blob-reader-reference-release', ([],[],0,'ready',False,None,[],False)), None)
check('blob-reader-reference-release scenario 3', solve('blob-reader-reference-release', (['ab','cd'],[1],4,'loading',True,None,[],False)), None)
check('blob-reader-reference-release scenario 4', solve('blob-reader-reference-release', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'blob:b')
check('blob-reader-reference-release scenario 5', solve('blob-reader-reference-release', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), None)
check('blob-reader-reference-release scenario 6', solve('blob-reader-reference-release', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), None)
check('reader-registry-preservation scenario 1', solve('reader-registry-preservation', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), ['preview'])
check('reader-registry-preservation scenario 2', solve('reader-registry-preservation', ([],[],0,'ready',False,None,[],False)), [])
check('reader-registry-preservation scenario 3', solve('reader-registry-preservation', (['ab','cd'],[1],4,'loading',True,None,[],False)), [])
check('reader-registry-preservation scenario 4', solve('reader-registry-preservation', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])
check('reader-registry-preservation scenario 5', solve('reader-registry-preservation', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), ['preview','save'])
check('reader-registry-preservation scenario 6', solve('reader-registry-preservation', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])
check('download-action-status scenario 1', solve('download-action-status', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 'save')
check('download-action-status scenario 2', solve('download-action-status', ([],[],0,'ready',False,None,[],False)), 'wait')
check('download-action-status scenario 3', solve('download-action-status', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'wait')
check('download-action-status scenario 4', solve('download-action-status', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'wait')
check('download-action-status scenario 5', solve('download-action-status', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'retry')
check('download-action-status scenario 6', solve('download-action-status', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'save')
check('missing-part-display scenario 1', solve('missing-part-display', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), [])
check('missing-part-display scenario 2', solve('missing-part-display', ([],[],0,'ready',False,None,[],False)), [])
check('missing-part-display scenario 3', solve('missing-part-display', (['ab','cd'],[1],4,'loading',True,None,[],False)), [0])
check('missing-part-display scenario 4', solve('missing-part-display', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])
check('missing-part-display scenario 5', solve('missing-part-display', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), [])
check('missing-part-display scenario 6', solve('missing-part-display', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])
check('remaining-download-bytes scenario 1', solve('remaining-download-bytes', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 0)
check('remaining-download-bytes scenario 2', solve('remaining-download-bytes', ([],[],0,'ready',False,None,[],False)), 0)
check('remaining-download-bytes scenario 3', solve('remaining-download-bytes', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)
check('remaining-download-bytes scenario 4', solve('remaining-download-bytes', (['x'],[0],1,'ready',False,'blob:b',[],True)), 0)
check('remaining-download-bytes scenario 5', solve('remaining-download-bytes', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 1)
check('remaining-download-bytes scenario 6', solve('remaining-download-bytes', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 0)
check('complete-empty-download scenario 1', solve('complete-empty-download', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), True)
check('complete-empty-download scenario 2', solve('complete-empty-download', ([],[],0,'ready',False,None,[],False)), True)
check('complete-empty-download scenario 3', solve('complete-empty-download', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)
check('complete-empty-download scenario 4', solve('complete-empty-download', (['x'],[0],1,'ready',False,'blob:b',[],True)), True)
check('complete-empty-download scenario 5', solve('complete-empty-download', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)
check('complete-empty-download scenario 6', solve('complete-empty-download', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)
check('save reader outlives preview detachment: received-byte-accounting', solve('received-byte-accounting', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 1)
check('save reader outlives preview detachment: file-assembly-part-order', solve('file-assembly-part-order', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'x')
check('save reader outlives preview detachment: save-requires-current-gesture', solve('save-requires-current-gesture', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), True)
check('save reader outlives preview detachment: size-mismatch-error', solve('size-mismatch-error', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), False)
check('save reader outlives preview detachment: blob-reader-reference-release', solve('blob-reader-reference-release', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), None)
check('save reader outlives preview detachment: reader-registry-preservation', solve('reader-registry-preservation', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), ['save'])
check('save reader outlives preview detachment: download-action-status', solve('download-action-status', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'save')
check('save reader outlives preview detachment: missing-part-display', solve('missing-part-display', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), [])
check('save reader outlives preview detachment: remaining-download-bytes', solve('remaining-download-bytes', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 0)
check('save reader outlives preview detachment: complete-empty-download', solve('complete-empty-download', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 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 |
|---|---|---|---|
| received-byte-accounting scenario 1 | 3 | 3 | Passed |
| received-byte-accounting scenario 2 | 0 | 0 | Passed |
| received-byte-accounting scenario 3 | 2 | 2 | Passed |
| received-byte-accounting scenario 4 | 1 | 1 | Passed |
| received-byte-accounting scenario 5 | 2 | 2 | Passed |
| received-byte-accounting scenario 6 | 1 | 1 | Passed |
| file-assembly-part-order scenario 1 | abc | abc | Passed |
| file-assembly-part-order scenario 2 | | | Passed |
| file-assembly-part-order scenario 3 | cd | cd | Passed |
| file-assembly-part-order scenario 4 | x | x | Passed |
| file-assembly-part-order scenario 5 | ab | ab | Passed |
| file-assembly-part-order scenario 6 | z | z | Passed |
| save-requires-current-gesture scenario 1 | True | True | Passed |
| save-requires-current-gesture scenario 2 | False | False | Passed |
| save-requires-current-gesture scenario 3 | False | False | Passed |
| save-requires-current-gesture scenario 4 | False | False | Passed |
| save-requires-current-gesture scenario 5 | False | False | Passed |
| save-requires-current-gesture scenario 6 | True | True | Passed |
| size-mismatch-error scenario 1 | False | False | Passed |
| size-mismatch-error scenario 2 | False | False | Passed |
| size-mismatch-error scenario 3 | False | False | Passed |
| size-mismatch-error scenario 4 | False | False | Passed |
| size-mismatch-error scenario 5 | False | False | Passed |
| size-mismatch-error scenario 6 | False | False | Passed |
| blob-reader-reference-release scenario 1 | None | None | Passed |
| blob-reader-reference-release scenario 2 | None | None | Passed |
| blob-reader-reference-release scenario 3 | None | None | Passed |
| blob-reader-reference-release scenario 4 | blob:b | blob:b | Passed |
| blob-reader-reference-release scenario 5 | None | None | Passed |
| blob-reader-reference-release scenario 6 | blob:d | None | Failed |
| reader-registry-preservation scenario 1 | ['preview'] | ['preview'] | Passed |
| reader-registry-preservation scenario 2 | [] | [] | Passed |
| reader-registry-preservation scenario 3 | [] | [] | Passed |
| reader-registry-preservation scenario 4 | [] | [] | Passed |
| reader-registry-preservation scenario 5 | ['preview', 'save'] | ['preview', 'save'] | Passed |
| reader-registry-preservation scenario 6 | [] | [] | Passed |
| download-action-status scenario 1 | save | save | Passed |
| download-action-status scenario 2 | wait | wait | Passed |
| download-action-status scenario 3 | wait | wait | Passed |
| download-action-status scenario 4 | wait | wait | Passed |
| download-action-status scenario 5 | retry | retry | Passed |
| download-action-status scenario 6 | save | save | Passed |
| missing-part-display scenario 1 | [] | [] | Passed |
| missing-part-display scenario 2 | [] | [] | Passed |
| missing-part-display scenario 3 | [0] | [0] | Passed |
| missing-part-display scenario 4 | [] | [] | Passed |
| missing-part-display scenario 5 | [] | [] | Passed |
| missing-part-display scenario 6 | [] | [] | Passed |
| remaining-download-bytes scenario 1 | 0 | 0 | Passed |
| remaining-download-bytes scenario 2 | 0 | 0 | Passed |
| remaining-download-bytes scenario 3 | 2 | 2 | Passed |
| remaining-download-bytes scenario 4 | 0 | 0 | Passed |
| remaining-download-bytes scenario 5 | 1 | 1 | Passed |
| remaining-download-bytes scenario 6 | 0 | 0 | Passed |
| complete-empty-download scenario 1 | True | True | Passed |
| complete-empty-download scenario 2 | True | True | Passed |
| complete-empty-download scenario 3 | False | False | Passed |
| complete-empty-download scenario 4 | True | True | Passed |
| complete-empty-download scenario 5 | False | False | Passed |
| complete-empty-download scenario 6 | True | True | Passed |
| save reader outlives preview detachment: received-byte-accounting | 1 | 1 | Passed |
| save reader outlives preview detachment: file-assembly-part-order | x | x | Passed |
| save reader outlives preview detachment: save-requires-current-gesture | True | True | Passed |
| save reader outlives preview detachment: size-mismatch-error | False | False | Passed |
| save reader outlives preview detachment: blob-reader-reference-release | None | None | Passed |
| save reader outlives preview detachment: reader-registry-preservation | ['save'] | ['save'] | Passed |
| save reader outlives preview detachment: download-action-status | save | save | Passed |
| save reader outlives preview detachment: missing-part-display | [] | [] | Passed |
| save reader outlives preview detachment: remaining-download-bytes | 0 | 0 | Passed |
| save reader outlives preview detachment: complete-empty-download | True | True | Passed |
SHA-256 / ca8979fa7f5ebd1edfc86e89b9dbdd72513d7bf24fcfde2391f08800f27be0f1
HELD IN THE MEMBER ARCHIVE
The verified repair and its recorded checks are member-only.
This mechanism has 70 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.
Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.
Member access is invitation-based. Sign in with your invited account to inspect the repair.
Sign in to the archive ↗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:56.304941+00:00.
Case digest / 04487d9b41f9163e6d5db267f5c5dbbb7f48dc153736351b43d4174082b4d2e5