FAILURE MAP
← Case archive

FA-24321 / Client state / Open access

Client generated-file delivery state: Download action status · case 01

Download action status.

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

ROOT CAUSE

The download-action-status client decision evaluates `'save' if status=='ready' else 'wait'` instead of `'save' if status=='ready' and gesture else ('retry' if status=='failed' else 'wait')`.

THE FAILURE

The download-action-status client decision evaluates `'save' if status=='ready' else 'wait'` instead of `'save' if status=='ready' and gesture else ('retry' if status=='failed' else 'wait')`.

Unsuccessful approach: The partial repair `'retry' if status=='failed' else 'save'` 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 download-action-status 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 and not readers else None
    if operation == 'reader-registry-preservation':
        return list(readers)
    if operation == 'download-action-status':
        return 'save' if status=='ready' 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 2savewaitFailed
download-action-status scenario 3waitwaitPassed
download-action-status scenario 4savewaitFailed
download-action-status scenario 5waitretryFailed
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 / f6b8167abc5469a5c8f6d06200c0ed8a884dabb02c53c85920085b6fd2d7716b

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 detached and not readers else None
    if operation == 'reader-registry-preservation':
        return list(readers)
    if operation == 'download-action-status':
        return 'retry' if status=='failed' else 'save'
    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 2savewaitFailed
download-action-status scenario 3savewaitFailed
download-action-status scenario 4savewaitFailed
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 / 43c91aca62853dc46e007148a09a4e61bd116892bfbe6b06e59fc4ef8d0d7b88

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 / 62cd2d8e6e7974bcadea4bb8edf196084c111cf782931f91dda2a4004a3bd921