{"abstract":"Missing part display.","category":"Client state","checks":70,"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 missing-part-display has the six explicit input/output oracles below.","evaluation_group":"s3-client-state-download-view","failed_approach":"The partial repair `list(range(len(received),len(chunks)))` still violates the explicit fixture contract.","family":"s3-client-state-download-view-missing-part-display","id":"FA-24326","implementations":{"attempt":{"sha256":"298772f86a38d7c144c3d7d1a90ffca9f259201ea67f3000ed5fd4c1c88f49ac","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(operation, s):\n    chunks, received, expected, status, gesture, blob, readers, detached = s\n    if operation == 'received-byte-accounting':\n        return sum(len(chunks[i]) for i in received)\n    if operation == 'file-assembly-part-order':\n        return ''.join(chunks[i] for i in sorted(received))\n    if operation == 'save-requires-current-gesture':\n        return status=='ready' and gesture\n    if operation == 'size-mismatch-error':\n        return status=='ready' and sum(len(chunks[i]) for i in received)!=expected\n    if operation == 'blob-reader-reference-release':\n        return blob if detached and not readers else None\n    if operation == 'reader-registry-preservation':\n        return list(readers)\n    if operation == 'download-action-status':\n        return 'save' if status=='ready' and gesture else ('retry' if status=='failed' else 'wait')\n    if operation == 'missing-part-display':\n        return list(range(len(received),len(chunks)))\n    if operation == 'remaining-download-bytes':\n        return max(0,expected-sum(len(chunks[i]) for i in received))\n    if operation == 'complete-empty-download':\n        return status=='ready' and len(received)==len(chunks)\n    raise ValueError('unknown modeled operation')\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('received-byte-accounting scenario 1', solve('received-byte-accounting', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), N+2)\ncheck('received-byte-accounting scenario 2', solve('received-byte-accounting', ([],[],0,'ready',False,None,[],False)), 0)\ncheck('received-byte-accounting scenario 3', solve('received-byte-accounting', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)\ncheck('received-byte-accounting scenario 4', solve('received-byte-accounting', (['x'],[0],1,'ready',False,'blob:b',[],True)), 1)\ncheck('received-byte-accounting scenario 5', solve('received-byte-accounting', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 2)\ncheck('received-byte-accounting scenario 6', solve('received-byte-accounting', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 1)\ncheck('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')\ncheck('file-assembly-part-order scenario 2', solve('file-assembly-part-order', ([],[],0,'ready',False,None,[],False)), '')\ncheck('file-assembly-part-order scenario 3', solve('file-assembly-part-order', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'cd')\ncheck('file-assembly-part-order scenario 4', solve('file-assembly-part-order', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'x')\ncheck('file-assembly-part-order scenario 5', solve('file-assembly-part-order', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'ab')\ncheck('file-assembly-part-order scenario 6', solve('file-assembly-part-order', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'z')\ncheck('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)\ncheck('save-requires-current-gesture scenario 2', solve('save-requires-current-gesture', ([],[],0,'ready',False,None,[],False)), False)\ncheck('save-requires-current-gesture scenario 3', solve('save-requires-current-gesture', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)\ncheck('save-requires-current-gesture scenario 4', solve('save-requires-current-gesture', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)\ncheck('save-requires-current-gesture scenario 5', solve('save-requires-current-gesture', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)\ncheck('save-requires-current-gesture scenario 6', solve('save-requires-current-gesture', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)\ncheck('size-mismatch-error scenario 1', solve('size-mismatch-error', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), False)\ncheck('size-mismatch-error scenario 2', solve('size-mismatch-error', ([],[],0,'ready',False,None,[],False)), False)\ncheck('size-mismatch-error scenario 3', solve('size-mismatch-error', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)\ncheck('size-mismatch-error scenario 4', solve('size-mismatch-error', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)\ncheck('size-mismatch-error scenario 5', solve('size-mismatch-error', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)\ncheck('size-mismatch-error scenario 6', solve('size-mismatch-error', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), False)\ncheck('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)\ncheck('blob-reader-reference-release scenario 2', solve('blob-reader-reference-release', ([],[],0,'ready',False,None,[],False)), None)\ncheck('blob-reader-reference-release scenario 3', solve('blob-reader-reference-release', (['ab','cd'],[1],4,'loading',True,None,[],False)), None)\ncheck('blob-reader-reference-release scenario 4', solve('blob-reader-reference-release', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'blob:b')\ncheck('blob-reader-reference-release scenario 5', solve('blob-reader-reference-release', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), None)\ncheck('blob-reader-reference-release scenario 6', solve('blob-reader-reference-release', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), None)\ncheck('reader-registry-preservation scenario 1', solve('reader-registry-preservation', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), ['preview'])\ncheck('reader-registry-preservation scenario 2', solve('reader-registry-preservation', ([],[],0,'ready',False,None,[],False)), [])\ncheck('reader-registry-preservation scenario 3', solve('reader-registry-preservation', (['ab','cd'],[1],4,'loading',True,None,[],False)), [])\ncheck('reader-registry-preservation scenario 4', solve('reader-registry-preservation', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])\ncheck('reader-registry-preservation scenario 5', solve('reader-registry-preservation', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), ['preview','save'])\ncheck('reader-registry-preservation scenario 6', solve('reader-registry-preservation', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])\ncheck('download-action-status scenario 1', solve('download-action-status', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 'save')\ncheck('download-action-status scenario 2', solve('download-action-status', ([],[],0,'ready',False,None,[],False)), 'wait')\ncheck('download-action-status scenario 3', solve('download-action-status', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'wait')\ncheck('download-action-status scenario 4', solve('download-action-status', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'wait')\ncheck('download-action-status scenario 5', solve('download-action-status', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'retry')\ncheck('download-action-status scenario 6', solve('download-action-status', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'save')\ncheck('missing-part-display scenario 1', solve('missing-part-display', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), [])\ncheck('missing-part-display scenario 2', solve('missing-part-display', ([],[],0,'ready',False,None,[],False)), [])\ncheck('missing-part-display scenario 3', solve('missing-part-display', (['ab','cd'],[1],4,'loading',True,None,[],False)), [0])\ncheck('missing-part-display scenario 4', solve('missing-part-display', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])\ncheck('missing-part-display scenario 5', solve('missing-part-display', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), [])\ncheck('missing-part-display scenario 6', solve('missing-part-display', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])\ncheck('remaining-download-bytes scenario 1', solve('remaining-download-bytes', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 0)\ncheck('remaining-download-bytes scenario 2', solve('remaining-download-bytes', ([],[],0,'ready',False,None,[],False)), 0)\ncheck('remaining-download-bytes scenario 3', solve('remaining-download-bytes', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)\ncheck('remaining-download-bytes scenario 4', solve('remaining-download-bytes', (['x'],[0],1,'ready',False,'blob:b',[],True)), 0)\ncheck('remaining-download-bytes scenario 5', solve('remaining-download-bytes', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 1)\ncheck('remaining-download-bytes scenario 6', solve('remaining-download-bytes', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 0)\ncheck('complete-empty-download scenario 1', solve('complete-empty-download', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), True)\ncheck('complete-empty-download scenario 2', solve('complete-empty-download', ([],[],0,'ready',False,None,[],False)), True)\ncheck('complete-empty-download scenario 3', solve('complete-empty-download', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)\ncheck('complete-empty-download scenario 4', solve('complete-empty-download', (['x'],[0],1,'ready',False,'blob:b',[],True)), True)\ncheck('complete-empty-download scenario 5', solve('complete-empty-download', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)\ncheck('complete-empty-download scenario 6', solve('complete-empty-download', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)\ncheck('save reader outlives preview detachment: received-byte-accounting', solve('received-byte-accounting', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 1)\ncheck('save reader outlives preview detachment: file-assembly-part-order', solve('file-assembly-part-order', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'x')\ncheck('save reader outlives preview detachment: save-requires-current-gesture', solve('save-requires-current-gesture', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), True)\ncheck('save reader outlives preview detachment: size-mismatch-error', solve('size-mismatch-error', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), False)\ncheck('save reader outlives preview detachment: blob-reader-reference-release', solve('blob-reader-reference-release', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), None)\ncheck('save reader outlives preview detachment: reader-registry-preservation', solve('reader-registry-preservation', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), ['save'])\ncheck('save reader outlives preview detachment: download-action-status', solve('download-action-status', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'save')\ncheck('save reader outlives preview detachment: missing-part-display', solve('missing-part-display', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), [])\ncheck('save reader outlives preview detachment: remaining-download-bytes', solve('remaining-download-bytes', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 0)\ncheck('save reader outlives preview detachment: complete-empty-download', solve('complete-empty-download', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), True)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"49e6ed73072932d3f1325636579781310364293ae26b6c0b0930415428b180b0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(operation, s):\n    chunks, received, expected, status, gesture, blob, readers, detached = s\n    if operation == 'received-byte-accounting':\n        return sum(len(chunks[i]) for i in received)\n    if operation == 'file-assembly-part-order':\n        return ''.join(chunks[i] for i in sorted(received))\n    if operation == 'save-requires-current-gesture':\n        return status=='ready' and gesture\n    if operation == 'size-mismatch-error':\n        return status=='ready' and sum(len(chunks[i]) for i in received)!=expected\n    if operation == 'blob-reader-reference-release':\n        return blob if detached and not readers else None\n    if operation == 'reader-registry-preservation':\n        return list(readers)\n    if operation == 'download-action-status':\n        return 'save' if status=='ready' and gesture else ('retry' if status=='failed' else 'wait')\n    if operation == 'missing-part-display':\n        return []\n    if operation == 'remaining-download-bytes':\n        return max(0,expected-sum(len(chunks[i]) for i in received))\n    if operation == 'complete-empty-download':\n        return status=='ready' and len(received)==len(chunks)\n    raise ValueError('unknown modeled operation')\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('received-byte-accounting scenario 1', solve('received-byte-accounting', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), N+2)\ncheck('received-byte-accounting scenario 2', solve('received-byte-accounting', ([],[],0,'ready',False,None,[],False)), 0)\ncheck('received-byte-accounting scenario 3', solve('received-byte-accounting', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)\ncheck('received-byte-accounting scenario 4', solve('received-byte-accounting', (['x'],[0],1,'ready',False,'blob:b',[],True)), 1)\ncheck('received-byte-accounting scenario 5', solve('received-byte-accounting', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 2)\ncheck('received-byte-accounting scenario 6', solve('received-byte-accounting', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 1)\ncheck('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')\ncheck('file-assembly-part-order scenario 2', solve('file-assembly-part-order', ([],[],0,'ready',False,None,[],False)), '')\ncheck('file-assembly-part-order scenario 3', solve('file-assembly-part-order', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'cd')\ncheck('file-assembly-part-order scenario 4', solve('file-assembly-part-order', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'x')\ncheck('file-assembly-part-order scenario 5', solve('file-assembly-part-order', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'ab')\ncheck('file-assembly-part-order scenario 6', solve('file-assembly-part-order', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'z')\ncheck('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)\ncheck('save-requires-current-gesture scenario 2', solve('save-requires-current-gesture', ([],[],0,'ready',False,None,[],False)), False)\ncheck('save-requires-current-gesture scenario 3', solve('save-requires-current-gesture', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)\ncheck('save-requires-current-gesture scenario 4', solve('save-requires-current-gesture', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)\ncheck('save-requires-current-gesture scenario 5', solve('save-requires-current-gesture', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)\ncheck('save-requires-current-gesture scenario 6', solve('save-requires-current-gesture', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)\ncheck('size-mismatch-error scenario 1', solve('size-mismatch-error', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), False)\ncheck('size-mismatch-error scenario 2', solve('size-mismatch-error', ([],[],0,'ready',False,None,[],False)), False)\ncheck('size-mismatch-error scenario 3', solve('size-mismatch-error', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)\ncheck('size-mismatch-error scenario 4', solve('size-mismatch-error', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)\ncheck('size-mismatch-error scenario 5', solve('size-mismatch-error', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)\ncheck('size-mismatch-error scenario 6', solve('size-mismatch-error', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), False)\ncheck('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)\ncheck('blob-reader-reference-release scenario 2', solve('blob-reader-reference-release', ([],[],0,'ready',False,None,[],False)), None)\ncheck('blob-reader-reference-release scenario 3', solve('blob-reader-reference-release', (['ab','cd'],[1],4,'loading',True,None,[],False)), None)\ncheck('blob-reader-reference-release scenario 4', solve('blob-reader-reference-release', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'blob:b')\ncheck('blob-reader-reference-release scenario 5', solve('blob-reader-reference-release', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), None)\ncheck('blob-reader-reference-release scenario 6', solve('blob-reader-reference-release', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), None)\ncheck('reader-registry-preservation scenario 1', solve('reader-registry-preservation', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), ['preview'])\ncheck('reader-registry-preservation scenario 2', solve('reader-registry-preservation', ([],[],0,'ready',False,None,[],False)), [])\ncheck('reader-registry-preservation scenario 3', solve('reader-registry-preservation', (['ab','cd'],[1],4,'loading',True,None,[],False)), [])\ncheck('reader-registry-preservation scenario 4', solve('reader-registry-preservation', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])\ncheck('reader-registry-preservation scenario 5', solve('reader-registry-preservation', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), ['preview','save'])\ncheck('reader-registry-preservation scenario 6', solve('reader-registry-preservation', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])\ncheck('download-action-status scenario 1', solve('download-action-status', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 'save')\ncheck('download-action-status scenario 2', solve('download-action-status', ([],[],0,'ready',False,None,[],False)), 'wait')\ncheck('download-action-status scenario 3', solve('download-action-status', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'wait')\ncheck('download-action-status scenario 4', solve('download-action-status', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'wait')\ncheck('download-action-status scenario 5', solve('download-action-status', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'retry')\ncheck('download-action-status scenario 6', solve('download-action-status', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'save')\ncheck('missing-part-display scenario 1', solve('missing-part-display', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), [])\ncheck('missing-part-display scenario 2', solve('missing-part-display', ([],[],0,'ready',False,None,[],False)), [])\ncheck('missing-part-display scenario 3', solve('missing-part-display', (['ab','cd'],[1],4,'loading',True,None,[],False)), [0])\ncheck('missing-part-display scenario 4', solve('missing-part-display', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])\ncheck('missing-part-display scenario 5', solve('missing-part-display', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), [])\ncheck('missing-part-display scenario 6', solve('missing-part-display', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])\ncheck('remaining-download-bytes scenario 1', solve('remaining-download-bytes', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 0)\ncheck('remaining-download-bytes scenario 2', solve('remaining-download-bytes', ([],[],0,'ready',False,None,[],False)), 0)\ncheck('remaining-download-bytes scenario 3', solve('remaining-download-bytes', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)\ncheck('remaining-download-bytes scenario 4', solve('remaining-download-bytes', (['x'],[0],1,'ready',False,'blob:b',[],True)), 0)\ncheck('remaining-download-bytes scenario 5', solve('remaining-download-bytes', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 1)\ncheck('remaining-download-bytes scenario 6', solve('remaining-download-bytes', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 0)\ncheck('complete-empty-download scenario 1', solve('complete-empty-download', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), True)\ncheck('complete-empty-download scenario 2', solve('complete-empty-download', ([],[],0,'ready',False,None,[],False)), True)\ncheck('complete-empty-download scenario 3', solve('complete-empty-download', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)\ncheck('complete-empty-download scenario 4', solve('complete-empty-download', (['x'],[0],1,'ready',False,'blob:b',[],True)), True)\ncheck('complete-empty-download scenario 5', solve('complete-empty-download', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)\ncheck('complete-empty-download scenario 6', solve('complete-empty-download', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)\ncheck('save reader outlives preview detachment: received-byte-accounting', solve('received-byte-accounting', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 1)\ncheck('save reader outlives preview detachment: file-assembly-part-order', solve('file-assembly-part-order', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'x')\ncheck('save reader outlives preview detachment: save-requires-current-gesture', solve('save-requires-current-gesture', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), True)\ncheck('save reader outlives preview detachment: size-mismatch-error', solve('size-mismatch-error', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), False)\ncheck('save reader outlives preview detachment: blob-reader-reference-release', solve('blob-reader-reference-release', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), None)\ncheck('save reader outlives preview detachment: reader-registry-preservation', solve('reader-registry-preservation', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), ['save'])\ncheck('save reader outlives preview detachment: download-action-status', solve('download-action-status', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'save')\ncheck('save reader outlives preview detachment: missing-part-display', solve('missing-part-display', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), [])\ncheck('save reader outlives preview detachment: remaining-download-bytes', solve('remaining-download-bytes', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 0)\ncheck('save reader outlives preview detachment: complete-empty-download', solve('complete-empty-download', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), True)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"725e0e99bd6be4d31afee03f40d9a750e3c21560cc86455f8b0beaec42c87cf5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(operation, s):\n    chunks, received, expected, status, gesture, blob, readers, detached = s\n    if operation == 'received-byte-accounting':\n        return sum(len(chunks[i]) for i in received)\n    if operation == 'file-assembly-part-order':\n        return ''.join(chunks[i] for i in sorted(received))\n    if operation == 'save-requires-current-gesture':\n        return status=='ready' and gesture\n    if operation == 'size-mismatch-error':\n        return status=='ready' and sum(len(chunks[i]) for i in received)!=expected\n    if operation == 'blob-reader-reference-release':\n        return blob if detached and not readers else None\n    if operation == 'reader-registry-preservation':\n        return list(readers)\n    if operation == 'download-action-status':\n        return 'save' if status=='ready' and gesture else ('retry' if status=='failed' else 'wait')\n    if operation == 'missing-part-display':\n        return [i for i in range(len(chunks)) if i not in received]\n    if operation == 'remaining-download-bytes':\n        return max(0,expected-sum(len(chunks[i]) for i in received))\n    if operation == 'complete-empty-download':\n        return status=='ready' and len(received)==len(chunks)\n    raise ValueError('unknown modeled operation')\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('received-byte-accounting scenario 1', solve('received-byte-accounting', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), N+2)\ncheck('received-byte-accounting scenario 2', solve('received-byte-accounting', ([],[],0,'ready',False,None,[],False)), 0)\ncheck('received-byte-accounting scenario 3', solve('received-byte-accounting', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)\ncheck('received-byte-accounting scenario 4', solve('received-byte-accounting', (['x'],[0],1,'ready',False,'blob:b',[],True)), 1)\ncheck('received-byte-accounting scenario 5', solve('received-byte-accounting', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 2)\ncheck('received-byte-accounting scenario 6', solve('received-byte-accounting', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 1)\ncheck('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')\ncheck('file-assembly-part-order scenario 2', solve('file-assembly-part-order', ([],[],0,'ready',False,None,[],False)), '')\ncheck('file-assembly-part-order scenario 3', solve('file-assembly-part-order', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'cd')\ncheck('file-assembly-part-order scenario 4', solve('file-assembly-part-order', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'x')\ncheck('file-assembly-part-order scenario 5', solve('file-assembly-part-order', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'ab')\ncheck('file-assembly-part-order scenario 6', solve('file-assembly-part-order', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'z')\ncheck('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)\ncheck('save-requires-current-gesture scenario 2', solve('save-requires-current-gesture', ([],[],0,'ready',False,None,[],False)), False)\ncheck('save-requires-current-gesture scenario 3', solve('save-requires-current-gesture', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)\ncheck('save-requires-current-gesture scenario 4', solve('save-requires-current-gesture', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)\ncheck('save-requires-current-gesture scenario 5', solve('save-requires-current-gesture', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)\ncheck('save-requires-current-gesture scenario 6', solve('save-requires-current-gesture', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)\ncheck('size-mismatch-error scenario 1', solve('size-mismatch-error', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), False)\ncheck('size-mismatch-error scenario 2', solve('size-mismatch-error', ([],[],0,'ready',False,None,[],False)), False)\ncheck('size-mismatch-error scenario 3', solve('size-mismatch-error', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)\ncheck('size-mismatch-error scenario 4', solve('size-mismatch-error', (['x'],[0],1,'ready',False,'blob:b',[],True)), False)\ncheck('size-mismatch-error scenario 5', solve('size-mismatch-error', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)\ncheck('size-mismatch-error scenario 6', solve('size-mismatch-error', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), False)\ncheck('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)\ncheck('blob-reader-reference-release scenario 2', solve('blob-reader-reference-release', ([],[],0,'ready',False,None,[],False)), None)\ncheck('blob-reader-reference-release scenario 3', solve('blob-reader-reference-release', (['ab','cd'],[1],4,'loading',True,None,[],False)), None)\ncheck('blob-reader-reference-release scenario 4', solve('blob-reader-reference-release', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'blob:b')\ncheck('blob-reader-reference-release scenario 5', solve('blob-reader-reference-release', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), None)\ncheck('blob-reader-reference-release scenario 6', solve('blob-reader-reference-release', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), None)\ncheck('reader-registry-preservation scenario 1', solve('reader-registry-preservation', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), ['preview'])\ncheck('reader-registry-preservation scenario 2', solve('reader-registry-preservation', ([],[],0,'ready',False,None,[],False)), [])\ncheck('reader-registry-preservation scenario 3', solve('reader-registry-preservation', (['ab','cd'],[1],4,'loading',True,None,[],False)), [])\ncheck('reader-registry-preservation scenario 4', solve('reader-registry-preservation', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])\ncheck('reader-registry-preservation scenario 5', solve('reader-registry-preservation', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), ['preview','save'])\ncheck('reader-registry-preservation scenario 6', solve('reader-registry-preservation', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])\ncheck('download-action-status scenario 1', solve('download-action-status', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 'save')\ncheck('download-action-status scenario 2', solve('download-action-status', ([],[],0,'ready',False,None,[],False)), 'wait')\ncheck('download-action-status scenario 3', solve('download-action-status', (['ab','cd'],[1],4,'loading',True,None,[],False)), 'wait')\ncheck('download-action-status scenario 4', solve('download-action-status', (['x'],[0],1,'ready',False,'blob:b',[],True)), 'wait')\ncheck('download-action-status scenario 5', solve('download-action-status', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 'retry')\ncheck('download-action-status scenario 6', solve('download-action-status', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 'save')\ncheck('missing-part-display scenario 1', solve('missing-part-display', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), [])\ncheck('missing-part-display scenario 2', solve('missing-part-display', ([],[],0,'ready',False,None,[],False)), [])\ncheck('missing-part-display scenario 3', solve('missing-part-display', (['ab','cd'],[1],4,'loading',True,None,[],False)), [0])\ncheck('missing-part-display scenario 4', solve('missing-part-display', (['x'],[0],1,'ready',False,'blob:b',[],True)), [])\ncheck('missing-part-display scenario 5', solve('missing-part-display', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), [])\ncheck('missing-part-display scenario 6', solve('missing-part-display', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), [])\ncheck('remaining-download-bytes scenario 1', solve('remaining-download-bytes', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), 0)\ncheck('remaining-download-bytes scenario 2', solve('remaining-download-bytes', ([],[],0,'ready',False,None,[],False)), 0)\ncheck('remaining-download-bytes scenario 3', solve('remaining-download-bytes', (['ab','cd'],[1],4,'loading',True,None,[],False)), 2)\ncheck('remaining-download-bytes scenario 4', solve('remaining-download-bytes', (['x'],[0],1,'ready',False,'blob:b',[],True)), 0)\ncheck('remaining-download-bytes scenario 5', solve('remaining-download-bytes', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), 1)\ncheck('remaining-download-bytes scenario 6', solve('remaining-download-bytes', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), 0)\ncheck('complete-empty-download scenario 1', solve('complete-empty-download', (['a'*N,'bc'],[0,1],N+2,'ready',True,'blob:a',['preview'],False)), True)\ncheck('complete-empty-download scenario 2', solve('complete-empty-download', ([],[],0,'ready',False,None,[],False)), True)\ncheck('complete-empty-download scenario 3', solve('complete-empty-download', (['ab','cd'],[1],4,'loading',True,None,[],False)), False)\ncheck('complete-empty-download scenario 4', solve('complete-empty-download', (['x'],[0],1,'ready',False,'blob:b',[],True)), True)\ncheck('complete-empty-download scenario 5', solve('complete-empty-download', (['ab'],[0],3,'failed',True,'blob:c',['preview','save'],False)), False)\ncheck('complete-empty-download scenario 6', solve('complete-empty-download', (['','z'],[0,1],1,'ready',True,'blob:d',[],False)), True)\ncheck('save reader outlives preview detachment: received-byte-accounting', solve('received-byte-accounting', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 1)\ncheck('save reader outlives preview detachment: file-assembly-part-order', solve('file-assembly-part-order', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'x')\ncheck('save reader outlives preview detachment: save-requires-current-gesture', solve('save-requires-current-gesture', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), True)\ncheck('save reader outlives preview detachment: size-mismatch-error', solve('size-mismatch-error', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), False)\ncheck('save reader outlives preview detachment: blob-reader-reference-release', solve('blob-reader-reference-release', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), None)\ncheck('save reader outlives preview detachment: reader-registry-preservation', solve('reader-registry-preservation', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), ['save'])\ncheck('save reader outlives preview detachment: download-action-status', solve('download-action-status', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 'save')\ncheck('save reader outlives preview detachment: missing-part-display', solve('missing-part-display', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), [])\ncheck('save reader outlives preview detachment: remaining-download-bytes', solve('remaining-download-bytes', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), 0)\ncheck('save reader outlives preview detachment: complete-empty-download', solve('complete-empty-download', (['x'],[0],1,'ready',True,'blob:z',['save'],True)), True)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-client-state-download-view-missing-part-display","generated_at":"2026-09-29T14:40:56.206065+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline client lifecycle model that isolates a state-management defect without DOM rendering or network services.","repair":"Apply the modeled missing-part-display rule: `[i for i in range(len(chunks)) if i not in received]`.","root_cause":"The missing-part-display client decision evaluates `[]` instead of `[i for i in range(len(chunks)) if i not in received]`.","sha256":"35fddf4a2b86a9e8545e23964be0d97bc62258f0aa01b302ccec690a5afe5769","title":"Client generated-file delivery state: Missing part display · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.356,"exit_code":1,"observations":[{"actual":3,"check":"received-byte-accounting scenario 1","expected":3,"passed":true},{"actual":0,"check":"received-byte-accounting scenario 2","expected":0,"passed":true},{"actual":2,"check":"received-byte-accounting scenario 3","expected":2,"passed":true},{"actual":1,"check":"received-byte-accounting scenario 4","expected":1,"passed":true},{"actual":2,"check":"received-byte-accounting scenario 5","expected":2,"passed":true},{"actual":1,"check":"received-byte-accounting scenario 6","expected":1,"passed":true},{"actual":"abc","check":"file-assembly-part-order scenario 1","expected":"abc","passed":true},{"actual":"","check":"file-assembly-part-order scenario 2","expected":"","passed":true},{"actual":"cd","check":"file-assembly-part-order scenario 3","expected":"cd","passed":true},{"actual":"x","check":"file-assembly-part-order scenario 4","expected":"x","passed":true},{"actual":"ab","check":"file-assembly-part-order scenario 5","expected":"ab","passed":true},{"actual":"z","check":"file-assembly-part-order scenario 6","expected":"z","passed":true},{"actual":true,"check":"save-requires-current-gesture scenario 1","expected":true,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 2","expected":false,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 3","expected":false,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 4","expected":false,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 5","expected":false,"passed":true},{"actual":true,"check":"save-requires-current-gesture scenario 6","expected":true,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 1","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 2","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 3","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 4","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 5","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 6","expected":false,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 1","expected":null,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 2","expected":null,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 3","expected":null,"passed":true},{"actual":"blob:b","check":"blob-reader-reference-release scenario 4","expected":"blob:b","passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 5","expected":null,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 6","expected":null,"passed":true},{"actual":["preview"],"check":"reader-registry-preservation scenario 1","expected":["preview"],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 2","expected":[],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 3","expected":[],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 4","expected":[],"passed":true},{"actual":["preview","save"],"check":"reader-registry-preservation scenario 5","expected":["preview","save"],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 6","expected":[],"passed":true},{"actual":"save","check":"download-action-status scenario 1","expected":"save","passed":true},{"actual":"wait","check":"download-action-status scenario 2","expected":"wait","passed":true},{"actual":"wait","check":"download-action-status scenario 3","expected":"wait","passed":true},{"actual":"wait","check":"download-action-status scenario 4","expected":"wait","passed":true},{"actual":"retry","check":"download-action-status scenario 5","expected":"retry","passed":true},{"actual":"save","check":"download-action-status scenario 6","expected":"save","passed":true},{"actual":[],"check":"missing-part-display scenario 1","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 2","expected":[],"passed":true},{"actual":[1],"check":"missing-part-display scenario 3","expected":[0],"passed":false},{"actual":[],"check":"missing-part-display scenario 4","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 5","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 6","expected":[],"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 1","expected":0,"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 2","expected":0,"passed":true},{"actual":2,"check":"remaining-download-bytes scenario 3","expected":2,"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 4","expected":0,"passed":true},{"actual":1,"check":"remaining-download-bytes scenario 5","expected":1,"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 6","expected":0,"passed":true},{"actual":true,"check":"complete-empty-download scenario 1","expected":true,"passed":true},{"actual":true,"check":"complete-empty-download scenario 2","expected":true,"passed":true},{"actual":false,"check":"complete-empty-download scenario 3","expected":false,"passed":true},{"actual":true,"check":"complete-empty-download scenario 4","expected":true,"passed":true},{"actual":false,"check":"complete-empty-download scenario 5","expected":false,"passed":true},{"actual":true,"check":"complete-empty-download scenario 6","expected":true,"passed":true},{"actual":1,"check":"save reader outlives preview detachment: received-byte-accounting","expected":1,"passed":true},{"actual":"x","check":"save reader outlives preview detachment: file-assembly-part-order","expected":"x","passed":true},{"actual":true,"check":"save reader outlives preview detachment: save-requires-current-gesture","expected":true,"passed":true},{"actual":false,"check":"save reader outlives preview detachment: size-mismatch-error","expected":false,"passed":true},{"actual":null,"check":"save reader outlives preview detachment: blob-reader-reference-release","expected":null,"passed":true},{"actual":["save"],"check":"save reader outlives preview detachment: reader-registry-preservation","expected":["save"],"passed":true},{"actual":"save","check":"save reader outlives preview detachment: download-action-status","expected":"save","passed":true},{"actual":[],"check":"save reader outlives preview detachment: missing-part-display","expected":[],"passed":true},{"actual":0,"check":"save reader outlives preview detachment: remaining-download-bytes","expected":0,"passed":true},{"actual":true,"check":"save reader outlives preview detachment: complete-empty-download","expected":true,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"received-byte-accounting scenario 1\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 3\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 4\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 5\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 6\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 1\", \"actual\": \"abc\", \"expected\": \"abc\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 2\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 3\", \"actual\": \"cd\", \"expected\": \"cd\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 4\", \"actual\": \"x\", \"expected\": \"x\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 5\", \"actual\": \"ab\", \"expected\": \"ab\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 6\", \"actual\": \"z\", \"expected\": \"z\", \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 1\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 2\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 4\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 6\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 1\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 2\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 4\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 6\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 1\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 4\", \"actual\": \"blob:b\", \"expected\": \"blob:b\", \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 1\", \"actual\": [\"preview\"], \"expected\": [\"preview\"], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 5\", \"actual\": [\"preview\", \"save\"], \"expected\": [\"preview\", \"save\"], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"download-action-status scenario 1\", \"actual\": \"save\", \"expected\": \"save\", \"passed\": true}, {\"check\": \"download-action-status scenario 2\", \"actual\": \"wait\", \"expected\": \"wait\", \"passed\": true}, {\"check\": \"download-action-status scenario 3\", \"actual\": \"wait\", \"expected\": \"wait\", \"passed\": true}, {\"check\": \"download-action-status scenario 4\", \"actual\": \"wait\", \"expected\": \"wait\", \"passed\": true}, {\"check\": \"download-action-status scenario 5\", \"actual\": \"retry\", \"expected\": \"retry\", \"passed\": true}, {\"check\": \"download-action-status scenario 6\", \"actual\": \"save\", \"expected\": \"save\", \"passed\": true}, {\"check\": \"missing-part-display scenario 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 3\", \"actual\": [1], \"expected\": [0], \"passed\": false}, {\"check\": \"missing-part-display scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 1\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 3\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 4\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 5\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 6\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"complete-empty-download scenario 1\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"complete-empty-download scenario 2\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"complete-empty-download scenario 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"complete-empty-download scenario 4\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"complete-empty-download scenario 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"complete-empty-download scenario 6\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: received-byte-accounting\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: file-assembly-part-order\", \"actual\": \"x\", \"expected\": \"x\", \"passed\": true}, {\"check\": \"save reader outlives preview detachment: save-requires-current-gesture\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: size-mismatch-error\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: blob-reader-reference-release\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: reader-registry-preservation\", \"actual\": [\"save\"], \"expected\": [\"save\"], \"passed\": true}, {\"check\": \"save reader outlives preview detachment: download-action-status\", \"actual\": \"save\", \"expected\": \"save\", \"passed\": true}, {\"check\": \"save reader outlives preview detachment: missing-part-display\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"save reader outlives preview detachment: remaining-download-bytes\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: complete-empty-download\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.356,"exit_code":1,"observations":[{"actual":3,"check":"received-byte-accounting scenario 1","expected":3,"passed":true},{"actual":0,"check":"received-byte-accounting scenario 2","expected":0,"passed":true},{"actual":2,"check":"received-byte-accounting scenario 3","expected":2,"passed":true},{"actual":1,"check":"received-byte-accounting scenario 4","expected":1,"passed":true},{"actual":2,"check":"received-byte-accounting scenario 5","expected":2,"passed":true},{"actual":1,"check":"received-byte-accounting scenario 6","expected":1,"passed":true},{"actual":"abc","check":"file-assembly-part-order scenario 1","expected":"abc","passed":true},{"actual":"","check":"file-assembly-part-order scenario 2","expected":"","passed":true},{"actual":"cd","check":"file-assembly-part-order scenario 3","expected":"cd","passed":true},{"actual":"x","check":"file-assembly-part-order scenario 4","expected":"x","passed":true},{"actual":"ab","check":"file-assembly-part-order scenario 5","expected":"ab","passed":true},{"actual":"z","check":"file-assembly-part-order scenario 6","expected":"z","passed":true},{"actual":true,"check":"save-requires-current-gesture scenario 1","expected":true,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 2","expected":false,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 3","expected":false,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 4","expected":false,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 5","expected":false,"passed":true},{"actual":true,"check":"save-requires-current-gesture scenario 6","expected":true,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 1","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 2","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 3","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 4","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 5","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 6","expected":false,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 1","expected":null,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 2","expected":null,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 3","expected":null,"passed":true},{"actual":"blob:b","check":"blob-reader-reference-release scenario 4","expected":"blob:b","passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 5","expected":null,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 6","expected":null,"passed":true},{"actual":["preview"],"check":"reader-registry-preservation scenario 1","expected":["preview"],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 2","expected":[],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 3","expected":[],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 4","expected":[],"passed":true},{"actual":["preview","save"],"check":"reader-registry-preservation scenario 5","expected":["preview","save"],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 6","expected":[],"passed":true},{"actual":"save","check":"download-action-status scenario 1","expected":"save","passed":true},{"actual":"wait","check":"download-action-status scenario 2","expected":"wait","passed":true},{"actual":"wait","check":"download-action-status scenario 3","expected":"wait","passed":true},{"actual":"wait","check":"download-action-status scenario 4","expected":"wait","passed":true},{"actual":"retry","check":"download-action-status scenario 5","expected":"retry","passed":true},{"actual":"save","check":"download-action-status scenario 6","expected":"save","passed":true},{"actual":[],"check":"missing-part-display scenario 1","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 2","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 3","expected":[0],"passed":false},{"actual":[],"check":"missing-part-display scenario 4","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 5","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 6","expected":[],"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 1","expected":0,"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 2","expected":0,"passed":true},{"actual":2,"check":"remaining-download-bytes scenario 3","expected":2,"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 4","expected":0,"passed":true},{"actual":1,"check":"remaining-download-bytes scenario 5","expected":1,"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 6","expected":0,"passed":true},{"actual":true,"check":"complete-empty-download scenario 1","expected":true,"passed":true},{"actual":true,"check":"complete-empty-download scenario 2","expected":true,"passed":true},{"actual":false,"check":"complete-empty-download scenario 3","expected":false,"passed":true},{"actual":true,"check":"complete-empty-download scenario 4","expected":true,"passed":true},{"actual":false,"check":"complete-empty-download scenario 5","expected":false,"passed":true},{"actual":true,"check":"complete-empty-download scenario 6","expected":true,"passed":true},{"actual":1,"check":"save reader outlives preview detachment: received-byte-accounting","expected":1,"passed":true},{"actual":"x","check":"save reader outlives preview detachment: file-assembly-part-order","expected":"x","passed":true},{"actual":true,"check":"save reader outlives preview detachment: save-requires-current-gesture","expected":true,"passed":true},{"actual":false,"check":"save reader outlives preview detachment: size-mismatch-error","expected":false,"passed":true},{"actual":null,"check":"save reader outlives preview detachment: blob-reader-reference-release","expected":null,"passed":true},{"actual":["save"],"check":"save reader outlives preview detachment: reader-registry-preservation","expected":["save"],"passed":true},{"actual":"save","check":"save reader outlives preview detachment: download-action-status","expected":"save","passed":true},{"actual":[],"check":"save reader outlives preview detachment: missing-part-display","expected":[],"passed":true},{"actual":0,"check":"save reader outlives preview detachment: remaining-download-bytes","expected":0,"passed":true},{"actual":true,"check":"save reader outlives preview detachment: complete-empty-download","expected":true,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"received-byte-accounting scenario 1\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 3\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 4\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 5\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 6\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 1\", \"actual\": \"abc\", \"expected\": \"abc\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 2\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 3\", \"actual\": \"cd\", \"expected\": \"cd\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 4\", \"actual\": \"x\", \"expected\": \"x\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 5\", \"actual\": \"ab\", \"expected\": \"ab\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 6\", \"actual\": \"z\", \"expected\": \"z\", \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 1\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 2\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 4\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 6\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 1\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 2\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 4\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 6\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 1\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 4\", \"actual\": \"blob:b\", \"expected\": \"blob:b\", \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 1\", \"actual\": [\"preview\"], \"expected\": [\"preview\"], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 5\", \"actual\": [\"preview\", \"save\"], \"expected\": [\"preview\", \"save\"], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"download-action-status scenario 1\", \"actual\": \"save\", \"expected\": \"save\", \"passed\": true}, {\"check\": \"download-action-status scenario 2\", \"actual\": \"wait\", \"expected\": \"wait\", \"passed\": true}, {\"check\": \"download-action-status scenario 3\", \"actual\": \"wait\", \"expected\": \"wait\", \"passed\": true}, {\"check\": \"download-action-status scenario 4\", \"actual\": \"wait\", \"expected\": \"wait\", \"passed\": true}, {\"check\": \"download-action-status scenario 5\", \"actual\": \"retry\", \"expected\": \"retry\", \"passed\": true}, {\"check\": \"download-action-status scenario 6\", \"actual\": \"save\", \"expected\": \"save\", \"passed\": true}, {\"check\": \"missing-part-display scenario 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 3\", \"actual\": [], \"expected\": [0], \"passed\": false}, {\"check\": \"missing-part-display scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 1\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 3\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 4\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 5\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 6\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"complete-empty-download scenario 1\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"complete-empty-download scenario 2\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"complete-empty-download scenario 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"complete-empty-download scenario 4\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"complete-empty-download scenario 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"complete-empty-download scenario 6\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: received-byte-accounting\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: file-assembly-part-order\", \"actual\": \"x\", \"expected\": \"x\", \"passed\": true}, {\"check\": \"save reader outlives preview detachment: save-requires-current-gesture\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: size-mismatch-error\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: blob-reader-reference-release\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: reader-registry-preservation\", \"actual\": [\"save\"], \"expected\": [\"save\"], \"passed\": true}, {\"check\": \"save reader outlives preview detachment: download-action-status\", \"actual\": \"save\", \"expected\": \"save\", \"passed\": true}, {\"check\": \"save reader outlives preview detachment: missing-part-display\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"save reader outlives preview detachment: remaining-download-bytes\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: complete-empty-download\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.273,"exit_code":0,"observations":[{"actual":3,"check":"received-byte-accounting scenario 1","expected":3,"passed":true},{"actual":0,"check":"received-byte-accounting scenario 2","expected":0,"passed":true},{"actual":2,"check":"received-byte-accounting scenario 3","expected":2,"passed":true},{"actual":1,"check":"received-byte-accounting scenario 4","expected":1,"passed":true},{"actual":2,"check":"received-byte-accounting scenario 5","expected":2,"passed":true},{"actual":1,"check":"received-byte-accounting scenario 6","expected":1,"passed":true},{"actual":"abc","check":"file-assembly-part-order scenario 1","expected":"abc","passed":true},{"actual":"","check":"file-assembly-part-order scenario 2","expected":"","passed":true},{"actual":"cd","check":"file-assembly-part-order scenario 3","expected":"cd","passed":true},{"actual":"x","check":"file-assembly-part-order scenario 4","expected":"x","passed":true},{"actual":"ab","check":"file-assembly-part-order scenario 5","expected":"ab","passed":true},{"actual":"z","check":"file-assembly-part-order scenario 6","expected":"z","passed":true},{"actual":true,"check":"save-requires-current-gesture scenario 1","expected":true,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 2","expected":false,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 3","expected":false,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 4","expected":false,"passed":true},{"actual":false,"check":"save-requires-current-gesture scenario 5","expected":false,"passed":true},{"actual":true,"check":"save-requires-current-gesture scenario 6","expected":true,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 1","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 2","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 3","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 4","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 5","expected":false,"passed":true},{"actual":false,"check":"size-mismatch-error scenario 6","expected":false,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 1","expected":null,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 2","expected":null,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 3","expected":null,"passed":true},{"actual":"blob:b","check":"blob-reader-reference-release scenario 4","expected":"blob:b","passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 5","expected":null,"passed":true},{"actual":null,"check":"blob-reader-reference-release scenario 6","expected":null,"passed":true},{"actual":["preview"],"check":"reader-registry-preservation scenario 1","expected":["preview"],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 2","expected":[],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 3","expected":[],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 4","expected":[],"passed":true},{"actual":["preview","save"],"check":"reader-registry-preservation scenario 5","expected":["preview","save"],"passed":true},{"actual":[],"check":"reader-registry-preservation scenario 6","expected":[],"passed":true},{"actual":"save","check":"download-action-status scenario 1","expected":"save","passed":true},{"actual":"wait","check":"download-action-status scenario 2","expected":"wait","passed":true},{"actual":"wait","check":"download-action-status scenario 3","expected":"wait","passed":true},{"actual":"wait","check":"download-action-status scenario 4","expected":"wait","passed":true},{"actual":"retry","check":"download-action-status scenario 5","expected":"retry","passed":true},{"actual":"save","check":"download-action-status scenario 6","expected":"save","passed":true},{"actual":[],"check":"missing-part-display scenario 1","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 2","expected":[],"passed":true},{"actual":[0],"check":"missing-part-display scenario 3","expected":[0],"passed":true},{"actual":[],"check":"missing-part-display scenario 4","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 5","expected":[],"passed":true},{"actual":[],"check":"missing-part-display scenario 6","expected":[],"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 1","expected":0,"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 2","expected":0,"passed":true},{"actual":2,"check":"remaining-download-bytes scenario 3","expected":2,"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 4","expected":0,"passed":true},{"actual":1,"check":"remaining-download-bytes scenario 5","expected":1,"passed":true},{"actual":0,"check":"remaining-download-bytes scenario 6","expected":0,"passed":true},{"actual":true,"check":"complete-empty-download scenario 1","expected":true,"passed":true},{"actual":true,"check":"complete-empty-download scenario 2","expected":true,"passed":true},{"actual":false,"check":"complete-empty-download scenario 3","expected":false,"passed":true},{"actual":true,"check":"complete-empty-download scenario 4","expected":true,"passed":true},{"actual":false,"check":"complete-empty-download scenario 5","expected":false,"passed":true},{"actual":true,"check":"complete-empty-download scenario 6","expected":true,"passed":true},{"actual":1,"check":"save reader outlives preview detachment: received-byte-accounting","expected":1,"passed":true},{"actual":"x","check":"save reader outlives preview detachment: file-assembly-part-order","expected":"x","passed":true},{"actual":true,"check":"save reader outlives preview detachment: save-requires-current-gesture","expected":true,"passed":true},{"actual":false,"check":"save reader outlives preview detachment: size-mismatch-error","expected":false,"passed":true},{"actual":null,"check":"save reader outlives preview detachment: blob-reader-reference-release","expected":null,"passed":true},{"actual":["save"],"check":"save reader outlives preview detachment: reader-registry-preservation","expected":["save"],"passed":true},{"actual":"save","check":"save reader outlives preview detachment: download-action-status","expected":"save","passed":true},{"actual":[],"check":"save reader outlives preview detachment: missing-part-display","expected":[],"passed":true},{"actual":0,"check":"save reader outlives preview detachment: remaining-download-bytes","expected":0,"passed":true},{"actual":true,"check":"save reader outlives preview detachment: complete-empty-download","expected":true,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"received-byte-accounting scenario 1\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 3\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 4\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 5\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"received-byte-accounting scenario 6\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 1\", \"actual\": \"abc\", \"expected\": \"abc\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 2\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 3\", \"actual\": \"cd\", \"expected\": \"cd\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 4\", \"actual\": \"x\", \"expected\": \"x\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 5\", \"actual\": \"ab\", \"expected\": \"ab\", \"passed\": true}, {\"check\": \"file-assembly-part-order scenario 6\", \"actual\": \"z\", \"expected\": \"z\", \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 1\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 2\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 4\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save-requires-current-gesture scenario 6\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 1\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 2\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 4\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"size-mismatch-error scenario 6\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 1\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 4\", \"actual\": \"blob:b\", \"expected\": \"blob:b\", \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"blob-reader-reference-release scenario 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 1\", \"actual\": [\"preview\"], \"expected\": [\"preview\"], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 5\", \"actual\": [\"preview\", \"save\"], \"expected\": [\"preview\", \"save\"], \"passed\": true}, {\"check\": \"reader-registry-preservation scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"download-action-status scenario 1\", \"actual\": \"save\", \"expected\": \"save\", \"passed\": true}, {\"check\": \"download-action-status scenario 2\", \"actual\": \"wait\", \"expected\": \"wait\", \"passed\": true}, {\"check\": \"download-action-status scenario 3\", \"actual\": \"wait\", \"expected\": \"wait\", \"passed\": true}, {\"check\": \"download-action-status scenario 4\", \"actual\": \"wait\", \"expected\": \"wait\", \"passed\": true}, {\"check\": \"download-action-status scenario 5\", \"actual\": \"retry\", \"expected\": \"retry\", \"passed\": true}, {\"check\": \"download-action-status scenario 6\", \"actual\": \"save\", \"expected\": \"save\", \"passed\": true}, {\"check\": \"missing-part-display scenario 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 3\", \"actual\": [0], \"expected\": [0], \"passed\": true}, {\"check\": \"missing-part-display scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"missing-part-display scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 1\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 2\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 3\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 4\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 5\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"remaining-download-bytes scenario 6\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"complete-empty-download scenario 1\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"complete-empty-download scenario 2\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"complete-empty-download scenario 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"complete-empty-download scenario 4\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"complete-empty-download scenario 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"complete-empty-download scenario 6\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: received-byte-accounting\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: file-assembly-part-order\", \"actual\": \"x\", \"expected\": \"x\", \"passed\": true}, {\"check\": \"save reader outlives preview detachment: save-requires-current-gesture\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: size-mismatch-error\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: blob-reader-reference-release\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: reader-registry-preservation\", \"actual\": [\"save\"], \"expected\": [\"save\"], \"passed\": true}, {\"check\": \"save reader outlives preview detachment: download-action-status\", \"actual\": \"save\", \"expected\": \"save\", \"passed\": true}, {\"check\": \"save reader outlives preview detachment: missing-part-display\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"save reader outlives preview detachment: remaining-download-bytes\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"save reader outlives preview detachment: complete-empty-download\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}