FAILURE MAP
← Case archive

FA-24316 / Client state / Open access

Client generated-file delivery state: Blob reader reference release · case 01

Blob reader reference release.

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

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 fixtureActualExpectedOutcome
received-byte-accounting scenario 133Passed
received-byte-accounting scenario 200Passed
received-byte-accounting scenario 322Passed
received-byte-accounting scenario 411Passed
received-byte-accounting scenario 522Passed
received-byte-accounting scenario 611Passed
file-assembly-part-order scenario 1abcabcPassed
file-assembly-part-order scenario 2Passed
file-assembly-part-order scenario 3cdcdPassed
file-assembly-part-order scenario 4xxPassed
file-assembly-part-order scenario 5ababPassed
file-assembly-part-order scenario 6zzPassed
save-requires-current-gesture scenario 1TrueTruePassed
save-requires-current-gesture scenario 2FalseFalsePassed
save-requires-current-gesture scenario 3FalseFalsePassed
save-requires-current-gesture scenario 4FalseFalsePassed
save-requires-current-gesture scenario 5FalseFalsePassed
save-requires-current-gesture scenario 6TrueTruePassed
size-mismatch-error scenario 1FalseFalsePassed
size-mismatch-error scenario 2FalseFalsePassed
size-mismatch-error scenario 3FalseFalsePassed
size-mismatch-error scenario 4FalseFalsePassed
size-mismatch-error scenario 5FalseFalsePassed
size-mismatch-error scenario 6FalseFalsePassed
blob-reader-reference-release scenario 1NoneNonePassed
blob-reader-reference-release scenario 2NoneNonePassed
blob-reader-reference-release scenario 3NoneNonePassed
blob-reader-reference-release scenario 4blob:bblob:bPassed
blob-reader-reference-release scenario 5NoneNonePassed
blob-reader-reference-release scenario 6NoneNonePassed
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 1savesavePassed
download-action-status scenario 2waitwaitPassed
download-action-status scenario 3waitwaitPassed
download-action-status scenario 4waitwaitPassed
download-action-status scenario 5retryretryPassed
download-action-status scenario 6savesavePassed
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 100Passed
remaining-download-bytes scenario 200Passed
remaining-download-bytes scenario 322Passed
remaining-download-bytes scenario 400Passed
remaining-download-bytes scenario 511Passed
remaining-download-bytes scenario 600Passed
complete-empty-download scenario 1TrueTruePassed
complete-empty-download scenario 2TrueTruePassed
complete-empty-download scenario 3FalseFalsePassed
complete-empty-download scenario 4TrueTruePassed
complete-empty-download scenario 5FalseFalsePassed
complete-empty-download scenario 6TrueTruePassed
save reader outlives preview detachment: received-byte-accounting11Passed
save reader outlives preview detachment: file-assembly-part-orderxxPassed
save reader outlives preview detachment: save-requires-current-gestureTrueTruePassed
save reader outlives preview detachment: size-mismatch-errorFalseFalsePassed
save reader outlives preview detachment: blob-reader-reference-releaseblob:zNoneFailed
save reader outlives preview detachment: reader-registry-preservation['save']['save']Passed
save reader outlives preview detachment: download-action-statussavesavePassed
save reader outlives preview detachment: missing-part-display[][]Passed
save reader outlives preview detachment: remaining-download-bytes00Passed
save reader outlives preview detachment: complete-empty-downloadTrueTruePassed

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 fixtureActualExpectedOutcome
received-byte-accounting scenario 133Passed
received-byte-accounting scenario 200Passed
received-byte-accounting scenario 322Passed
received-byte-accounting scenario 411Passed
received-byte-accounting scenario 522Passed
received-byte-accounting scenario 611Passed
file-assembly-part-order scenario 1abcabcPassed
file-assembly-part-order scenario 2Passed
file-assembly-part-order scenario 3cdcdPassed
file-assembly-part-order scenario 4xxPassed
file-assembly-part-order scenario 5ababPassed
file-assembly-part-order scenario 6zzPassed
save-requires-current-gesture scenario 1TrueTruePassed
save-requires-current-gesture scenario 2FalseFalsePassed
save-requires-current-gesture scenario 3FalseFalsePassed
save-requires-current-gesture scenario 4FalseFalsePassed
save-requires-current-gesture scenario 5FalseFalsePassed
save-requires-current-gesture scenario 6TrueTruePassed
size-mismatch-error scenario 1FalseFalsePassed
size-mismatch-error scenario 2FalseFalsePassed
size-mismatch-error scenario 3FalseFalsePassed
size-mismatch-error scenario 4FalseFalsePassed
size-mismatch-error scenario 5FalseFalsePassed
size-mismatch-error scenario 6FalseFalsePassed
blob-reader-reference-release scenario 1NoneNonePassed
blob-reader-reference-release scenario 2NoneNonePassed
blob-reader-reference-release scenario 3NoneNonePassed
blob-reader-reference-release scenario 4blob:bblob:bPassed
blob-reader-reference-release scenario 5NoneNonePassed
blob-reader-reference-release scenario 6blob:dNoneFailed
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 1savesavePassed
download-action-status scenario 2waitwaitPassed
download-action-status scenario 3waitwaitPassed
download-action-status scenario 4waitwaitPassed
download-action-status scenario 5retryretryPassed
download-action-status scenario 6savesavePassed
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 100Passed
remaining-download-bytes scenario 200Passed
remaining-download-bytes scenario 322Passed
remaining-download-bytes scenario 400Passed
remaining-download-bytes scenario 511Passed
remaining-download-bytes scenario 600Passed
complete-empty-download scenario 1TrueTruePassed
complete-empty-download scenario 2TrueTruePassed
complete-empty-download scenario 3FalseFalsePassed
complete-empty-download scenario 4TrueTruePassed
complete-empty-download scenario 5FalseFalsePassed
complete-empty-download scenario 6TrueTruePassed
save reader outlives preview detachment: received-byte-accounting11Passed
save reader outlives preview detachment: file-assembly-part-orderxxPassed
save reader outlives preview detachment: save-requires-current-gestureTrueTruePassed
save reader outlives preview detachment: size-mismatch-errorFalseFalsePassed
save reader outlives preview detachment: blob-reader-reference-releaseNoneNonePassed
save reader outlives preview detachment: reader-registry-preservation['save']['save']Passed
save reader outlives preview detachment: download-action-statussavesavePassed
save reader outlives preview detachment: missing-part-display[][]Passed
save reader outlives preview detachment: remaining-download-bytes00Passed
save reader outlives preview detachment: complete-empty-downloadTrueTruePassed

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