FAILURE MAP
← Case archive

FA-24271 / Client state / Open access

Local upload task presentation: Inflight abort handles · case 01

Inflight abort handles.

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

ROOT CAUSE

The inflight-abort-handles client decision evaluates `sent if cancelled else []` instead of `[i for i in sent if i not in accepted] if cancelled else []`.

THE FAILURE

The inflight-abort-handles client decision evaluates `sent if cancelled else []` instead of `[i for i in sent if i not in accepted] if cancelled else []`.

Unsuccessful approach: The partial repair `[i for i in sent if i not in accepted]` still violates the explicit fixture contract.

Case contract

This local upload view tracks parts and blob preview ownership, not a wire protocol. Accepted parts alone advance durable progress; cancellation aborts unaccepted sends; zero-byte parts still require acknowledgment; detached previews are released. Operation inflight-abort-handles 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):
    sizes, accepted, sent, cancelled, status, preview, attached = s
    if operation == 'accepted-progress-not-sent':
        return sum(sizes[i] for i in accepted)
    if operation == 'remaining-local-parts':
        return [i for i in range(len(sizes)) if i not in accepted]
    if operation == 'cancel-overrides-upload-status':
        return 'cancelled' if cancelled else status
    if operation == 'preview-revoke-on-detach':
        return preview if not attached and preview is not None else None
    if operation == 'zero-size-part-completion':
        return len(accepted)==len(sizes)
    if operation == 'inflight-abort-handles':
        return sent if cancelled else []
    if operation == 'retry-eligible-parts':
        return [i for i in range(len(sizes)) if i not in accepted] if status=='failed' and not cancelled else []
    if operation == 'sent-vs-accepted-indicator':
        return len(sent)-len(accepted)
    if operation == 'terminal-task-retention':
        return attached or status not in ('done','failed') and not cancelled
    if operation == 'preview-while-incomplete':
        return preview if attached else None
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('accepted-progress-not-sent scenario 1', solve('accepted-progress-not-sent', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), N)
check('accepted-progress-not-sent scenario 2', solve('accepted-progress-not-sent', ([],[],[],False,'done',None,False)), 0)
check('accepted-progress-not-sent scenario 3', solve('accepted-progress-not-sent', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), 2)
check('accepted-progress-not-sent scenario 4', solve('accepted-progress-not-sent', ([2,3],[],[0],True,'uploading','blob:c',False)), 0)
check('accepted-progress-not-sent scenario 5', solve('accepted-progress-not-sent', ([2,3],[1],[0,1],False,'failed','blob:d',True)), 3)
check('accepted-progress-not-sent scenario 6', solve('accepted-progress-not-sent', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), 5)
check('remaining-local-parts scenario 1', solve('remaining-local-parts', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), [1,2])
check('remaining-local-parts scenario 2', solve('remaining-local-parts', ([],[],[],False,'done',None,False)), [])
check('remaining-local-parts scenario 3', solve('remaining-local-parts', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), [])
check('remaining-local-parts scenario 4', solve('remaining-local-parts', ([2,3],[],[0],True,'uploading','blob:c',False)), [0,1])
check('remaining-local-parts scenario 5', solve('remaining-local-parts', ([2,3],[1],[0,1],False,'failed','blob:d',True)), [0])
check('remaining-local-parts scenario 6', solve('remaining-local-parts', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), [])
check('cancel-overrides-upload-status scenario 1', solve('cancel-overrides-upload-status', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), 'uploading')
check('cancel-overrides-upload-status scenario 2', solve('cancel-overrides-upload-status', ([],[],[],False,'done',None,False)), 'done')
check('cancel-overrides-upload-status scenario 3', solve('cancel-overrides-upload-status', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), 'done')
check('cancel-overrides-upload-status scenario 4', solve('cancel-overrides-upload-status', ([2,3],[],[0],True,'uploading','blob:c',False)), 'cancelled')
check('cancel-overrides-upload-status scenario 5', solve('cancel-overrides-upload-status', ([2,3],[1],[0,1],False,'failed','blob:d',True)), 'failed')
check('cancel-overrides-upload-status scenario 6', solve('cancel-overrides-upload-status', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), 'done')
check('preview-revoke-on-detach scenario 1', solve('preview-revoke-on-detach', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), None)
check('preview-revoke-on-detach scenario 2', solve('preview-revoke-on-detach', ([],[],[],False,'done',None,False)), None)
check('preview-revoke-on-detach scenario 3', solve('preview-revoke-on-detach', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), None)
check('preview-revoke-on-detach scenario 4', solve('preview-revoke-on-detach', ([2,3],[],[0],True,'uploading','blob:c',False)), 'blob:c')
check('preview-revoke-on-detach scenario 5', solve('preview-revoke-on-detach', ([2,3],[1],[0,1],False,'failed','blob:d',True)), None)
check('preview-revoke-on-detach scenario 6', solve('preview-revoke-on-detach', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), 'blob:e')
check('zero-size-part-completion scenario 1', solve('zero-size-part-completion', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), False)
check('zero-size-part-completion scenario 2', solve('zero-size-part-completion', ([],[],[],False,'done',None,False)), True)
check('zero-size-part-completion scenario 3', solve('zero-size-part-completion', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), True)
check('zero-size-part-completion scenario 4', solve('zero-size-part-completion', ([2,3],[],[0],True,'uploading','blob:c',False)), False)
check('zero-size-part-completion scenario 5', solve('zero-size-part-completion', ([2,3],[1],[0,1],False,'failed','blob:d',True)), False)
check('zero-size-part-completion scenario 6', solve('zero-size-part-completion', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), True)
check('inflight-abort-handles scenario 1', solve('inflight-abort-handles', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), [])
check('inflight-abort-handles scenario 2', solve('inflight-abort-handles', ([],[],[],False,'done',None,False)), [])
check('inflight-abort-handles scenario 3', solve('inflight-abort-handles', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), [])
check('inflight-abort-handles scenario 4', solve('inflight-abort-handles', ([2,3],[],[0],True,'uploading','blob:c',False)), [0])
check('inflight-abort-handles scenario 5', solve('inflight-abort-handles', ([2,3],[1],[0,1],False,'failed','blob:d',True)), [])
check('inflight-abort-handles scenario 6', solve('inflight-abort-handles', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), [])
check('retry-eligible-parts scenario 1', solve('retry-eligible-parts', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), [])
check('retry-eligible-parts scenario 2', solve('retry-eligible-parts', ([],[],[],False,'done',None,False)), [])
check('retry-eligible-parts scenario 3', solve('retry-eligible-parts', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), [])
check('retry-eligible-parts scenario 4', solve('retry-eligible-parts', ([2,3],[],[0],True,'uploading','blob:c',False)), [])
check('retry-eligible-parts scenario 5', solve('retry-eligible-parts', ([2,3],[1],[0,1],False,'failed','blob:d',True)), [0])
check('retry-eligible-parts scenario 6', solve('retry-eligible-parts', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), [])
check('sent-vs-accepted-indicator scenario 1', solve('sent-vs-accepted-indicator', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), 1)
check('sent-vs-accepted-indicator scenario 2', solve('sent-vs-accepted-indicator', ([],[],[],False,'done',None,False)), 0)
check('sent-vs-accepted-indicator scenario 3', solve('sent-vs-accepted-indicator', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), 0)
check('sent-vs-accepted-indicator scenario 4', solve('sent-vs-accepted-indicator', ([2,3],[],[0],True,'uploading','blob:c',False)), 1)
check('sent-vs-accepted-indicator scenario 5', solve('sent-vs-accepted-indicator', ([2,3],[1],[0,1],False,'failed','blob:d',True)), 1)
check('sent-vs-accepted-indicator scenario 6', solve('sent-vs-accepted-indicator', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), 0)
check('terminal-task-retention scenario 1', solve('terminal-task-retention', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), True)
check('terminal-task-retention scenario 2', solve('terminal-task-retention', ([],[],[],False,'done',None,False)), False)
check('terminal-task-retention scenario 3', solve('terminal-task-retention', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), True)
check('terminal-task-retention scenario 4', solve('terminal-task-retention', ([2,3],[],[0],True,'uploading','blob:c',False)), False)
check('terminal-task-retention scenario 5', solve('terminal-task-retention', ([2,3],[1],[0,1],False,'failed','blob:d',True)), True)
check('terminal-task-retention scenario 6', solve('terminal-task-retention', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), False)
check('preview-while-incomplete scenario 1', solve('preview-while-incomplete', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), 'blob:a')
check('preview-while-incomplete scenario 2', solve('preview-while-incomplete', ([],[],[],False,'done',None,False)), None)
check('preview-while-incomplete scenario 3', solve('preview-while-incomplete', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), 'blob:b')
check('preview-while-incomplete scenario 4', solve('preview-while-incomplete', ([2,3],[],[0],True,'uploading','blob:c',False)), None)
check('preview-while-incomplete scenario 5', solve('preview-while-incomplete', ([2,3],[1],[0,1],False,'failed','blob:d',True)), 'blob:d')
check('preview-while-incomplete scenario 6', solve('preview-while-incomplete', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), None)
check('cancel after one accepted and two inflight parts: accepted-progress-not-sent', solve('accepted-progress-not-sent', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), 2)
check('cancel after one accepted and two inflight parts: remaining-local-parts', solve('remaining-local-parts', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), [1,2])
check('cancel after one accepted and two inflight parts: cancel-overrides-upload-status', solve('cancel-overrides-upload-status', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), 'cancelled')
check('cancel after one accepted and two inflight parts: preview-revoke-on-detach', solve('preview-revoke-on-detach', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), 'blob:z')
check('cancel after one accepted and two inflight parts: zero-size-part-completion', solve('zero-size-part-completion', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), False)
check('cancel after one accepted and two inflight parts: inflight-abort-handles', solve('inflight-abort-handles', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), [1,2])
check('cancel after one accepted and two inflight parts: retry-eligible-parts', solve('retry-eligible-parts', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), [])
check('cancel after one accepted and two inflight parts: sent-vs-accepted-indicator', solve('sent-vs-accepted-indicator', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), 2)
check('cancel after one accepted and two inflight parts: terminal-task-retention', solve('terminal-task-retention', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), False)
check('cancel after one accepted and two inflight parts: preview-while-incomplete', solve('preview-while-incomplete', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), None)
check('background upload survives detached preview: accepted-progress-not-sent', solve('accepted-progress-not-sent', ([N],[],[],False,'uploading',None,False)), 0)
check('background upload survives detached preview: remaining-local-parts', solve('remaining-local-parts', ([N],[],[],False,'uploading',None,False)), [0])
check('background upload survives detached preview: cancel-overrides-upload-status', solve('cancel-overrides-upload-status', ([N],[],[],False,'uploading',None,False)), 'uploading')
check('background upload survives detached preview: preview-revoke-on-detach', solve('preview-revoke-on-detach', ([N],[],[],False,'uploading',None,False)), None)
check('background upload survives detached preview: zero-size-part-completion', solve('zero-size-part-completion', ([N],[],[],False,'uploading',None,False)), False)
check('background upload survives detached preview: inflight-abort-handles', solve('inflight-abort-handles', ([N],[],[],False,'uploading',None,False)), [])
check('background upload survives detached preview: retry-eligible-parts', solve('retry-eligible-parts', ([N],[],[],False,'uploading',None,False)), [])
check('background upload survives detached preview: sent-vs-accepted-indicator', solve('sent-vs-accepted-indicator', ([N],[],[],False,'uploading',None,False)), 0)
check('background upload survives detached preview: terminal-task-retention', solve('terminal-task-retention', ([N],[],[],False,'uploading',None,False)), True)
check('background upload survives detached preview: preview-while-incomplete', solve('preview-while-incomplete', ([N],[],[],False,'uploading',None,False)), None)
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
accepted-progress-not-sent scenario 111Passed
accepted-progress-not-sent scenario 200Passed
accepted-progress-not-sent scenario 322Passed
accepted-progress-not-sent scenario 400Passed
accepted-progress-not-sent scenario 533Passed
accepted-progress-not-sent scenario 655Passed
remaining-local-parts scenario 1[1, 2][1, 2]Passed
remaining-local-parts scenario 2[][]Passed
remaining-local-parts scenario 3[][]Passed
remaining-local-parts scenario 4[0, 1][0, 1]Passed
remaining-local-parts scenario 5[0][0]Passed
remaining-local-parts scenario 6[][]Passed
cancel-overrides-upload-status scenario 1uploadinguploadingPassed
cancel-overrides-upload-status scenario 2donedonePassed
cancel-overrides-upload-status scenario 3donedonePassed
cancel-overrides-upload-status scenario 4cancelledcancelledPassed
cancel-overrides-upload-status scenario 5failedfailedPassed
cancel-overrides-upload-status scenario 6donedonePassed
preview-revoke-on-detach scenario 1NoneNonePassed
preview-revoke-on-detach scenario 2NoneNonePassed
preview-revoke-on-detach scenario 3NoneNonePassed
preview-revoke-on-detach scenario 4blob:cblob:cPassed
preview-revoke-on-detach scenario 5NoneNonePassed
preview-revoke-on-detach scenario 6blob:eblob:ePassed
zero-size-part-completion scenario 1FalseFalsePassed
zero-size-part-completion scenario 2TrueTruePassed
zero-size-part-completion scenario 3TrueTruePassed
zero-size-part-completion scenario 4FalseFalsePassed
zero-size-part-completion scenario 5FalseFalsePassed
zero-size-part-completion scenario 6TrueTruePassed
inflight-abort-handles scenario 1[][]Passed
inflight-abort-handles scenario 2[][]Passed
inflight-abort-handles scenario 3[][]Passed
inflight-abort-handles scenario 4[0][0]Passed
inflight-abort-handles scenario 5[][]Passed
inflight-abort-handles scenario 6[][]Passed
retry-eligible-parts scenario 1[][]Passed
retry-eligible-parts scenario 2[][]Passed
retry-eligible-parts scenario 3[][]Passed
retry-eligible-parts scenario 4[][]Passed
retry-eligible-parts scenario 5[0][0]Passed
retry-eligible-parts scenario 6[][]Passed
sent-vs-accepted-indicator scenario 111Passed
sent-vs-accepted-indicator scenario 200Passed
sent-vs-accepted-indicator scenario 300Passed
sent-vs-accepted-indicator scenario 411Passed
sent-vs-accepted-indicator scenario 511Passed
sent-vs-accepted-indicator scenario 600Passed
terminal-task-retention scenario 1TrueTruePassed
terminal-task-retention scenario 2FalseFalsePassed
terminal-task-retention scenario 3TrueTruePassed
terminal-task-retention scenario 4FalseFalsePassed
terminal-task-retention scenario 5TrueTruePassed
terminal-task-retention scenario 6FalseFalsePassed
preview-while-incomplete scenario 1blob:ablob:aPassed
preview-while-incomplete scenario 2NoneNonePassed
preview-while-incomplete scenario 3blob:bblob:bPassed
preview-while-incomplete scenario 4NoneNonePassed
preview-while-incomplete scenario 5blob:dblob:dPassed
preview-while-incomplete scenario 6NoneNonePassed
cancel after one accepted and two inflight parts: accepted-progress-not-sent22Passed
cancel after one accepted and two inflight parts: remaining-local-parts[1, 2][1, 2]Passed
cancel after one accepted and two inflight parts: cancel-overrides-upload-statuscancelledcancelledPassed
cancel after one accepted and two inflight parts: preview-revoke-on-detachblob:zblob:zPassed
cancel after one accepted and two inflight parts: zero-size-part-completionFalseFalsePassed
cancel after one accepted and two inflight parts: inflight-abort-handles[0, 1, 2][1, 2]Failed
cancel after one accepted and two inflight parts: retry-eligible-parts[][]Passed
cancel after one accepted and two inflight parts: sent-vs-accepted-indicator22Passed
cancel after one accepted and two inflight parts: terminal-task-retentionFalseFalsePassed
cancel after one accepted and two inflight parts: preview-while-incompleteNoneNonePassed
background upload survives detached preview: accepted-progress-not-sent00Passed
background upload survives detached preview: remaining-local-parts[0][0]Passed
background upload survives detached preview: cancel-overrides-upload-statusuploadinguploadingPassed
background upload survives detached preview: preview-revoke-on-detachNoneNonePassed
background upload survives detached preview: zero-size-part-completionFalseFalsePassed
background upload survives detached preview: inflight-abort-handles[][]Passed
background upload survives detached preview: retry-eligible-parts[][]Passed
background upload survives detached preview: sent-vs-accepted-indicator00Passed
background upload survives detached preview: terminal-task-retentionTrueTruePassed
background upload survives detached preview: preview-while-incompleteNoneNonePassed

