FA-24271 / Client state / Open access
Local upload task presentation: Inflight abort handles · case 01
Inflight abort handles.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| accepted-progress-not-sent scenario 1 | 1 | 1 | Passed |
| accepted-progress-not-sent scenario 2 | 0 | 0 | Passed |
| accepted-progress-not-sent scenario 3 | 2 | 2 | Passed |
| accepted-progress-not-sent scenario 4 | 0 | 0 | Passed |
| accepted-progress-not-sent scenario 5 | 3 | 3 | Passed |
| accepted-progress-not-sent scenario 6 | 5 | 5 | Passed |
| 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 1 | uploading | uploading | Passed |
| cancel-overrides-upload-status scenario 2 | done | done | Passed |
| cancel-overrides-upload-status scenario 3 | done | done | Passed |
| cancel-overrides-upload-status scenario 4 | cancelled | cancelled | Passed |
| cancel-overrides-upload-status scenario 5 | failed | failed | Passed |
| cancel-overrides-upload-status scenario 6 | done | done | Passed |
| preview-revoke-on-detach scenario 1 | None | None | Passed |
| preview-revoke-on-detach scenario 2 | None | None | Passed |
| preview-revoke-on-detach scenario 3 | None | None | Passed |
| preview-revoke-on-detach scenario 4 | blob:c | blob:c | Passed |
| preview-revoke-on-detach scenario 5 | None | None | Passed |
| preview-revoke-on-detach scenario 6 | blob:e | blob:e | Passed |
| zero-size-part-completion scenario 1 | False | False | Passed |
| zero-size-part-completion scenario 2 | True | True | Passed |
| zero-size-part-completion scenario 3 | True | True | Passed |
| zero-size-part-completion scenario 4 | False | False | Passed |
| zero-size-part-completion scenario 5 | False | False | Passed |
| zero-size-part-completion scenario 6 | True | True | Passed |
| 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 1 | 1 | 1 | Passed |
| sent-vs-accepted-indicator scenario 2 | 0 | 0 | Passed |
| sent-vs-accepted-indicator scenario 3 | 0 | 0 | Passed |
| sent-vs-accepted-indicator scenario 4 | 1 | 1 | Passed |
| sent-vs-accepted-indicator scenario 5 | 1 | 1 | Passed |
| sent-vs-accepted-indicator scenario 6 | 0 | 0 | Passed |
| terminal-task-retention scenario 1 | True | True | Passed |
| terminal-task-retention scenario 2 | False | False | Passed |
| terminal-task-retention scenario 3 | True | True | Passed |
| terminal-task-retention scenario 4 | False | False | Passed |
| terminal-task-retention scenario 5 | True | True | Passed |
| terminal-task-retention scenario 6 | False | False | Passed |
| preview-while-incomplete scenario 1 | blob:a | blob:a | Passed |
| preview-while-incomplete scenario 2 | None | None | Passed |
| preview-while-incomplete scenario 3 | blob:b | blob:b | Passed |
| preview-while-incomplete scenario 4 | None | None | Passed |
| preview-while-incomplete scenario 5 | blob:d | blob:d | Passed |
| preview-while-incomplete scenario 6 | None | None | Passed |
| cancel after one accepted and two inflight parts: accepted-progress-not-sent | 2 | 2 | Passed |
| 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-status | cancelled | cancelled | Passed |
| cancel after one accepted and two inflight parts: preview-revoke-on-detach | blob:z | blob:z | Passed |
| cancel after one accepted and two inflight parts: zero-size-part-completion | False | False | Passed |
| 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-indicator | 2 | 2 | Passed |
| cancel after one accepted and two inflight parts: terminal-task-retention | False | False | Passed |
| cancel after one accepted and two inflight parts: preview-while-incomplete | None | None | Passed |
| background upload survives detached preview: accepted-progress-not-sent | 0 | 0 | Passed |
| background upload survives detached preview: remaining-local-parts | [0] | [0] | Passed |
| background upload survives detached preview: cancel-overrides-upload-status | uploading | uploading | Passed |
| background upload survives detached preview: preview-revoke-on-detach | None | None | Passed |
| background upload survives detached preview: zero-size-part-completion | False | False | Passed |
| 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-indicator | 0 | 0 | Passed |
| background upload survives detached preview: terminal-task-retention | True | True | Passed |
| background upload survives detached preview: preview-while-incomplete | None | None | Passed |
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| accepted-progress-not-sent scenario 1 | 1 | 1 | Passed |
| accepted-progress-not-sent scenario 2 | 0 | 0 | Passed |
| accepted-progress-not-sent scenario 3 | 2 | 2 | Passed |
| accepted-progress-not-sent scenario 4 | 0 | 0 | Passed |
| accepted-progress-not-sent scenario 5 | 3 | 3 | Passed |
| accepted-progress-not-sent scenario 6 | 5 | 5 | Passed |
| 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 1 | uploading | uploading | Passed |
| cancel-overrides-upload-status scenario 2 | done | done | Passed |
| cancel-overrides-upload-status scenario 3 | done | done | Passed |
| cancel-overrides-upload-status scenario 4 | cancelled | cancelled | Passed |
| cancel-overrides-upload-status scenario 5 | failed | failed | Passed |
| cancel-overrides-upload-status scenario 6 | done | done | Passed |
| preview-revoke-on-detach scenario 1 | None | None | Passed |
| preview-revoke-on-detach scenario 2 | None | None | Passed |
| preview-revoke-on-detach scenario 3 | None | None | Passed |
| preview-revoke-on-detach scenario 4 | blob:c | blob:c | Passed |
| preview-revoke-on-detach scenario 5 | None | None | Passed |
| preview-revoke-on-detach scenario 6 | blob:e | blob:e | Passed |
| zero-size-part-completion scenario 1 | False | False | Passed |
| zero-size-part-completion scenario 2 | True | True | Passed |
| zero-size-part-completion scenario 3 | True | True | Passed |
| zero-size-part-completion scenario 4 | False | False | Passed |
| zero-size-part-completion scenario 5 | False | False | Passed |
| zero-size-part-completion scenario 6 | True | True | Passed |
| 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 1 | 1 | 1 | Passed |
| sent-vs-accepted-indicator scenario 2 | 0 | 0 | Passed |
| sent-vs-accepted-indicator scenario 3 | 0 | 0 | Passed |
| sent-vs-accepted-indicator scenario 4 | 1 | 1 | Passed |
| sent-vs-accepted-indicator scenario 5 | 1 | 1 | Passed |
| sent-vs-accepted-indicator scenario 6 | 0 | 0 | Passed |
| terminal-task-retention scenario 1 | True | True | Passed |
| terminal-task-retention scenario 2 | False | False | Passed |
| terminal-task-retention scenario 3 | True | True | Passed |
| terminal-task-retention scenario 4 | False | False | Passed |
| terminal-task-retention scenario 5 | True | True | Passed |
| terminal-task-retention scenario 6 | False | False | Passed |
| preview-while-incomplete scenario 1 | blob:a | blob:a | Passed |
| preview-while-incomplete scenario 2 | None | None | Passed |
| preview-while-incomplete scenario 3 | blob:b | blob:b | Passed |
| preview-while-incomplete scenario 4 | None | None | Passed |
| preview-while-incomplete scenario 5 | blob:d | blob:d | Passed |
| preview-while-incomplete scenario 6 | None | None | Passed |
| cancel after one accepted and two inflight parts: accepted-progress-not-sent | 2 | 2 | Passed |
| 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-status | cancelled | cancelled | Passed |
| cancel after one accepted and two inflight parts: preview-revoke-on-detach | blob:z | blob:z | Passed |
| cancel after one accepted and two inflight parts: zero-size-part-completion | False | False | Passed |
| 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-indicator | 2 | 2 | Passed |
| cancel after one accepted and two inflight parts: terminal-task-retention | False | False | Passed |
| cancel after one accepted and two inflight parts: preview-while-incomplete | None | None | Passed |
| background upload survives detached preview: accepted-progress-not-sent | 0 | 0 | Passed |
| background upload survives detached preview: remaining-local-parts | [0] | [0] | Passed |
| background upload survives detached preview: cancel-overrides-upload-status | uploading | uploading | Passed |
| background upload survives detached preview: preview-revoke-on-detach | None | None | Passed |
| background upload survives detached preview: zero-size-part-completion | False | False | Passed |
| 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-indicator | 0 | 0 | Passed |
| background upload survives detached preview: terminal-task-retention | True | True | Passed |
| background upload survives detached preview: preview-while-incomplete | None | None | Passed |
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