{"abstract":"Remove by file identity.","category":"Client state","checks":60,"contract":"Attachment identity differs from file name and byte count. Zero-byte and same-name files remain separate. Preview URLs and selected IDs are cleaned by attachment identity; submitted files and read-only commands have separate lifetimes. Operation remove-by-file-identity has the six explicit input/output oracles below.","evaluation_group":"s3-client-state-attachment-lifecycle","failed_approach":"The partial repair `[x for x in attachments if x[0] not in selected]` still violates the explicit fixture contract.","family":"s3-client-state-attachment-lifecycle-remove-by-file-identity","id":"FA-24386","implementations":{"attempt":{"sha256":"aa3eab1d7a3f64c827d51535766d0fc13c6b8a493bf7853b13dcef9b8df0f75a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(operation, s):\n    attachments, removed, previews, selected, submitted, readonly = s\n    if operation == 'remove-by-file-identity':\n        return [x for x in attachments if x[0] not in selected]\n    if operation == 'duplicate-filenames-kept':\n        return [(k,name) for k,name,size in attachments]\n    if operation == 'removed-preview-release':\n        return previews.get(removed)\n    if operation == 'other-previews-preserved':\n        return {k:v for k,v in previews.items() if k!=removed}\n    if operation == 'submitted-attachment-retention':\n        return [x for x in attachments if x[0] in submitted]\n    if operation == 'new-attachment-dirty-set':\n        return [k for k,name,size in attachments if k not in submitted]\n    if operation == 'selected-id-deduplication':\n        return list(dict.fromkeys(selected))\n    if operation == 'readonly-remove-command':\n        return [] if readonly else [removed]\n    if operation == 'selection-removal-propagation':\n        return [k for k in selected if k!=removed]\n    if operation == 'orphan-preview-cleanup':\n        return [v for k,v in previews.items() if k not in {x[0] for x in attachments}]\n    raise ValueError('unknown modeled operation')\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('remove-by-file-identity scenario 1', solve('remove-by-file-identity', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [('b','two',2)])\ncheck('remove-by-file-identity scenario 2', solve('remove-by-file-identity', ([], 'x',{},[],[],False)), [])\ncheck('remove-by-file-identity scenario 3', solve('remove-by-file-identity', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [('a','same',0)])\ncheck('remove-by-file-identity scenario 4', solve('remove-by-file-identity', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [('a','one',2)])\ncheck('remove-by-file-identity scenario 5', solve('remove-by-file-identity', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [('b','two',3)])\ncheck('remove-by-file-identity scenario 6', solve('remove-by-file-identity', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [('a','one',2)])\ncheck('duplicate-filenames-kept scenario 1', solve('duplicate-filenames-kept', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [('a','one'),('b','two')])\ncheck('duplicate-filenames-kept scenario 2', solve('duplicate-filenames-kept', ([], 'x',{},[],[],False)), [])\ncheck('duplicate-filenames-kept scenario 3', solve('duplicate-filenames-kept', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [('a','same'),('b','same')])\ncheck('duplicate-filenames-kept scenario 4', solve('duplicate-filenames-kept', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [('a','one')])\ncheck('duplicate-filenames-kept scenario 5', solve('duplicate-filenames-kept', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [('a','one'),('b','two')])\ncheck('duplicate-filenames-kept scenario 6', solve('duplicate-filenames-kept', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [('a','one'),('b','two')])\ncheck('removed-preview-release scenario 1', solve('removed-preview-release', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), 'blob:a')\ncheck('removed-preview-release scenario 2', solve('removed-preview-release', ([], 'x',{},[],[],False)), None)\ncheck('removed-preview-release scenario 3', solve('removed-preview-release', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), None)\ncheck('removed-preview-release scenario 4', solve('removed-preview-release', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), 'blob:x')\ncheck('removed-preview-release scenario 5', solve('removed-preview-release', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), 'blob:a')\ncheck('removed-preview-release scenario 6', solve('removed-preview-release', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), None)\ncheck('other-previews-preserved scenario 1', solve('other-previews-preserved', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), {'b':'blob:b'})\ncheck('other-previews-preserved scenario 2', solve('other-previews-preserved', ([], 'x',{},[],[],False)), {})\ncheck('other-previews-preserved scenario 3', solve('other-previews-preserved', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), {'a':'blob:a'})\ncheck('other-previews-preserved scenario 4', solve('other-previews-preserved', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), {})\ncheck('other-previews-preserved scenario 5', solve('other-previews-preserved', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), {})\ncheck('other-previews-preserved scenario 6', solve('other-previews-preserved', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), {})\ncheck('submitted-attachment-retention scenario 1', solve('submitted-attachment-retention', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [('a','one',N)])\ncheck('submitted-attachment-retention scenario 2', solve('submitted-attachment-retention', ([], 'x',{},[],[],False)), [])\ncheck('submitted-attachment-retention scenario 3', solve('submitted-attachment-retention', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [])\ncheck('submitted-attachment-retention scenario 4', solve('submitted-attachment-retention', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [('a','one',2)])\ncheck('submitted-attachment-retention scenario 5', solve('submitted-attachment-retention', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [('b','two',3)])\ncheck('submitted-attachment-retention scenario 6', solve('submitted-attachment-retention', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [])\ncheck('new-attachment-dirty-set scenario 1', solve('new-attachment-dirty-set', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['b'])\ncheck('new-attachment-dirty-set scenario 2', solve('new-attachment-dirty-set', ([], 'x',{},[],[],False)), [])\ncheck('new-attachment-dirty-set scenario 3', solve('new-attachment-dirty-set', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), ['a','b'])\ncheck('new-attachment-dirty-set scenario 4', solve('new-attachment-dirty-set', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [])\ncheck('new-attachment-dirty-set scenario 5', solve('new-attachment-dirty-set', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), ['a'])\ncheck('new-attachment-dirty-set scenario 6', solve('new-attachment-dirty-set', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['a','b'])\ncheck('selected-id-deduplication scenario 1', solve('selected-id-deduplication', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['a','b'])\ncheck('selected-id-deduplication scenario 2', solve('selected-id-deduplication', ([], 'x',{},[],[],False)), [])\ncheck('selected-id-deduplication scenario 3', solve('selected-id-deduplication', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), ['b'])\ncheck('selected-id-deduplication scenario 4', solve('selected-id-deduplication', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), ['a'])\ncheck('selected-id-deduplication scenario 5', solve('selected-id-deduplication', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('selected-id-deduplication scenario 6', solve('selected-id-deduplication', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['a'])\ncheck('readonly-remove-command scenario 1', solve('readonly-remove-command', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['a'])\ncheck('readonly-remove-command scenario 2', solve('readonly-remove-command', ([], 'x',{},[],[],False)), ['x'])\ncheck('readonly-remove-command scenario 3', solve('readonly-remove-command', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), ['b'])\ncheck('readonly-remove-command scenario 4', solve('readonly-remove-command', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [])\ncheck('readonly-remove-command scenario 5', solve('readonly-remove-command', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('readonly-remove-command scenario 6', solve('readonly-remove-command', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['b'])\ncheck('selection-removal-propagation scenario 1', solve('selection-removal-propagation', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['b'])\ncheck('selection-removal-propagation scenario 2', solve('selection-removal-propagation', ([], 'x',{},[],[],False)), [])\ncheck('selection-removal-propagation scenario 3', solve('selection-removal-propagation', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [])\ncheck('selection-removal-propagation scenario 4', solve('selection-removal-propagation', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), ['a'])\ncheck('selection-removal-propagation scenario 5', solve('selection-removal-propagation', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('selection-removal-propagation scenario 6', solve('selection-removal-propagation', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['a','a'])\ncheck('orphan-preview-cleanup scenario 1', solve('orphan-preview-cleanup', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [])\ncheck('orphan-preview-cleanup scenario 2', solve('orphan-preview-cleanup', ([], 'x',{},[],[],False)), [])\ncheck('orphan-preview-cleanup scenario 3', solve('orphan-preview-cleanup', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [])\ncheck('orphan-preview-cleanup scenario 4', solve('orphan-preview-cleanup', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), ['blob:x'])\ncheck('orphan-preview-cleanup scenario 5', solve('orphan-preview-cleanup', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('orphan-preview-cleanup scenario 6', solve('orphan-preview-cleanup', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [])\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":"b9bc8e20b6c2c212485954c68f01a11b32f87149ed15dc574b8d2d08f66477f3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(operation, s):\n    attachments, removed, previews, selected, submitted, readonly = s\n    if operation == 'remove-by-file-identity':\n        return attachments\n    if operation == 'duplicate-filenames-kept':\n        return [(k,name) for k,name,size in attachments]\n    if operation == 'removed-preview-release':\n        return previews.get(removed)\n    if operation == 'other-previews-preserved':\n        return {k:v for k,v in previews.items() if k!=removed}\n    if operation == 'submitted-attachment-retention':\n        return [x for x in attachments if x[0] in submitted]\n    if operation == 'new-attachment-dirty-set':\n        return [k for k,name,size in attachments if k not in submitted]\n    if operation == 'selected-id-deduplication':\n        return list(dict.fromkeys(selected))\n    if operation == 'readonly-remove-command':\n        return [] if readonly else [removed]\n    if operation == 'selection-removal-propagation':\n        return [k for k in selected if k!=removed]\n    if operation == 'orphan-preview-cleanup':\n        return [v for k,v in previews.items() if k not in {x[0] for x in attachments}]\n    raise ValueError('unknown modeled operation')\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('remove-by-file-identity scenario 1', solve('remove-by-file-identity', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [('b','two',2)])\ncheck('remove-by-file-identity scenario 2', solve('remove-by-file-identity', ([], 'x',{},[],[],False)), [])\ncheck('remove-by-file-identity scenario 3', solve('remove-by-file-identity', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [('a','same',0)])\ncheck('remove-by-file-identity scenario 4', solve('remove-by-file-identity', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [('a','one',2)])\ncheck('remove-by-file-identity scenario 5', solve('remove-by-file-identity', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [('b','two',3)])\ncheck('remove-by-file-identity scenario 6', solve('remove-by-file-identity', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [('a','one',2)])\ncheck('duplicate-filenames-kept scenario 1', solve('duplicate-filenames-kept', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [('a','one'),('b','two')])\ncheck('duplicate-filenames-kept scenario 2', solve('duplicate-filenames-kept', ([], 'x',{},[],[],False)), [])\ncheck('duplicate-filenames-kept scenario 3', solve('duplicate-filenames-kept', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [('a','same'),('b','same')])\ncheck('duplicate-filenames-kept scenario 4', solve('duplicate-filenames-kept', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [('a','one')])\ncheck('duplicate-filenames-kept scenario 5', solve('duplicate-filenames-kept', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [('a','one'),('b','two')])\ncheck('duplicate-filenames-kept scenario 6', solve('duplicate-filenames-kept', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [('a','one'),('b','two')])\ncheck('removed-preview-release scenario 1', solve('removed-preview-release', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), 'blob:a')\ncheck('removed-preview-release scenario 2', solve('removed-preview-release', ([], 'x',{},[],[],False)), None)\ncheck('removed-preview-release scenario 3', solve('removed-preview-release', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), None)\ncheck('removed-preview-release scenario 4', solve('removed-preview-release', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), 'blob:x')\ncheck('removed-preview-release scenario 5', solve('removed-preview-release', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), 'blob:a')\ncheck('removed-preview-release scenario 6', solve('removed-preview-release', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), None)\ncheck('other-previews-preserved scenario 1', solve('other-previews-preserved', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), {'b':'blob:b'})\ncheck('other-previews-preserved scenario 2', solve('other-previews-preserved', ([], 'x',{},[],[],False)), {})\ncheck('other-previews-preserved scenario 3', solve('other-previews-preserved', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), {'a':'blob:a'})\ncheck('other-previews-preserved scenario 4', solve('other-previews-preserved', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), {})\ncheck('other-previews-preserved scenario 5', solve('other-previews-preserved', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), {})\ncheck('other-previews-preserved scenario 6', solve('other-previews-preserved', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), {})\ncheck('submitted-attachment-retention scenario 1', solve('submitted-attachment-retention', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [('a','one',N)])\ncheck('submitted-attachment-retention scenario 2', solve('submitted-attachment-retention', ([], 'x',{},[],[],False)), [])\ncheck('submitted-attachment-retention scenario 3', solve('submitted-attachment-retention', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [])\ncheck('submitted-attachment-retention scenario 4', solve('submitted-attachment-retention', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [('a','one',2)])\ncheck('submitted-attachment-retention scenario 5', solve('submitted-attachment-retention', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [('b','two',3)])\ncheck('submitted-attachment-retention scenario 6', solve('submitted-attachment-retention', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [])\ncheck('new-attachment-dirty-set scenario 1', solve('new-attachment-dirty-set', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['b'])\ncheck('new-attachment-dirty-set scenario 2', solve('new-attachment-dirty-set', ([], 'x',{},[],[],False)), [])\ncheck('new-attachment-dirty-set scenario 3', solve('new-attachment-dirty-set', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), ['a','b'])\ncheck('new-attachment-dirty-set scenario 4', solve('new-attachment-dirty-set', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [])\ncheck('new-attachment-dirty-set scenario 5', solve('new-attachment-dirty-set', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), ['a'])\ncheck('new-attachment-dirty-set scenario 6', solve('new-attachment-dirty-set', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['a','b'])\ncheck('selected-id-deduplication scenario 1', solve('selected-id-deduplication', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['a','b'])\ncheck('selected-id-deduplication scenario 2', solve('selected-id-deduplication', ([], 'x',{},[],[],False)), [])\ncheck('selected-id-deduplication scenario 3', solve('selected-id-deduplication', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), ['b'])\ncheck('selected-id-deduplication scenario 4', solve('selected-id-deduplication', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), ['a'])\ncheck('selected-id-deduplication scenario 5', solve('selected-id-deduplication', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('selected-id-deduplication scenario 6', solve('selected-id-deduplication', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['a'])\ncheck('readonly-remove-command scenario 1', solve('readonly-remove-command', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['a'])\ncheck('readonly-remove-command scenario 2', solve('readonly-remove-command', ([], 'x',{},[],[],False)), ['x'])\ncheck('readonly-remove-command scenario 3', solve('readonly-remove-command', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), ['b'])\ncheck('readonly-remove-command scenario 4', solve('readonly-remove-command', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [])\ncheck('readonly-remove-command scenario 5', solve('readonly-remove-command', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('readonly-remove-command scenario 6', solve('readonly-remove-command', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['b'])\ncheck('selection-removal-propagation scenario 1', solve('selection-removal-propagation', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['b'])\ncheck('selection-removal-propagation scenario 2', solve('selection-removal-propagation', ([], 'x',{},[],[],False)), [])\ncheck('selection-removal-propagation scenario 3', solve('selection-removal-propagation', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [])\ncheck('selection-removal-propagation scenario 4', solve('selection-removal-propagation', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), ['a'])\ncheck('selection-removal-propagation scenario 5', solve('selection-removal-propagation', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('selection-removal-propagation scenario 6', solve('selection-removal-propagation', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['a','a'])\ncheck('orphan-preview-cleanup scenario 1', solve('orphan-preview-cleanup', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [])\ncheck('orphan-preview-cleanup scenario 2', solve('orphan-preview-cleanup', ([], 'x',{},[],[],False)), [])\ncheck('orphan-preview-cleanup scenario 3', solve('orphan-preview-cleanup', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [])\ncheck('orphan-preview-cleanup scenario 4', solve('orphan-preview-cleanup', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), ['blob:x'])\ncheck('orphan-preview-cleanup scenario 5', solve('orphan-preview-cleanup', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('orphan-preview-cleanup scenario 6', solve('orphan-preview-cleanup', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [])\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":"6b74744e71b133d6acdde5b54349ac660de48278280fa49a074ea69b6153a35a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(operation, s):\n    attachments, removed, previews, selected, submitted, readonly = s\n    if operation == 'remove-by-file-identity':\n        return [x for x in attachments if x[0]!=removed]\n    if operation == 'duplicate-filenames-kept':\n        return [(k,name) for k,name,size in attachments]\n    if operation == 'removed-preview-release':\n        return previews.get(removed)\n    if operation == 'other-previews-preserved':\n        return {k:v for k,v in previews.items() if k!=removed}\n    if operation == 'submitted-attachment-retention':\n        return [x for x in attachments if x[0] in submitted]\n    if operation == 'new-attachment-dirty-set':\n        return [k for k,name,size in attachments if k not in submitted]\n    if operation == 'selected-id-deduplication':\n        return list(dict.fromkeys(selected))\n    if operation == 'readonly-remove-command':\n        return [] if readonly else [removed]\n    if operation == 'selection-removal-propagation':\n        return [k for k in selected if k!=removed]\n    if operation == 'orphan-preview-cleanup':\n        return [v for k,v in previews.items() if k not in {x[0] for x in attachments}]\n    raise ValueError('unknown modeled operation')\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('remove-by-file-identity scenario 1', solve('remove-by-file-identity', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [('b','two',2)])\ncheck('remove-by-file-identity scenario 2', solve('remove-by-file-identity', ([], 'x',{},[],[],False)), [])\ncheck('remove-by-file-identity scenario 3', solve('remove-by-file-identity', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [('a','same',0)])\ncheck('remove-by-file-identity scenario 4', solve('remove-by-file-identity', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [('a','one',2)])\ncheck('remove-by-file-identity scenario 5', solve('remove-by-file-identity', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [('b','two',3)])\ncheck('remove-by-file-identity scenario 6', solve('remove-by-file-identity', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [('a','one',2)])\ncheck('duplicate-filenames-kept scenario 1', solve('duplicate-filenames-kept', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [('a','one'),('b','two')])\ncheck('duplicate-filenames-kept scenario 2', solve('duplicate-filenames-kept', ([], 'x',{},[],[],False)), [])\ncheck('duplicate-filenames-kept scenario 3', solve('duplicate-filenames-kept', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [('a','same'),('b','same')])\ncheck('duplicate-filenames-kept scenario 4', solve('duplicate-filenames-kept', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [('a','one')])\ncheck('duplicate-filenames-kept scenario 5', solve('duplicate-filenames-kept', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [('a','one'),('b','two')])\ncheck('duplicate-filenames-kept scenario 6', solve('duplicate-filenames-kept', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [('a','one'),('b','two')])\ncheck('removed-preview-release scenario 1', solve('removed-preview-release', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), 'blob:a')\ncheck('removed-preview-release scenario 2', solve('removed-preview-release', ([], 'x',{},[],[],False)), None)\ncheck('removed-preview-release scenario 3', solve('removed-preview-release', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), None)\ncheck('removed-preview-release scenario 4', solve('removed-preview-release', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), 'blob:x')\ncheck('removed-preview-release scenario 5', solve('removed-preview-release', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), 'blob:a')\ncheck('removed-preview-release scenario 6', solve('removed-preview-release', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), None)\ncheck('other-previews-preserved scenario 1', solve('other-previews-preserved', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), {'b':'blob:b'})\ncheck('other-previews-preserved scenario 2', solve('other-previews-preserved', ([], 'x',{},[],[],False)), {})\ncheck('other-previews-preserved scenario 3', solve('other-previews-preserved', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), {'a':'blob:a'})\ncheck('other-previews-preserved scenario 4', solve('other-previews-preserved', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), {})\ncheck('other-previews-preserved scenario 5', solve('other-previews-preserved', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), {})\ncheck('other-previews-preserved scenario 6', solve('other-previews-preserved', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), {})\ncheck('submitted-attachment-retention scenario 1', solve('submitted-attachment-retention', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [('a','one',N)])\ncheck('submitted-attachment-retention scenario 2', solve('submitted-attachment-retention', ([], 'x',{},[],[],False)), [])\ncheck('submitted-attachment-retention scenario 3', solve('submitted-attachment-retention', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [])\ncheck('submitted-attachment-retention scenario 4', solve('submitted-attachment-retention', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [('a','one',2)])\ncheck('submitted-attachment-retention scenario 5', solve('submitted-attachment-retention', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [('b','two',3)])\ncheck('submitted-attachment-retention scenario 6', solve('submitted-attachment-retention', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [])\ncheck('new-attachment-dirty-set scenario 1', solve('new-attachment-dirty-set', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['b'])\ncheck('new-attachment-dirty-set scenario 2', solve('new-attachment-dirty-set', ([], 'x',{},[],[],False)), [])\ncheck('new-attachment-dirty-set scenario 3', solve('new-attachment-dirty-set', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), ['a','b'])\ncheck('new-attachment-dirty-set scenario 4', solve('new-attachment-dirty-set', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [])\ncheck('new-attachment-dirty-set scenario 5', solve('new-attachment-dirty-set', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), ['a'])\ncheck('new-attachment-dirty-set scenario 6', solve('new-attachment-dirty-set', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['a','b'])\ncheck('selected-id-deduplication scenario 1', solve('selected-id-deduplication', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['a','b'])\ncheck('selected-id-deduplication scenario 2', solve('selected-id-deduplication', ([], 'x',{},[],[],False)), [])\ncheck('selected-id-deduplication scenario 3', solve('selected-id-deduplication', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), ['b'])\ncheck('selected-id-deduplication scenario 4', solve('selected-id-deduplication', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), ['a'])\ncheck('selected-id-deduplication scenario 5', solve('selected-id-deduplication', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('selected-id-deduplication scenario 6', solve('selected-id-deduplication', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['a'])\ncheck('readonly-remove-command scenario 1', solve('readonly-remove-command', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['a'])\ncheck('readonly-remove-command scenario 2', solve('readonly-remove-command', ([], 'x',{},[],[],False)), ['x'])\ncheck('readonly-remove-command scenario 3', solve('readonly-remove-command', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), ['b'])\ncheck('readonly-remove-command scenario 4', solve('readonly-remove-command', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), [])\ncheck('readonly-remove-command scenario 5', solve('readonly-remove-command', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('readonly-remove-command scenario 6', solve('readonly-remove-command', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['b'])\ncheck('selection-removal-propagation scenario 1', solve('selection-removal-propagation', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), ['b'])\ncheck('selection-removal-propagation scenario 2', solve('selection-removal-propagation', ([], 'x',{},[],[],False)), [])\ncheck('selection-removal-propagation scenario 3', solve('selection-removal-propagation', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [])\ncheck('selection-removal-propagation scenario 4', solve('selection-removal-propagation', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), ['a'])\ncheck('selection-removal-propagation scenario 5', solve('selection-removal-propagation', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('selection-removal-propagation scenario 6', solve('selection-removal-propagation', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), ['a','a'])\ncheck('orphan-preview-cleanup scenario 1', solve('orphan-preview-cleanup', ([('a','one',N),('b','two',2)],'a',{'a':'blob:a','b':'blob:b'},['a','b'],['a'],False)), [])\ncheck('orphan-preview-cleanup scenario 2', solve('orphan-preview-cleanup', ([], 'x',{},[],[],False)), [])\ncheck('orphan-preview-cleanup scenario 3', solve('orphan-preview-cleanup', ([('a','same',0),('b','same',3)],'b',{'a':'blob:a'},['b'],[],False)), [])\ncheck('orphan-preview-cleanup scenario 4', solve('orphan-preview-cleanup', ([('a','one',2)],'x',{'x':'blob:x'},['a'],['a'],True)), ['blob:x'])\ncheck('orphan-preview-cleanup scenario 5', solve('orphan-preview-cleanup', ([('a','one',2),('b','two',3)],'a',{'a':'blob:a'},[],['b'],True)), [])\ncheck('orphan-preview-cleanup scenario 6', solve('orphan-preview-cleanup', ([('a','one',2),('b','two',3)],'b',{},['a','a'],[],False)), [])\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-attachment-lifecycle-remove-by-file-identity","generated_at":"2026-09-29T14:40:56.820655+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 remove-by-file-identity rule: `[x for x in attachments if x[0]!=removed]`.","root_cause":"The remove-by-file-identity client decision evaluates `attachments` instead of `[x for x in attachments if x[0]!=removed]`.","sha256":"fb0ca192605734124df036053f44c35c8dc421b0c4bcb59e2b71c6c0d6e398da","title":"Client attachment resource ownership: Remove by file identity · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":48.119,"exit_code":1,"observations":[{"actual":[],"check":"remove-by-file-identity scenario 1","expected":[["b","two",2]],"passed":false},{"actual":[],"check":"remove-by-file-identity scenario 2","expected":[],"passed":true},{"actual":[["a","same",0]],"check":"remove-by-file-identity scenario 3","expected":[["a","same",0]],"passed":true},{"actual":[],"check":"remove-by-file-identity scenario 4","expected":[["a","one",2]],"passed":false},{"actual":[["a","one",2],["b","two",3]],"check":"remove-by-file-identity scenario 5","expected":[["b","two",3]],"passed":false},{"actual":[["b","two",3]],"check":"remove-by-file-identity scenario 6","expected":[["a","one",2]],"passed":false},{"actual":[["a","one"],["b","two"]],"check":"duplicate-filenames-kept scenario 1","expected":[["a","one"],["b","two"]],"passed":true},{"actual":[],"check":"duplicate-filenames-kept scenario 2","expected":[],"passed":true},{"actual":[["a","same"],["b","same"]],"check":"duplicate-filenames-kept scenario 3","expected":[["a","same"],["b","same"]],"passed":true},{"actual":[["a","one"]],"check":"duplicate-filenames-kept scenario 4","expected":[["a","one"]],"passed":true},{"actual":[["a","one"],["b","two"]],"check":"duplicate-filenames-kept scenario 5","expected":[["a","one"],["b","two"]],"passed":true},{"actual":[["a","one"],["b","two"]],"check":"duplicate-filenames-kept scenario 6","expected":[["a","one"],["b","two"]],"passed":true},{"actual":"blob:a","check":"removed-preview-release scenario 1","expected":"blob:a","passed":true},{"actual":null,"check":"removed-preview-release scenario 2","expected":null,"passed":true},{"actual":null,"check":"removed-preview-release scenario 3","expected":null,"passed":true},{"actual":"blob:x","check":"removed-preview-release scenario 4","expected":"blob:x","passed":true},{"actual":"blob:a","check":"removed-preview-release scenario 5","expected":"blob:a","passed":true},{"actual":null,"check":"removed-preview-release scenario 6","expected":null,"passed":true},{"actual":{"b":"blob:b"},"check":"other-previews-preserved scenario 1","expected":{"b":"blob:b"},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 2","expected":{},"passed":true},{"actual":{"a":"blob:a"},"check":"other-previews-preserved scenario 3","expected":{"a":"blob:a"},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 4","expected":{},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 5","expected":{},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 6","expected":{},"passed":true},{"actual":[["a","one",1]],"check":"submitted-attachment-retention scenario 1","expected":[["a","one",1]],"passed":true},{"actual":[],"check":"submitted-attachment-retention scenario 2","expected":[],"passed":true},{"actual":[],"check":"submitted-attachment-retention scenario 3","expected":[],"passed":true},{"actual":[["a","one",2]],"check":"submitted-attachment-retention scenario 4","expected":[["a","one",2]],"passed":true},{"actual":[["b","two",3]],"check":"submitted-attachment-retention scenario 5","expected":[["b","two",3]],"passed":true},{"actual":[],"check":"submitted-attachment-retention scenario 6","expected":[],"passed":true},{"actual":["b"],"check":"new-attachment-dirty-set scenario 1","expected":["b"],"passed":true},{"actual":[],"check":"new-attachment-dirty-set scenario 2","expected":[],"passed":true},{"actual":["a","b"],"check":"new-attachment-dirty-set scenario 3","expected":["a","b"],"passed":true},{"actual":[],"check":"new-attachment-dirty-set scenario 4","expected":[],"passed":true},{"actual":["a"],"check":"new-attachment-dirty-set scenario 5","expected":["a"],"passed":true},{"actual":["a","b"],"check":"new-attachment-dirty-set scenario 6","expected":["a","b"],"passed":true},{"actual":["a","b"],"check":"selected-id-deduplication scenario 1","expected":["a","b"],"passed":true},{"actual":[],"check":"selected-id-deduplication scenario 2","expected":[],"passed":true},{"actual":["b"],"check":"selected-id-deduplication scenario 3","expected":["b"],"passed":true},{"actual":["a"],"check":"selected-id-deduplication scenario 4","expected":["a"],"passed":true},{"actual":[],"check":"selected-id-deduplication scenario 5","expected":[],"passed":true},{"actual":["a"],"check":"selected-id-deduplication scenario 6","expected":["a"],"passed":true},{"actual":["a"],"check":"readonly-remove-command scenario 1","expected":["a"],"passed":true},{"actual":["x"],"check":"readonly-remove-command scenario 2","expected":["x"],"passed":true},{"actual":["b"],"check":"readonly-remove-command scenario 3","expected":["b"],"passed":true},{"actual":[],"check":"readonly-remove-command scenario 4","expected":[],"passed":true},{"actual":[],"check":"readonly-remove-command scenario 5","expected":[],"passed":true},{"actual":["b"],"check":"readonly-remove-command scenario 6","expected":["b"],"passed":true},{"actual":["b"],"check":"selection-removal-propagation scenario 1","expected":["b"],"passed":true},{"actual":[],"check":"selection-removal-propagation scenario 2","expected":[],"passed":true},{"actual":[],"check":"selection-removal-propagation scenario 3","expected":[],"passed":true},{"actual":["a"],"check":"selection-removal-propagation scenario 4","expected":["a"],"passed":true},{"actual":[],"check":"selection-removal-propagation scenario 5","expected":[],"passed":true},{"actual":["a","a"],"check":"selection-removal-propagation scenario 6","expected":["a","a"],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 1","expected":[],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 2","expected":[],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 3","expected":[],"passed":true},{"actual":["blob:x"],"check":"orphan-preview-cleanup scenario 4","expected":["blob:x"],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 5","expected":[],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 6","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"remove-by-file-identity scenario 1\", \"actual\": [], \"expected\": [[\"b\", \"two\", 2]], \"passed\": false}, {\"check\": \"remove-by-file-identity scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"remove-by-file-identity scenario 3\", \"actual\": [[\"a\", \"same\", 0]], \"expected\": [[\"a\", \"same\", 0]], \"passed\": true}, {\"check\": \"remove-by-file-identity scenario 4\", \"actual\": [], \"expected\": [[\"a\", \"one\", 2]], \"passed\": false}, {\"check\": \"remove-by-file-identity scenario 5\", \"actual\": [[\"a\", \"one\", 2], [\"b\", \"two\", 3]], \"expected\": [[\"b\", \"two\", 3]], \"passed\": false}, {\"check\": \"remove-by-file-identity scenario 6\", \"actual\": [[\"b\", \"two\", 3]], \"expected\": [[\"a\", \"one\", 2]], \"passed\": false}, {\"check\": \"duplicate-filenames-kept scenario 1\", \"actual\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"expected\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 3\", \"actual\": [[\"a\", \"same\"], [\"b\", \"same\"]], \"expected\": [[\"a\", \"same\"], [\"b\", \"same\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 4\", \"actual\": [[\"a\", \"one\"]], \"expected\": [[\"a\", \"one\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 5\", \"actual\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"expected\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 6\", \"actual\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"expected\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"passed\": true}, {\"check\": \"removed-preview-release scenario 1\", \"actual\": \"blob:a\", \"expected\": \"blob:a\", \"passed\": true}, {\"check\": \"removed-preview-release scenario 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"removed-preview-release scenario 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"removed-preview-release scenario 4\", \"actual\": \"blob:x\", \"expected\": \"blob:x\", \"passed\": true}, {\"check\": \"removed-preview-release scenario 5\", \"actual\": \"blob:a\", \"expected\": \"blob:a\", \"passed\": true}, {\"check\": \"removed-preview-release scenario 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 1\", \"actual\": {\"b\": \"blob:b\"}, \"expected\": {\"b\": \"blob:b\"}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 2\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 3\", \"actual\": {\"a\": \"blob:a\"}, \"expected\": {\"a\": \"blob:a\"}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 4\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 5\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 6\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 1\", \"actual\": [[\"a\", \"one\", 1]], \"expected\": [[\"a\", \"one\", 1]], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 4\", \"actual\": [[\"a\", \"one\", 2]], \"expected\": [[\"a\", \"one\", 2]], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 5\", \"actual\": [[\"b\", \"two\", 3]], \"expected\": [[\"b\", \"two\", 3]], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 1\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 3\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 5\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 6\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 1\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 3\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 4\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 6\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 1\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 2\", \"actual\": [\"x\"], \"expected\": [\"x\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 3\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 6\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 1\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 4\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 6\", \"actual\": [\"a\", \"a\"], \"expected\": [\"a\", \"a\"], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 4\", \"actual\": [\"blob:x\"], \"expected\": [\"blob:x\"], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":46.438,"exit_code":1,"observations":[{"actual":[["a","one",1],["b","two",2]],"check":"remove-by-file-identity scenario 1","expected":[["b","two",2]],"passed":false},{"actual":[],"check":"remove-by-file-identity scenario 2","expected":[],"passed":true},{"actual":[["a","same",0],["b","same",3]],"check":"remove-by-file-identity scenario 3","expected":[["a","same",0]],"passed":false},{"actual":[["a","one",2]],"check":"remove-by-file-identity scenario 4","expected":[["a","one",2]],"passed":true},{"actual":[["a","one",2],["b","two",3]],"check":"remove-by-file-identity scenario 5","expected":[["b","two",3]],"passed":false},{"actual":[["a","one",2],["b","two",3]],"check":"remove-by-file-identity scenario 6","expected":[["a","one",2]],"passed":false},{"actual":[["a","one"],["b","two"]],"check":"duplicate-filenames-kept scenario 1","expected":[["a","one"],["b","two"]],"passed":true},{"actual":[],"check":"duplicate-filenames-kept scenario 2","expected":[],"passed":true},{"actual":[["a","same"],["b","same"]],"check":"duplicate-filenames-kept scenario 3","expected":[["a","same"],["b","same"]],"passed":true},{"actual":[["a","one"]],"check":"duplicate-filenames-kept scenario 4","expected":[["a","one"]],"passed":true},{"actual":[["a","one"],["b","two"]],"check":"duplicate-filenames-kept scenario 5","expected":[["a","one"],["b","two"]],"passed":true},{"actual":[["a","one"],["b","two"]],"check":"duplicate-filenames-kept scenario 6","expected":[["a","one"],["b","two"]],"passed":true},{"actual":"blob:a","check":"removed-preview-release scenario 1","expected":"blob:a","passed":true},{"actual":null,"check":"removed-preview-release scenario 2","expected":null,"passed":true},{"actual":null,"check":"removed-preview-release scenario 3","expected":null,"passed":true},{"actual":"blob:x","check":"removed-preview-release scenario 4","expected":"blob:x","passed":true},{"actual":"blob:a","check":"removed-preview-release scenario 5","expected":"blob:a","passed":true},{"actual":null,"check":"removed-preview-release scenario 6","expected":null,"passed":true},{"actual":{"b":"blob:b"},"check":"other-previews-preserved scenario 1","expected":{"b":"blob:b"},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 2","expected":{},"passed":true},{"actual":{"a":"blob:a"},"check":"other-previews-preserved scenario 3","expected":{"a":"blob:a"},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 4","expected":{},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 5","expected":{},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 6","expected":{},"passed":true},{"actual":[["a","one",1]],"check":"submitted-attachment-retention scenario 1","expected":[["a","one",1]],"passed":true},{"actual":[],"check":"submitted-attachment-retention scenario 2","expected":[],"passed":true},{"actual":[],"check":"submitted-attachment-retention scenario 3","expected":[],"passed":true},{"actual":[["a","one",2]],"check":"submitted-attachment-retention scenario 4","expected":[["a","one",2]],"passed":true},{"actual":[["b","two",3]],"check":"submitted-attachment-retention scenario 5","expected":[["b","two",3]],"passed":true},{"actual":[],"check":"submitted-attachment-retention scenario 6","expected":[],"passed":true},{"actual":["b"],"check":"new-attachment-dirty-set scenario 1","expected":["b"],"passed":true},{"actual":[],"check":"new-attachment-dirty-set scenario 2","expected":[],"passed":true},{"actual":["a","b"],"check":"new-attachment-dirty-set scenario 3","expected":["a","b"],"passed":true},{"actual":[],"check":"new-attachment-dirty-set scenario 4","expected":[],"passed":true},{"actual":["a"],"check":"new-attachment-dirty-set scenario 5","expected":["a"],"passed":true},{"actual":["a","b"],"check":"new-attachment-dirty-set scenario 6","expected":["a","b"],"passed":true},{"actual":["a","b"],"check":"selected-id-deduplication scenario 1","expected":["a","b"],"passed":true},{"actual":[],"check":"selected-id-deduplication scenario 2","expected":[],"passed":true},{"actual":["b"],"check":"selected-id-deduplication scenario 3","expected":["b"],"passed":true},{"actual":["a"],"check":"selected-id-deduplication scenario 4","expected":["a"],"passed":true},{"actual":[],"check":"selected-id-deduplication scenario 5","expected":[],"passed":true},{"actual":["a"],"check":"selected-id-deduplication scenario 6","expected":["a"],"passed":true},{"actual":["a"],"check":"readonly-remove-command scenario 1","expected":["a"],"passed":true},{"actual":["x"],"check":"readonly-remove-command scenario 2","expected":["x"],"passed":true},{"actual":["b"],"check":"readonly-remove-command scenario 3","expected":["b"],"passed":true},{"actual":[],"check":"readonly-remove-command scenario 4","expected":[],"passed":true},{"actual":[],"check":"readonly-remove-command scenario 5","expected":[],"passed":true},{"actual":["b"],"check":"readonly-remove-command scenario 6","expected":["b"],"passed":true},{"actual":["b"],"check":"selection-removal-propagation scenario 1","expected":["b"],"passed":true},{"actual":[],"check":"selection-removal-propagation scenario 2","expected":[],"passed":true},{"actual":[],"check":"selection-removal-propagation scenario 3","expected":[],"passed":true},{"actual":["a"],"check":"selection-removal-propagation scenario 4","expected":["a"],"passed":true},{"actual":[],"check":"selection-removal-propagation scenario 5","expected":[],"passed":true},{"actual":["a","a"],"check":"selection-removal-propagation scenario 6","expected":["a","a"],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 1","expected":[],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 2","expected":[],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 3","expected":[],"passed":true},{"actual":["blob:x"],"check":"orphan-preview-cleanup scenario 4","expected":["blob:x"],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 5","expected":[],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 6","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"remove-by-file-identity scenario 1\", \"actual\": [[\"a\", \"one\", 1], [\"b\", \"two\", 2]], \"expected\": [[\"b\", \"two\", 2]], \"passed\": false}, {\"check\": \"remove-by-file-identity scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"remove-by-file-identity scenario 3\", \"actual\": [[\"a\", \"same\", 0], [\"b\", \"same\", 3]], \"expected\": [[\"a\", \"same\", 0]], \"passed\": false}, {\"check\": \"remove-by-file-identity scenario 4\", \"actual\": [[\"a\", \"one\", 2]], \"expected\": [[\"a\", \"one\", 2]], \"passed\": true}, {\"check\": \"remove-by-file-identity scenario 5\", \"actual\": [[\"a\", \"one\", 2], [\"b\", \"two\", 3]], \"expected\": [[\"b\", \"two\", 3]], \"passed\": false}, {\"check\": \"remove-by-file-identity scenario 6\", \"actual\": [[\"a\", \"one\", 2], [\"b\", \"two\", 3]], \"expected\": [[\"a\", \"one\", 2]], \"passed\": false}, {\"check\": \"duplicate-filenames-kept scenario 1\", \"actual\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"expected\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 3\", \"actual\": [[\"a\", \"same\"], [\"b\", \"same\"]], \"expected\": [[\"a\", \"same\"], [\"b\", \"same\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 4\", \"actual\": [[\"a\", \"one\"]], \"expected\": [[\"a\", \"one\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 5\", \"actual\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"expected\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 6\", \"actual\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"expected\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"passed\": true}, {\"check\": \"removed-preview-release scenario 1\", \"actual\": \"blob:a\", \"expected\": \"blob:a\", \"passed\": true}, {\"check\": \"removed-preview-release scenario 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"removed-preview-release scenario 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"removed-preview-release scenario 4\", \"actual\": \"blob:x\", \"expected\": \"blob:x\", \"passed\": true}, {\"check\": \"removed-preview-release scenario 5\", \"actual\": \"blob:a\", \"expected\": \"blob:a\", \"passed\": true}, {\"check\": \"removed-preview-release scenario 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 1\", \"actual\": {\"b\": \"blob:b\"}, \"expected\": {\"b\": \"blob:b\"}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 2\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 3\", \"actual\": {\"a\": \"blob:a\"}, \"expected\": {\"a\": \"blob:a\"}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 4\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 5\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 6\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 1\", \"actual\": [[\"a\", \"one\", 1]], \"expected\": [[\"a\", \"one\", 1]], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 4\", \"actual\": [[\"a\", \"one\", 2]], \"expected\": [[\"a\", \"one\", 2]], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 5\", \"actual\": [[\"b\", \"two\", 3]], \"expected\": [[\"b\", \"two\", 3]], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 1\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 3\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 5\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 6\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 1\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 3\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 4\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 6\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 1\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 2\", \"actual\": [\"x\"], \"expected\": [\"x\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 3\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 6\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 1\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 4\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 6\", \"actual\": [\"a\", \"a\"], \"expected\": [\"a\", \"a\"], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 4\", \"actual\": [\"blob:x\"], \"expected\": [\"blob:x\"], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":46.764,"exit_code":0,"observations":[{"actual":[["b","two",2]],"check":"remove-by-file-identity scenario 1","expected":[["b","two",2]],"passed":true},{"actual":[],"check":"remove-by-file-identity scenario 2","expected":[],"passed":true},{"actual":[["a","same",0]],"check":"remove-by-file-identity scenario 3","expected":[["a","same",0]],"passed":true},{"actual":[["a","one",2]],"check":"remove-by-file-identity scenario 4","expected":[["a","one",2]],"passed":true},{"actual":[["b","two",3]],"check":"remove-by-file-identity scenario 5","expected":[["b","two",3]],"passed":true},{"actual":[["a","one",2]],"check":"remove-by-file-identity scenario 6","expected":[["a","one",2]],"passed":true},{"actual":[["a","one"],["b","two"]],"check":"duplicate-filenames-kept scenario 1","expected":[["a","one"],["b","two"]],"passed":true},{"actual":[],"check":"duplicate-filenames-kept scenario 2","expected":[],"passed":true},{"actual":[["a","same"],["b","same"]],"check":"duplicate-filenames-kept scenario 3","expected":[["a","same"],["b","same"]],"passed":true},{"actual":[["a","one"]],"check":"duplicate-filenames-kept scenario 4","expected":[["a","one"]],"passed":true},{"actual":[["a","one"],["b","two"]],"check":"duplicate-filenames-kept scenario 5","expected":[["a","one"],["b","two"]],"passed":true},{"actual":[["a","one"],["b","two"]],"check":"duplicate-filenames-kept scenario 6","expected":[["a","one"],["b","two"]],"passed":true},{"actual":"blob:a","check":"removed-preview-release scenario 1","expected":"blob:a","passed":true},{"actual":null,"check":"removed-preview-release scenario 2","expected":null,"passed":true},{"actual":null,"check":"removed-preview-release scenario 3","expected":null,"passed":true},{"actual":"blob:x","check":"removed-preview-release scenario 4","expected":"blob:x","passed":true},{"actual":"blob:a","check":"removed-preview-release scenario 5","expected":"blob:a","passed":true},{"actual":null,"check":"removed-preview-release scenario 6","expected":null,"passed":true},{"actual":{"b":"blob:b"},"check":"other-previews-preserved scenario 1","expected":{"b":"blob:b"},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 2","expected":{},"passed":true},{"actual":{"a":"blob:a"},"check":"other-previews-preserved scenario 3","expected":{"a":"blob:a"},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 4","expected":{},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 5","expected":{},"passed":true},{"actual":{},"check":"other-previews-preserved scenario 6","expected":{},"passed":true},{"actual":[["a","one",1]],"check":"submitted-attachment-retention scenario 1","expected":[["a","one",1]],"passed":true},{"actual":[],"check":"submitted-attachment-retention scenario 2","expected":[],"passed":true},{"actual":[],"check":"submitted-attachment-retention scenario 3","expected":[],"passed":true},{"actual":[["a","one",2]],"check":"submitted-attachment-retention scenario 4","expected":[["a","one",2]],"passed":true},{"actual":[["b","two",3]],"check":"submitted-attachment-retention scenario 5","expected":[["b","two",3]],"passed":true},{"actual":[],"check":"submitted-attachment-retention scenario 6","expected":[],"passed":true},{"actual":["b"],"check":"new-attachment-dirty-set scenario 1","expected":["b"],"passed":true},{"actual":[],"check":"new-attachment-dirty-set scenario 2","expected":[],"passed":true},{"actual":["a","b"],"check":"new-attachment-dirty-set scenario 3","expected":["a","b"],"passed":true},{"actual":[],"check":"new-attachment-dirty-set scenario 4","expected":[],"passed":true},{"actual":["a"],"check":"new-attachment-dirty-set scenario 5","expected":["a"],"passed":true},{"actual":["a","b"],"check":"new-attachment-dirty-set scenario 6","expected":["a","b"],"passed":true},{"actual":["a","b"],"check":"selected-id-deduplication scenario 1","expected":["a","b"],"passed":true},{"actual":[],"check":"selected-id-deduplication scenario 2","expected":[],"passed":true},{"actual":["b"],"check":"selected-id-deduplication scenario 3","expected":["b"],"passed":true},{"actual":["a"],"check":"selected-id-deduplication scenario 4","expected":["a"],"passed":true},{"actual":[],"check":"selected-id-deduplication scenario 5","expected":[],"passed":true},{"actual":["a"],"check":"selected-id-deduplication scenario 6","expected":["a"],"passed":true},{"actual":["a"],"check":"readonly-remove-command scenario 1","expected":["a"],"passed":true},{"actual":["x"],"check":"readonly-remove-command scenario 2","expected":["x"],"passed":true},{"actual":["b"],"check":"readonly-remove-command scenario 3","expected":["b"],"passed":true},{"actual":[],"check":"readonly-remove-command scenario 4","expected":[],"passed":true},{"actual":[],"check":"readonly-remove-command scenario 5","expected":[],"passed":true},{"actual":["b"],"check":"readonly-remove-command scenario 6","expected":["b"],"passed":true},{"actual":["b"],"check":"selection-removal-propagation scenario 1","expected":["b"],"passed":true},{"actual":[],"check":"selection-removal-propagation scenario 2","expected":[],"passed":true},{"actual":[],"check":"selection-removal-propagation scenario 3","expected":[],"passed":true},{"actual":["a"],"check":"selection-removal-propagation scenario 4","expected":["a"],"passed":true},{"actual":[],"check":"selection-removal-propagation scenario 5","expected":[],"passed":true},{"actual":["a","a"],"check":"selection-removal-propagation scenario 6","expected":["a","a"],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 1","expected":[],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 2","expected":[],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 3","expected":[],"passed":true},{"actual":["blob:x"],"check":"orphan-preview-cleanup scenario 4","expected":["blob:x"],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 5","expected":[],"passed":true},{"actual":[],"check":"orphan-preview-cleanup scenario 6","expected":[],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"remove-by-file-identity scenario 1\", \"actual\": [[\"b\", \"two\", 2]], \"expected\": [[\"b\", \"two\", 2]], \"passed\": true}, {\"check\": \"remove-by-file-identity scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"remove-by-file-identity scenario 3\", \"actual\": [[\"a\", \"same\", 0]], \"expected\": [[\"a\", \"same\", 0]], \"passed\": true}, {\"check\": \"remove-by-file-identity scenario 4\", \"actual\": [[\"a\", \"one\", 2]], \"expected\": [[\"a\", \"one\", 2]], \"passed\": true}, {\"check\": \"remove-by-file-identity scenario 5\", \"actual\": [[\"b\", \"two\", 3]], \"expected\": [[\"b\", \"two\", 3]], \"passed\": true}, {\"check\": \"remove-by-file-identity scenario 6\", \"actual\": [[\"a\", \"one\", 2]], \"expected\": [[\"a\", \"one\", 2]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 1\", \"actual\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"expected\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 3\", \"actual\": [[\"a\", \"same\"], [\"b\", \"same\"]], \"expected\": [[\"a\", \"same\"], [\"b\", \"same\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 4\", \"actual\": [[\"a\", \"one\"]], \"expected\": [[\"a\", \"one\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 5\", \"actual\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"expected\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"passed\": true}, {\"check\": \"duplicate-filenames-kept scenario 6\", \"actual\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"expected\": [[\"a\", \"one\"], [\"b\", \"two\"]], \"passed\": true}, {\"check\": \"removed-preview-release scenario 1\", \"actual\": \"blob:a\", \"expected\": \"blob:a\", \"passed\": true}, {\"check\": \"removed-preview-release scenario 2\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"removed-preview-release scenario 3\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"removed-preview-release scenario 4\", \"actual\": \"blob:x\", \"expected\": \"blob:x\", \"passed\": true}, {\"check\": \"removed-preview-release scenario 5\", \"actual\": \"blob:a\", \"expected\": \"blob:a\", \"passed\": true}, {\"check\": \"removed-preview-release scenario 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 1\", \"actual\": {\"b\": \"blob:b\"}, \"expected\": {\"b\": \"blob:b\"}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 2\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 3\", \"actual\": {\"a\": \"blob:a\"}, \"expected\": {\"a\": \"blob:a\"}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 4\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 5\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"other-previews-preserved scenario 6\", \"actual\": {}, \"expected\": {}, \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 1\", \"actual\": [[\"a\", \"one\", 1]], \"expected\": [[\"a\", \"one\", 1]], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 4\", \"actual\": [[\"a\", \"one\", 2]], \"expected\": [[\"a\", \"one\", 2]], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 5\", \"actual\": [[\"b\", \"two\", 3]], \"expected\": [[\"b\", \"two\", 3]], \"passed\": true}, {\"check\": \"submitted-attachment-retention scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 1\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 3\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 5\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"new-attachment-dirty-set scenario 6\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 1\", \"actual\": [\"a\", \"b\"], \"expected\": [\"a\", \"b\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 3\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 4\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selected-id-deduplication scenario 6\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 1\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 2\", \"actual\": [\"x\"], \"expected\": [\"x\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 3\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"readonly-remove-command scenario 6\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 1\", \"actual\": [\"b\"], \"expected\": [\"b\"], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 4\", \"actual\": [\"a\"], \"expected\": [\"a\"], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"selection-removal-propagation scenario 6\", \"actual\": [\"a\", \"a\"], \"expected\": [\"a\", \"a\"], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 4\", \"actual\": [\"blob:x\"], \"expected\": [\"blob:x\"], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"orphan-preview-cleanup scenario 6\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}