SHA-256 / a16aecbe1016aad7f6efed49ab7fbec5d5fe44f95d3d4ce2fc20bce2b3977fb6

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(operation, s):
    sizes, accepted, sent, cancelled, status, preview, attached = s
    if operation == 'accepted-progress-not-sent':
        return sum(sizes[i] for i in accepted)
    if operation == 'remaining-local-parts':
        return [i for i in range(len(sizes)) if i not in accepted]
    if operation == 'cancel-overrides-upload-status':
        return 'cancelled' if cancelled else status
    if operation == 'preview-revoke-on-detach':
        return preview if not attached and preview is not None else None
    if operation == 'zero-size-part-completion':
        return len(accepted)==len(sizes)
    if operation == 'inflight-abort-handles':
        return [i for i in sent if i not in accepted]
    if operation == 'retry-eligible-parts':
        return [i for i in range(len(sizes)) if i not in accepted] if status=='failed' and not cancelled else []
    if operation == 'sent-vs-accepted-indicator':
        return len(sent)-len(accepted)
    if operation == 'terminal-task-retention':
        return attached or status not in ('done','failed') and not cancelled
    if operation == 'preview-while-incomplete':
        return preview if attached else None
    raise ValueError('unknown modeled operation')
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('accepted-progress-not-sent scenario 1', solve('accepted-progress-not-sent', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), N)
check('accepted-progress-not-sent scenario 2', solve('accepted-progress-not-sent', ([],[],[],False,'done',None,False)), 0)
check('accepted-progress-not-sent scenario 3', solve('accepted-progress-not-sent', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), 2)
check('accepted-progress-not-sent scenario 4', solve('accepted-progress-not-sent', ([2,3],[],[0],True,'uploading','blob:c',False)), 0)
check('accepted-progress-not-sent scenario 5', solve('accepted-progress-not-sent', ([2,3],[1],[0,1],False,'failed','blob:d',True)), 3)
check('accepted-progress-not-sent scenario 6', solve('accepted-progress-not-sent', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), 5)
check('remaining-local-parts scenario 1', solve('remaining-local-parts', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), [1,2])
check('remaining-local-parts scenario 2', solve('remaining-local-parts', ([],[],[],False,'done',None,False)), [])
check('remaining-local-parts scenario 3', solve('remaining-local-parts', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), [])
check('remaining-local-parts scenario 4', solve('remaining-local-parts', ([2,3],[],[0],True,'uploading','blob:c',False)), [0,1])
check('remaining-local-parts scenario 5', solve('remaining-local-parts', ([2,3],[1],[0,1],False,'failed','blob:d',True)), [0])
check('remaining-local-parts scenario 6', solve('remaining-local-parts', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), [])
check('cancel-overrides-upload-status scenario 1', solve('cancel-overrides-upload-status', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), 'uploading')
check('cancel-overrides-upload-status scenario 2', solve('cancel-overrides-upload-status', ([],[],[],False,'done',None,False)), 'done')
check('cancel-overrides-upload-status scenario 3', solve('cancel-overrides-upload-status', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), 'done')
check('cancel-overrides-upload-status scenario 4', solve('cancel-overrides-upload-status', ([2,3],[],[0],True,'uploading','blob:c',False)), 'cancelled')
check('cancel-overrides-upload-status scenario 5', solve('cancel-overrides-upload-status', ([2,3],[1],[0,1],False,'failed','blob:d',True)), 'failed')
check('cancel-overrides-upload-status scenario 6', solve('cancel-overrides-upload-status', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), 'done')
check('preview-revoke-on-detach scenario 1', solve('preview-revoke-on-detach', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), None)
check('preview-revoke-on-detach scenario 2', solve('preview-revoke-on-detach', ([],[],[],False,'done',None,False)), None)
check('preview-revoke-on-detach scenario 3', solve('preview-revoke-on-detach', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), None)
check('preview-revoke-on-detach scenario 4', solve('preview-revoke-on-detach', ([2,3],[],[0],True,'uploading','blob:c',False)), 'blob:c')
check('preview-revoke-on-detach scenario 5', solve('preview-revoke-on-detach', ([2,3],[1],[0,1],False,'failed','blob:d',True)), None)
check('preview-revoke-on-detach scenario 6', solve('preview-revoke-on-detach', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), 'blob:e')
check('zero-size-part-completion scenario 1', solve('zero-size-part-completion', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), False)
check('zero-size-part-completion scenario 2', solve('zero-size-part-completion', ([],[],[],False,'done',None,False)), True)
check('zero-size-part-completion scenario 3', solve('zero-size-part-completion', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), True)
check('zero-size-part-completion scenario 4', solve('zero-size-part-completion', ([2,3],[],[0],True,'uploading','blob:c',False)), False)
check('zero-size-part-completion scenario 5', solve('zero-size-part-completion', ([2,3],[1],[0,1],False,'failed','blob:d',True)), False)
check('zero-size-part-completion scenario 6', solve('zero-size-part-completion', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), True)
check('inflight-abort-handles scenario 1', solve('inflight-abort-handles', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), [])
check('inflight-abort-handles scenario 2', solve('inflight-abort-handles', ([],[],[],False,'done',None,False)), [])
check('inflight-abort-handles scenario 3', solve('inflight-abort-handles', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), [])
check('inflight-abort-handles scenario 4', solve('inflight-abort-handles', ([2,3],[],[0],True,'uploading','blob:c',False)), [0])
check('inflight-abort-handles scenario 5', solve('inflight-abort-handles', ([2,3],[1],[0,1],False,'failed','blob:d',True)), [])
check('inflight-abort-handles scenario 6', solve('inflight-abort-handles', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), [])
check('retry-eligible-parts scenario 1', solve('retry-eligible-parts', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), [])
check('retry-eligible-parts scenario 2', solve('retry-eligible-parts', ([],[],[],False,'done',None,False)), [])
check('retry-eligible-parts scenario 3', solve('retry-eligible-parts', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), [])
check('retry-eligible-parts scenario 4', solve('retry-eligible-parts', ([2,3],[],[0],True,'uploading','blob:c',False)), [])
check('retry-eligible-parts scenario 5', solve('retry-eligible-parts', ([2,3],[1],[0,1],False,'failed','blob:d',True)), [0])
check('retry-eligible-parts scenario 6', solve('retry-eligible-parts', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), [])
check('sent-vs-accepted-indicator scenario 1', solve('sent-vs-accepted-indicator', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), 1)
check('sent-vs-accepted-indicator scenario 2', solve('sent-vs-accepted-indicator', ([],[],[],False,'done',None,False)), 0)
check('sent-vs-accepted-indicator scenario 3', solve('sent-vs-accepted-indicator', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), 0)
check('sent-vs-accepted-indicator scenario 4', solve('sent-vs-accepted-indicator', ([2,3],[],[0],True,'uploading','blob:c',False)), 1)
check('sent-vs-accepted-indicator scenario 5', solve('sent-vs-accepted-indicator', ([2,3],[1],[0,1],False,'failed','blob:d',True)), 1)
check('sent-vs-accepted-indicator scenario 6', solve('sent-vs-accepted-indicator', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), 0)
check('terminal-task-retention scenario 1', solve('terminal-task-retention', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), True)
check('terminal-task-retention scenario 2', solve('terminal-task-retention', ([],[],[],False,'done',None,False)), False)
check('terminal-task-retention scenario 3', solve('terminal-task-retention', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), True)
check('terminal-task-retention scenario 4', solve('terminal-task-retention', ([2,3],[],[0],True,'uploading','blob:c',False)), False)
check('terminal-task-retention scenario 5', solve('terminal-task-retention', ([2,3],[1],[0,1],False,'failed','blob:d',True)), True)
check('terminal-task-retention scenario 6', solve('terminal-task-retention', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), False)
check('preview-while-incomplete scenario 1', solve('preview-while-incomplete', ([N,2,3],[0],[0,1],False,'uploading','blob:a',True)), 'blob:a')
check('preview-while-incomplete scenario 2', solve('preview-while-incomplete', ([],[],[],False,'done',None,False)), None)
check('preview-while-incomplete scenario 3', solve('preview-while-incomplete', ([2,0],[0,1],[0,1],False,'done','blob:b',True)), 'blob:b')
check('preview-while-incomplete scenario 4', solve('preview-while-incomplete', ([2,3],[],[0],True,'uploading','blob:c',False)), None)
check('preview-while-incomplete scenario 5', solve('preview-while-incomplete', ([2,3],[1],[0,1],False,'failed','blob:d',True)), 'blob:d')
check('preview-while-incomplete scenario 6', solve('preview-while-incomplete', ([2,3],[0,1],[0,1],False,'done','blob:e',False)), None)
check('cancel after one accepted and two inflight parts: accepted-progress-not-sent', solve('accepted-progress-not-sent', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), 2)
check('cancel after one accepted and two inflight parts: remaining-local-parts', solve('remaining-local-parts', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), [1,2])
check('cancel after one accepted and two inflight parts: cancel-overrides-upload-status', solve('cancel-overrides-upload-status', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), 'cancelled')
check('cancel after one accepted and two inflight parts: preview-revoke-on-detach', solve('preview-revoke-on-detach', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), 'blob:z')
check('cancel after one accepted and two inflight parts: zero-size-part-completion', solve('zero-size-part-completion', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), False)
check('cancel after one accepted and two inflight parts: inflight-abort-handles', solve('inflight-abort-handles', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), [1,2])
check('cancel after one accepted and two inflight parts: retry-eligible-parts', solve('retry-eligible-parts', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), [])
check('cancel after one accepted and two inflight parts: sent-vs-accepted-indicator', solve('sent-vs-accepted-indicator', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), 2)
check('cancel after one accepted and two inflight parts: terminal-task-retention', solve('terminal-task-retention', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), False)
check('cancel after one accepted and two inflight parts: preview-while-incomplete', solve('preview-while-incomplete', ([2,3,4],[0],[0,1,2],True,'uploading','blob:z',False)), None)
check('background upload survives detached preview: accepted-progress-not-sent', solve('accepted-progress-not-sent', ([N],[],[],False,'uploading',None,False)), 0)
check('background upload survives detached preview: remaining-local-parts', solve('remaining-local-parts', ([N],[],[],False,'uploading',None,False)), [0])
check('background upload survives detached preview: cancel-overrides-upload-status', solve('cancel-overrides-upload-status', ([N],[],[],False,'uploading',None,False)), 'uploading')
check('background upload survives detached preview: preview-revoke-on-detach', solve('preview-revoke-on-detach', ([N],[],[],False,'uploading',None,False)), None)
check('background upload survives detached preview: zero-size-part-completion', solve('zero-size-part-completion', ([N],[],[],False,'uploading',None,False)), False)
check('background upload survives detached preview: inflight-abort-handles', solve('inflight-abort-handles', ([N],[],[],False,'uploading',None,False)), [])
check('background upload survives detached preview: retry-eligible-parts', solve('retry-eligible-parts', ([N],[],[],False,'uploading',None,False)), [])
check('background upload survives detached preview: sent-vs-accepted-indicator', solve('sent-vs-accepted-indicator', ([N],[],[],False,'uploading',None,False)), 0)
check('background upload survives detached preview: terminal-task-retention', solve('terminal-task-retention', ([N],[],[],False,'uploading',None,False)), True)
check('background upload survives detached preview: preview-while-incomplete', solve('preview-while-incomplete', ([N],[],[],False,'uploading',None,False)), None)
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
accepted-progress-not-sent scenario 111Passed
accepted-progress-not-sent scenario 200Passed
accepted-progress-not-sent scenario 322Passed
accepted-progress-not-sent scenario 400Passed
accepted-progress-not-sent scenario 533Passed
accepted-progress-not-sent scenario 655Passed
remaining-local-parts scenario 1[1, 2][1, 2]Passed
remaining-local-parts scenario 2[][]Passed
remaining-local-parts scenario 3[][]Passed
remaining-local-parts scenario 4[0, 1][0, 1]Passed
remaining-local-parts scenario 5[0][0]Passed
remaining-local-parts scenario 6[][]Passed
cancel-overrides-upload-status scenario 1uploadinguploadingPassed
cancel-overrides-upload-status scenario 2donedonePassed
cancel-overrides-upload-status scenario 3donedonePassed
cancel-overrides-upload-status scenario 4cancelledcancelledPassed
cancel-overrides-upload-status scenario 5failedfailedPassed
cancel-overrides-upload-status scenario 6donedonePassed
preview-revoke-on-detach scenario 1NoneNonePassed
preview-revoke-on-detach scenario 2NoneNonePassed
preview-revoke-on-detach scenario 3NoneNonePassed
preview-revoke-on-detach scenario 4blob:cblob:cPassed
preview-revoke-on-detach scenario 5NoneNonePassed
preview-revoke-on-detach scenario 6blob:eblob:ePassed
zero-size-part-completion scenario 1FalseFalsePassed
zero-size-part-completion scenario 2TrueTruePassed
zero-size-part-completion scenario 3TrueTruePassed
zero-size-part-completion scenario 4FalseFalsePassed
zero-size-part-completion scenario 5FalseFalsePassed
zero-size-part-completion scenario 6TrueTruePassed
inflight-abort-handles scenario 1[1][]Failed
inflight-abort-handles scenario 2[][]Passed
inflight-abort-handles scenario 3[][]Passed
inflight-abort-handles scenario 4[0][0]Passed
inflight-abort-handles scenario 5[0][]Failed
inflight-abort-handles scenario 6[][]Passed
retry-eligible-parts scenario 1[][]Passed
retry-eligible-parts scenario 2[][]Passed
retry-eligible-parts scenario 3[][]Passed
retry-eligible-parts scenario 4[][]Passed
retry-eligible-parts scenario 5[0][0]Passed
retry-eligible-parts scenario 6[][]Passed
sent-vs-accepted-indicator scenario 111Passed
sent-vs-accepted-indicator scenario 200Passed
sent-vs-accepted-indicator scenario 300Passed
sent-vs-accepted-indicator scenario 411Passed
sent-vs-accepted-indicator scenario 511Passed
sent-vs-accepted-indicator scenario 600Passed
terminal-task-retention scenario 1TrueTruePassed
terminal-task-retention scenario 2FalseFalsePassed
terminal-task-retention scenario 3TrueTruePassed
terminal-task-retention scenario 4FalseFalsePassed
terminal-task-retention scenario 5TrueTruePassed
terminal-task-retention scenario 6FalseFalsePassed
preview-while-incomplete scenario 1blob:ablob:aPassed
preview-while-incomplete scenario 2NoneNonePassed
preview-while-incomplete scenario 3blob:bblob:bPassed
preview-while-incomplete scenario 4NoneNonePassed
preview-while-incomplete scenario 5blob:dblob:dPassed
preview-while-incomplete scenario 6NoneNonePassed
cancel after one accepted and two inflight parts: accepted-progress-not-sent22Passed
cancel after one accepted and two inflight parts: remaining-local-parts[1, 2][1, 2]Passed
cancel after one accepted and two inflight parts: cancel-overrides-upload-statuscancelledcancelledPassed
cancel after one accepted and two inflight parts: preview-revoke-on-detachblob:zblob:zPassed
cancel after one accepted and two inflight parts: zero-size-part-completionFalseFalsePassed
cancel after one accepted and two inflight parts: inflight-abort-handles[1, 2][1, 2]Passed
cancel after one accepted and two inflight parts: retry-eligible-parts[][]Passed
cancel after one accepted and two inflight parts: sent-vs-accepted-indicator22Passed
cancel after one accepted and two inflight parts: terminal-task-retentionFalseFalsePassed
cancel after one accepted and two inflight parts: preview-while-incompleteNoneNonePassed
background upload survives detached preview: accepted-progress-not-sent00Passed
background upload survives detached preview: remaining-local-parts[0][0]Passed
background upload survives detached preview: cancel-overrides-upload-statusuploadinguploadingPassed
background upload survives detached preview: preview-revoke-on-detachNoneNonePassed
background upload survives detached preview: zero-size-part-completionFalseFalsePassed
background upload survives detached preview: inflight-abort-handles[][]Passed
background upload survives detached preview: retry-eligible-parts[][]Passed
background upload survives detached preview: sent-vs-accepted-indicator00Passed
background upload survives detached preview: terminal-task-retentionTrueTruePassed
background upload survives detached preview: preview-while-incompleteNoneNonePassed

SHA-256 / 13ce6b488a57f8528b8191311560bd5420428e30f0e417134f83ce937526376f

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 80 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:55.895088+00:00.

Case digest / f7e42fd1f747cb7d9c240790d3ffa1fd49990b48098a16886068358b1e7c4c6f