{"abstract":"The drag-start event leaves a notification in dismissed instead of dragging.","category":"Notification interfaces","checks":37,"contract":"Swipe-to-dismiss notification feedback is a bounded visual-notification workflow with mutable policy state {'offset': 0, 'threshold': 40, 'pointer': 7, 'removed': False}. Its default transition relation is {('resting', 'drag-start'): 'dragging', ('dragging', 'below-threshold-release'): 'returning', ('dragging', 'above-threshold-release'): 'committing', ('returning', 'snapback-finished'): 'resting', ('committing', 'dismiss-accepted'): 'exit-animating', ('committing', 'dismiss-rejected'): 'returning', ('exit-animating', 'animation-finished'): 'dismissed', ('dragging', 'pointer-cancel'): 'returning', ('exit-animating', 'reduced-motion-enabled'): 'dismissed', ('committing', 'second-pointer-down'): 'committing'}; domain inputs can suppress or redirect transitions and update policy fields, as specified in solve. Different-generation events are inert. Batches apply in order. Optional observe returns the selected policy field alongside the phase.","evaluation_group":"s3-notification-interfaces-swipe","failed_approach":"Starting snapback immediately prevents deliberate dragging.","family":"s3-notification-interfaces-swipe-01","id":"FA-34491","implementations":{"attempt":{"sha256":"8db1c542db47861add94b7a1780a44f69a7445c0149bde62680c410161fc72b7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(initial, events, generation, payload=None, observe=None):\n    table = {('resting', 'drag-start'): 'returning', ('dragging', 'below-threshold-release'): 'returning', ('dragging', 'above-threshold-release'): 'committing', ('returning', 'snapback-finished'): 'resting', ('committing', 'dismiss-accepted'): 'exit-animating', ('committing', 'dismiss-rejected'): 'returning', ('exit-animating', 'animation-finished'): 'dismissed', ('dragging', 'pointer-cancel'): 'returning', ('exit-animating', 'reduced-motion-enabled'): 'dismissed', ('committing', 'second-pointer-down'): 'committing'}\n    data = json.loads(json.dumps({'offset': 0, 'threshold': 40, 'pointer': 7, 'removed': False})) if payload is None else {**json.loads(json.dumps({'offset': 0, 'threshold': 40, 'pointer': 7, 'removed': False})), **json.loads(json.dumps(payload))}\n    state = initial\n    for delivery in events:\n        event, event_generation = delivery[:2]\n        arg = delivery[2] if len(delivery) > 2 else {}\n        if event_generation == generation:\n            previous = state\n            if event in ('below-threshold-release','above-threshold-release','pointer-cancel') and arg.get('pointer',data['pointer']) != data['pointer']: event = 'unknown-event'\n            if event in ('below-threshold-release','above-threshold-release') and 'offset' in arg:\n                data['offset'] = arg['offset']\n                event = 'above-threshold-release' if abs(data['offset']) >= data['threshold'] else 'below-threshold-release'\n            state = table.get((state, event), state)\n            if state == 'resting': data['offset'] = 0\n            if state == 'dismissed': data['removed'] = True\n    return {'phase': state, 'value': data[observe]} if observe else state\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('resting / drag-start', solve('resting', [('drag-start', N)], N), 'dragging')\ncheck('dragging / below-threshold-release', solve('dragging', [('below-threshold-release', N)], N), 'returning')\ncheck('dragging / above-threshold-release', solve('dragging', [('above-threshold-release', N)], N), 'committing')\ncheck('returning / snapback-finished', solve('returning', [('snapback-finished', N)], N), 'resting')\ncheck('committing / dismiss-accepted', solve('committing', [('dismiss-accepted', N)], N), 'exit-animating')\ncheck('committing / dismiss-rejected', solve('committing', [('dismiss-rejected', N)], N), 'returning')\ncheck('exit-animating / animation-finished', solve('exit-animating', [('animation-finished', N)], N), 'dismissed')\ncheck('dragging / pointer-cancel', solve('dragging', [('pointer-cancel', N)], N), 'returning')\ncheck('exit-animating / reduced-motion-enabled', solve('exit-animating', [('reduced-motion-enabled', N)], N), 'dismissed')\ncheck('committing / second-pointer-down', solve('committing', [('second-pointer-down', N)], N), 'committing')\ncheck('older notification incarnation', solve('resting', [('drag-start', N - 1)], N), 'resting')\ncheck('future notification incarnation', solve('resting', [('drag-start', N + 1)], N), 'resting')\ncheck('unknown event is inert', solve('resting', [('unknown-event', N)], N), 'resting')\ncheck('empty delivery batch', solve('resting', [], N), 'resting')\ncheck('N stale deliveries before current delivery', solve('resting', [('drag-start', N - 1)] * N + [('drag-start', N)], N), 'dragging')\ncheck('trace drag-start then below-threshold-release', solve('resting', [('drag-start', N), ('below-threshold-release', N)], N), 'returning')\ncheck('trace drag-start then above-threshold-release', solve('resting', [('drag-start', N), ('above-threshold-release', N)], N), 'committing')\ncheck('trace drag-start then pointer-cancel', solve('resting', [('drag-start', N), ('pointer-cancel', N)], N), 'returning')\ncheck('trace below-threshold-release then snapback-finished', solve('dragging', [('below-threshold-release', N), ('snapback-finished', N)], N), 'resting')\ncheck('trace above-threshold-release then dismiss-accepted', solve('dragging', [('above-threshold-release', N), ('dismiss-accepted', N)], N), 'exit-animating')\ncheck('trace above-threshold-release then dismiss-rejected', solve('dragging', [('above-threshold-release', N), ('dismiss-rejected', N)], N), 'returning')\ncheck('trace above-threshold-release then second-pointer-down', solve('dragging', [('above-threshold-release', N), ('second-pointer-down', N)], N), 'committing')\ncheck('trace snapback-finished then drag-start', solve('returning', [('snapback-finished', N), ('drag-start', N)], N), 'dragging')\ncheck('trace dismiss-accepted then animation-finished', solve('committing', [('dismiss-accepted', N), ('animation-finished', N)], N), 'dismissed')\ncheck('trace dismiss-accepted then reduced-motion-enabled', solve('committing', [('dismiss-accepted', N), ('reduced-motion-enabled', N)], N), 'dismissed')\ncheck('trace dismiss-rejected then snapback-finished', solve('committing', [('dismiss-rejected', N), ('snapback-finished', N)], N), 'resting')\ncheck('trace pointer-cancel then snapback-finished', solve('dragging', [('pointer-cancel', N), ('snapback-finished', N)], N), 'resting')\ncheck('trace second-pointer-down then dismiss-accepted', solve('committing', [('second-pointer-down', N), ('dismiss-accepted', N)], N), 'exit-animating')\ncheck('trace second-pointer-down then dismiss-rejected', solve('committing', [('second-pointer-down', N), ('dismiss-rejected', N)], N), 'returning')\ncheck('trace second-pointer-down then second-pointer-down', solve('committing', [('second-pointer-down', N), ('second-pointer-down', N)], N), 'committing')\ncheck('domain state regression 1: offset', solve('dragging', [('above-threshold-release', N, {'offset': 39})], N, {}, 'offset'), {'phase': 'returning', 'value': 39})\ncheck('domain state regression 2: offset', solve('dragging', [('below-threshold-release', N, {'offset': -40})], N, {}, 'offset'), {'phase': 'committing', 'value': -40})\ncheck('domain state regression 3: offset', solve('dragging', [('above-threshold-release', N, {'pointer': 6, 'offset': 90})], N, {}, 'offset'), {'phase': 'dragging', 'value': 0})\ncheck('domain state regression 4: offset', solve('returning', [('snapback-finished', N, {})], N, {'offset': 25}, 'offset'), {'phase': 'resting', 'value': 0})\ncheck('domain state regression 5: removed', solve('exit-animating', [('reduced-motion-enabled', N, {})], N, {}, 'removed'), {'phase': 'dismissed', 'value': True})\ncheck('domain state regression 6: removed', solve('committing', [('dismiss-rejected', N, {})], N, {'offset': 50}, 'removed'), {'phase': 'returning', 'value': False})\ncheck('domain state regression 7: offset', solve('resting', [('drag-start', N, {}), ('above-threshold-release', N, {'offset': 39}), ('snapback-finished', N, {})], N, {}, 'offset'), {'phase': 'resting', 'value': 0})\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":"47b741a8e1880381897df7fa00bf5f2fc4f49cd774bb8648663f79a9e08d5e0a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(initial, events, generation, payload=None, observe=None):\n    table = {('resting', 'drag-start'): 'dismissed', ('dragging', 'below-threshold-release'): 'returning', ('dragging', 'above-threshold-release'): 'committing', ('returning', 'snapback-finished'): 'resting', ('committing', 'dismiss-accepted'): 'exit-animating', ('committing', 'dismiss-rejected'): 'returning', ('exit-animating', 'animation-finished'): 'dismissed', ('dragging', 'pointer-cancel'): 'returning', ('exit-animating', 'reduced-motion-enabled'): 'dismissed', ('committing', 'second-pointer-down'): 'committing'}\n    data = json.loads(json.dumps({'offset': 0, 'threshold': 40, 'pointer': 7, 'removed': False})) if payload is None else {**json.loads(json.dumps({'offset': 0, 'threshold': 40, 'pointer': 7, 'removed': False})), **json.loads(json.dumps(payload))}\n    state = initial\n    for delivery in events:\n        event, event_generation = delivery[:2]\n        arg = delivery[2] if len(delivery) > 2 else {}\n        if event_generation == generation:\n            previous = state\n            if event in ('below-threshold-release','above-threshold-release','pointer-cancel') and arg.get('pointer',data['pointer']) != data['pointer']: event = 'unknown-event'\n            if event in ('below-threshold-release','above-threshold-release') and 'offset' in arg:\n                data['offset'] = arg['offset']\n                event = 'above-threshold-release' if abs(data['offset']) >= data['threshold'] else 'below-threshold-release'\n            state = table.get((state, event), state)\n            if state == 'resting': data['offset'] = 0\n            if state == 'dismissed': data['removed'] = True\n    return {'phase': state, 'value': data[observe]} if observe else state\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('resting / drag-start', solve('resting', [('drag-start', N)], N), 'dragging')\ncheck('dragging / below-threshold-release', solve('dragging', [('below-threshold-release', N)], N), 'returning')\ncheck('dragging / above-threshold-release', solve('dragging', [('above-threshold-release', N)], N), 'committing')\ncheck('returning / snapback-finished', solve('returning', [('snapback-finished', N)], N), 'resting')\ncheck('committing / dismiss-accepted', solve('committing', [('dismiss-accepted', N)], N), 'exit-animating')\ncheck('committing / dismiss-rejected', solve('committing', [('dismiss-rejected', N)], N), 'returning')\ncheck('exit-animating / animation-finished', solve('exit-animating', [('animation-finished', N)], N), 'dismissed')\ncheck('dragging / pointer-cancel', solve('dragging', [('pointer-cancel', N)], N), 'returning')\ncheck('exit-animating / reduced-motion-enabled', solve('exit-animating', [('reduced-motion-enabled', N)], N), 'dismissed')\ncheck('committing / second-pointer-down', solve('committing', [('second-pointer-down', N)], N), 'committing')\ncheck('older notification incarnation', solve('resting', [('drag-start', N - 1)], N), 'resting')\ncheck('future notification incarnation', solve('resting', [('drag-start', N + 1)], N), 'resting')\ncheck('unknown event is inert', solve('resting', [('unknown-event', N)], N), 'resting')\ncheck('empty delivery batch', solve('resting', [], N), 'resting')\ncheck('N stale deliveries before current delivery', solve('resting', [('drag-start', N - 1)] * N + [('drag-start', N)], N), 'dragging')\ncheck('trace drag-start then below-threshold-release', solve('resting', [('drag-start', N), ('below-threshold-release', N)], N), 'returning')\ncheck('trace drag-start then above-threshold-release', solve('resting', [('drag-start', N), ('above-threshold-release', N)], N), 'committing')\ncheck('trace drag-start then pointer-cancel', solve('resting', [('drag-start', N), ('pointer-cancel', N)], N), 'returning')\ncheck('trace below-threshold-release then snapback-finished', solve('dragging', [('below-threshold-release', N), ('snapback-finished', N)], N), 'resting')\ncheck('trace above-threshold-release then dismiss-accepted', solve('dragging', [('above-threshold-release', N), ('dismiss-accepted', N)], N), 'exit-animating')\ncheck('trace above-threshold-release then dismiss-rejected', solve('dragging', [('above-threshold-release', N), ('dismiss-rejected', N)], N), 'returning')\ncheck('trace above-threshold-release then second-pointer-down', solve('dragging', [('above-threshold-release', N), ('second-pointer-down', N)], N), 'committing')\ncheck('trace snapback-finished then drag-start', solve('returning', [('snapback-finished', N), ('drag-start', N)], N), 'dragging')\ncheck('trace dismiss-accepted then animation-finished', solve('committing', [('dismiss-accepted', N), ('animation-finished', N)], N), 'dismissed')\ncheck('trace dismiss-accepted then reduced-motion-enabled', solve('committing', [('dismiss-accepted', N), ('reduced-motion-enabled', N)], N), 'dismissed')\ncheck('trace dismiss-rejected then snapback-finished', solve('committing', [('dismiss-rejected', N), ('snapback-finished', N)], N), 'resting')\ncheck('trace pointer-cancel then snapback-finished', solve('dragging', [('pointer-cancel', N), ('snapback-finished', N)], N), 'resting')\ncheck('trace second-pointer-down then dismiss-accepted', solve('committing', [('second-pointer-down', N), ('dismiss-accepted', N)], N), 'exit-animating')\ncheck('trace second-pointer-down then dismiss-rejected', solve('committing', [('second-pointer-down', N), ('dismiss-rejected', N)], N), 'returning')\ncheck('trace second-pointer-down then second-pointer-down', solve('committing', [('second-pointer-down', N), ('second-pointer-down', N)], N), 'committing')\ncheck('domain state regression 1: offset', solve('dragging', [('above-threshold-release', N, {'offset': 39})], N, {}, 'offset'), {'phase': 'returning', 'value': 39})\ncheck('domain state regression 2: offset', solve('dragging', [('below-threshold-release', N, {'offset': -40})], N, {}, 'offset'), {'phase': 'committing', 'value': -40})\ncheck('domain state regression 3: offset', solve('dragging', [('above-threshold-release', N, {'pointer': 6, 'offset': 90})], N, {}, 'offset'), {'phase': 'dragging', 'value': 0})\ncheck('domain state regression 4: offset', solve('returning', [('snapback-finished', N, {})], N, {'offset': 25}, 'offset'), {'phase': 'resting', 'value': 0})\ncheck('domain state regression 5: removed', solve('exit-animating', [('reduced-motion-enabled', N, {})], N, {}, 'removed'), {'phase': 'dismissed', 'value': True})\ncheck('domain state regression 6: removed', solve('committing', [('dismiss-rejected', N, {})], N, {'offset': 50}, 'removed'), {'phase': 'returning', 'value': False})\ncheck('domain state regression 7: offset', solve('resting', [('drag-start', N, {}), ('above-threshold-release', N, {'offset': 39}), ('snapback-finished', N, {})], N, {}, 'offset'), {'phase': 'resting', 'value': 0})\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":"68ed9877dd1261f73a256868fed53c5b39b31097a897ea030720873f879c3cc3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(initial, events, generation, payload=None, observe=None):\n    table = {('resting', 'drag-start'): 'dragging', ('dragging', 'below-threshold-release'): 'returning', ('dragging', 'above-threshold-release'): 'committing', ('returning', 'snapback-finished'): 'resting', ('committing', 'dismiss-accepted'): 'exit-animating', ('committing', 'dismiss-rejected'): 'returning', ('exit-animating', 'animation-finished'): 'dismissed', ('dragging', 'pointer-cancel'): 'returning', ('exit-animating', 'reduced-motion-enabled'): 'dismissed', ('committing', 'second-pointer-down'): 'committing'}\n    data = json.loads(json.dumps({'offset': 0, 'threshold': 40, 'pointer': 7, 'removed': False})) if payload is None else {**json.loads(json.dumps({'offset': 0, 'threshold': 40, 'pointer': 7, 'removed': False})), **json.loads(json.dumps(payload))}\n    state = initial\n    for delivery in events:\n        event, event_generation = delivery[:2]\n        arg = delivery[2] if len(delivery) > 2 else {}\n        if event_generation == generation:\n            previous = state\n            if event in ('below-threshold-release','above-threshold-release','pointer-cancel') and arg.get('pointer',data['pointer']) != data['pointer']: event = 'unknown-event'\n            if event in ('below-threshold-release','above-threshold-release') and 'offset' in arg:\n                data['offset'] = arg['offset']\n                event = 'above-threshold-release' if abs(data['offset']) >= data['threshold'] else 'below-threshold-release'\n            state = table.get((state, event), state)\n            if state == 'resting': data['offset'] = 0\n            if state == 'dismissed': data['removed'] = True\n    return {'phase': state, 'value': data[observe]} if observe else state\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('resting / drag-start', solve('resting', [('drag-start', N)], N), 'dragging')\ncheck('dragging / below-threshold-release', solve('dragging', [('below-threshold-release', N)], N), 'returning')\ncheck('dragging / above-threshold-release', solve('dragging', [('above-threshold-release', N)], N), 'committing')\ncheck('returning / snapback-finished', solve('returning', [('snapback-finished', N)], N), 'resting')\ncheck('committing / dismiss-accepted', solve('committing', [('dismiss-accepted', N)], N), 'exit-animating')\ncheck('committing / dismiss-rejected', solve('committing', [('dismiss-rejected', N)], N), 'returning')\ncheck('exit-animating / animation-finished', solve('exit-animating', [('animation-finished', N)], N), 'dismissed')\ncheck('dragging / pointer-cancel', solve('dragging', [('pointer-cancel', N)], N), 'returning')\ncheck('exit-animating / reduced-motion-enabled', solve('exit-animating', [('reduced-motion-enabled', N)], N), 'dismissed')\ncheck('committing / second-pointer-down', solve('committing', [('second-pointer-down', N)], N), 'committing')\ncheck('older notification incarnation', solve('resting', [('drag-start', N - 1)], N), 'resting')\ncheck('future notification incarnation', solve('resting', [('drag-start', N + 1)], N), 'resting')\ncheck('unknown event is inert', solve('resting', [('unknown-event', N)], N), 'resting')\ncheck('empty delivery batch', solve('resting', [], N), 'resting')\ncheck('N stale deliveries before current delivery', solve('resting', [('drag-start', N - 1)] * N + [('drag-start', N)], N), 'dragging')\ncheck('trace drag-start then below-threshold-release', solve('resting', [('drag-start', N), ('below-threshold-release', N)], N), 'returning')\ncheck('trace drag-start then above-threshold-release', solve('resting', [('drag-start', N), ('above-threshold-release', N)], N), 'committing')\ncheck('trace drag-start then pointer-cancel', solve('resting', [('drag-start', N), ('pointer-cancel', N)], N), 'returning')\ncheck('trace below-threshold-release then snapback-finished', solve('dragging', [('below-threshold-release', N), ('snapback-finished', N)], N), 'resting')\ncheck('trace above-threshold-release then dismiss-accepted', solve('dragging', [('above-threshold-release', N), ('dismiss-accepted', N)], N), 'exit-animating')\ncheck('trace above-threshold-release then dismiss-rejected', solve('dragging', [('above-threshold-release', N), ('dismiss-rejected', N)], N), 'returning')\ncheck('trace above-threshold-release then second-pointer-down', solve('dragging', [('above-threshold-release', N), ('second-pointer-down', N)], N), 'committing')\ncheck('trace snapback-finished then drag-start', solve('returning', [('snapback-finished', N), ('drag-start', N)], N), 'dragging')\ncheck('trace dismiss-accepted then animation-finished', solve('committing', [('dismiss-accepted', N), ('animation-finished', N)], N), 'dismissed')\ncheck('trace dismiss-accepted then reduced-motion-enabled', solve('committing', [('dismiss-accepted', N), ('reduced-motion-enabled', N)], N), 'dismissed')\ncheck('trace dismiss-rejected then snapback-finished', solve('committing', [('dismiss-rejected', N), ('snapback-finished', N)], N), 'resting')\ncheck('trace pointer-cancel then snapback-finished', solve('dragging', [('pointer-cancel', N), ('snapback-finished', N)], N), 'resting')\ncheck('trace second-pointer-down then dismiss-accepted', solve('committing', [('second-pointer-down', N), ('dismiss-accepted', N)], N), 'exit-animating')\ncheck('trace second-pointer-down then dismiss-rejected', solve('committing', [('second-pointer-down', N), ('dismiss-rejected', N)], N), 'returning')\ncheck('trace second-pointer-down then second-pointer-down', solve('committing', [('second-pointer-down', N), ('second-pointer-down', N)], N), 'committing')\ncheck('domain state regression 1: offset', solve('dragging', [('above-threshold-release', N, {'offset': 39})], N, {}, 'offset'), {'phase': 'returning', 'value': 39})\ncheck('domain state regression 2: offset', solve('dragging', [('below-threshold-release', N, {'offset': -40})], N, {}, 'offset'), {'phase': 'committing', 'value': -40})\ncheck('domain state regression 3: offset', solve('dragging', [('above-threshold-release', N, {'pointer': 6, 'offset': 90})], N, {}, 'offset'), {'phase': 'dragging', 'value': 0})\ncheck('domain state regression 4: offset', solve('returning', [('snapback-finished', N, {})], N, {'offset': 25}, 'offset'), {'phase': 'resting', 'value': 0})\ncheck('domain state regression 5: removed', solve('exit-animating', [('reduced-motion-enabled', N, {})], N, {}, 'removed'), {'phase': 'dismissed', 'value': True})\ncheck('domain state regression 6: removed', solve('committing', [('dismiss-rejected', N, {})], N, {'offset': 50}, 'removed'), {'phase': 'returning', 'value': False})\ncheck('domain state regression 7: offset', solve('resting', [('drag-start', N, {}), ('above-threshold-release', N, {'offset': 39}), ('snapback-finished', N, {})], N, {}, 'offset'), {'phase': 'resting', 'value': 0})\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":"Stipulated single-notification state and policy model only. Event delivery and acknowledgements are explicit test inputs. No DOM, accessibility announcements, live timers, networking, actual rendering, or production-platform conformance is simulated. 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-notification-interfaces-swipe-01","generated_at":"2026-09-29T14:42:32.428224+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Visual notification lifecycle ordering can leave an inbox or toast showing the wrong actionable state even when transport succeeds.","repair":"Commit the resting / drag-start transition to dragging; preserve the other explicitly stipulated transitions.","root_cause":"Pointer movement begins dismissal before any threshold decision.","sha256":"88e6df48ce63b99233e58cefa6f49c020627dc3d5a0869f653f9caabc70a349d","title":"Swipe-to-dismiss notification feedback: drag-start from resting · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.674,"exit_code":1,"observations":[{"actual":"returning","check":"resting / drag-start","expected":"dragging","passed":false},{"actual":"returning","check":"dragging / below-threshold-release","expected":"returning","passed":true},{"actual":"committing","check":"dragging / above-threshold-release","expected":"committing","passed":true},{"actual":"resting","check":"returning / snapback-finished","expected":"resting","passed":true},{"actual":"exit-animating","check":"committing / dismiss-accepted","expected":"exit-animating","passed":true},{"actual":"returning","check":"committing / dismiss-rejected","expected":"returning","passed":true},{"actual":"dismissed","check":"exit-animating / animation-finished","expected":"dismissed","passed":true},{"actual":"returning","check":"dragging / pointer-cancel","expected":"returning","passed":true},{"actual":"dismissed","check":"exit-animating / reduced-motion-enabled","expected":"dismissed","passed":true},{"actual":"committing","check":"committing / second-pointer-down","expected":"committing","passed":true},{"actual":"resting","check":"older notification incarnation","expected":"resting","passed":true},{"actual":"resting","check":"future notification incarnation","expected":"resting","passed":true},{"actual":"resting","check":"unknown event is inert","expected":"resting","passed":true},{"actual":"resting","check":"empty delivery batch","expected":"resting","passed":true},{"actual":"returning","check":"N stale deliveries before current delivery","expected":"dragging","passed":false},{"actual":"returning","check":"trace drag-start then below-threshold-release","expected":"returning","passed":true},{"actual":"returning","check":"trace drag-start then above-threshold-release","expected":"committing","passed":false},{"actual":"returning","check":"trace drag-start then pointer-cancel","expected":"returning","passed":true},{"actual":"resting","check":"trace below-threshold-release then snapback-finished","expected":"resting","passed":true},{"actual":"exit-animating","check":"trace above-threshold-release then dismiss-accepted","expected":"exit-animating","passed":true},{"actual":"returning","check":"trace above-threshold-release then dismiss-rejected","expected":"returning","passed":true},{"actual":"committing","check":"trace above-threshold-release then second-pointer-down","expected":"committing","passed":true},{"actual":"returning","check":"trace snapback-finished then drag-start","expected":"dragging","passed":false},{"actual":"dismissed","check":"trace dismiss-accepted then animation-finished","expected":"dismissed","passed":true},{"actual":"dismissed","check":"trace dismiss-accepted then reduced-motion-enabled","expected":"dismissed","passed":true},{"actual":"resting","check":"trace dismiss-rejected then snapback-finished","expected":"resting","passed":true},{"actual":"resting","check":"trace pointer-cancel then snapback-finished","expected":"resting","passed":true},{"actual":"exit-animating","check":"trace second-pointer-down then dismiss-accepted","expected":"exit-animating","passed":true},{"actual":"returning","check":"trace second-pointer-down then dismiss-rejected","expected":"returning","passed":true},{"actual":"committing","check":"trace second-pointer-down then second-pointer-down","expected":"committing","passed":true},{"actual":{"phase":"returning","value":39},"check":"domain state regression 1: offset","expected":{"phase":"returning","value":39},"passed":true},{"actual":{"phase":"committing","value":-40},"check":"domain state regression 2: offset","expected":{"phase":"committing","value":-40},"passed":true},{"actual":{"phase":"dragging","value":0},"check":"domain state regression 3: offset","expected":{"phase":"dragging","value":0},"passed":true},{"actual":{"phase":"resting","value":0},"check":"domain state regression 4: offset","expected":{"phase":"resting","value":0},"passed":true},{"actual":{"phase":"dismissed","value":true},"check":"domain state regression 5: removed","expected":{"phase":"dismissed","value":true},"passed":true},{"actual":{"phase":"returning","value":false},"check":"domain state regression 6: removed","expected":{"phase":"returning","value":false},"passed":true},{"actual":{"phase":"resting","value":0},"check":"domain state regression 7: offset","expected":{"phase":"resting","value":0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"resting / drag-start\", \"actual\": \"returning\", \"expected\": \"dragging\", \"passed\": false}, {\"check\": \"dragging / below-threshold-release\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"dragging / above-threshold-release\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"returning / snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"committing / dismiss-accepted\", \"actual\": \"exit-animating\", \"expected\": \"exit-animating\", \"passed\": true}, {\"check\": \"committing / dismiss-rejected\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"exit-animating / animation-finished\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"dragging / pointer-cancel\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"exit-animating / reduced-motion-enabled\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"committing / second-pointer-down\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"returning\", \"expected\": \"dragging\", \"passed\": false}, {\"check\": \"trace drag-start then below-threshold-release\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace drag-start then above-threshold-release\", \"actual\": \"returning\", \"expected\": \"committing\", \"passed\": false}, {\"check\": \"trace drag-start then pointer-cancel\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace below-threshold-release then snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"trace above-threshold-release then dismiss-accepted\", \"actual\": \"exit-animating\", \"expected\": \"exit-animating\", \"passed\": true}, {\"check\": \"trace above-threshold-release then dismiss-rejected\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace above-threshold-release then second-pointer-down\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"trace snapback-finished then drag-start\", \"actual\": \"returning\", \"expected\": \"dragging\", \"passed\": false}, {\"check\": \"trace dismiss-accepted then animation-finished\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"trace dismiss-accepted then reduced-motion-enabled\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"trace dismiss-rejected then snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"trace pointer-cancel then snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"trace second-pointer-down then dismiss-accepted\", \"actual\": \"exit-animating\", \"expected\": \"exit-animating\", \"passed\": true}, {\"check\": \"trace second-pointer-down then dismiss-rejected\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace second-pointer-down then second-pointer-down\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"domain state regression 1: offset\", \"actual\": {\"phase\": \"returning\", \"value\": 39}, \"expected\": {\"phase\": \"returning\", \"value\": 39}, \"passed\": true}, {\"check\": \"domain state regression 2: offset\", \"actual\": {\"phase\": \"committing\", \"value\": -40}, \"expected\": {\"phase\": \"committing\", \"value\": -40}, \"passed\": true}, {\"check\": \"domain state regression 3: offset\", \"actual\": {\"phase\": \"dragging\", \"value\": 0}, \"expected\": {\"phase\": \"dragging\", \"value\": 0}, \"passed\": true}, {\"check\": \"domain state regression 4: offset\", \"actual\": {\"phase\": \"resting\", \"value\": 0}, \"expected\": {\"phase\": \"resting\", \"value\": 0}, \"passed\": true}, {\"check\": \"domain state regression 5: removed\", \"actual\": {\"phase\": \"dismissed\", \"value\": true}, \"expected\": {\"phase\": \"dismissed\", \"value\": true}, \"passed\": true}, {\"check\": \"domain state regression 6: removed\", \"actual\": {\"phase\": \"returning\", \"value\": false}, \"expected\": {\"phase\": \"returning\", \"value\": false}, \"passed\": true}, {\"check\": \"domain state regression 7: offset\", \"actual\": {\"phase\": \"resting\", \"value\": 0}, \"expected\": {\"phase\": \"resting\", \"value\": 0}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.979,"exit_code":1,"observations":[{"actual":"dismissed","check":"resting / drag-start","expected":"dragging","passed":false},{"actual":"returning","check":"dragging / below-threshold-release","expected":"returning","passed":true},{"actual":"committing","check":"dragging / above-threshold-release","expected":"committing","passed":true},{"actual":"resting","check":"returning / snapback-finished","expected":"resting","passed":true},{"actual":"exit-animating","check":"committing / dismiss-accepted","expected":"exit-animating","passed":true},{"actual":"returning","check":"committing / dismiss-rejected","expected":"returning","passed":true},{"actual":"dismissed","check":"exit-animating / animation-finished","expected":"dismissed","passed":true},{"actual":"returning","check":"dragging / pointer-cancel","expected":"returning","passed":true},{"actual":"dismissed","check":"exit-animating / reduced-motion-enabled","expected":"dismissed","passed":true},{"actual":"committing","check":"committing / second-pointer-down","expected":"committing","passed":true},{"actual":"resting","check":"older notification incarnation","expected":"resting","passed":true},{"actual":"resting","check":"future notification incarnation","expected":"resting","passed":true},{"actual":"resting","check":"unknown event is inert","expected":"resting","passed":true},{"actual":"resting","check":"empty delivery batch","expected":"resting","passed":true},{"actual":"dismissed","check":"N stale deliveries before current delivery","expected":"dragging","passed":false},{"actual":"dismissed","check":"trace drag-start then below-threshold-release","expected":"returning","passed":false},{"actual":"dismissed","check":"trace drag-start then above-threshold-release","expected":"committing","passed":false},{"actual":"dismissed","check":"trace drag-start then pointer-cancel","expected":"returning","passed":false},{"actual":"resting","check":"trace below-threshold-release then snapback-finished","expected":"resting","passed":true},{"actual":"exit-animating","check":"trace above-threshold-release then dismiss-accepted","expected":"exit-animating","passed":true},{"actual":"returning","check":"trace above-threshold-release then dismiss-rejected","expected":"returning","passed":true},{"actual":"committing","check":"trace above-threshold-release then second-pointer-down","expected":"committing","passed":true},{"actual":"dismissed","check":"trace snapback-finished then drag-start","expected":"dragging","passed":false},{"actual":"dismissed","check":"trace dismiss-accepted then animation-finished","expected":"dismissed","passed":true},{"actual":"dismissed","check":"trace dismiss-accepted then reduced-motion-enabled","expected":"dismissed","passed":true},{"actual":"resting","check":"trace dismiss-rejected then snapback-finished","expected":"resting","passed":true},{"actual":"resting","check":"trace pointer-cancel then snapback-finished","expected":"resting","passed":true},{"actual":"exit-animating","check":"trace second-pointer-down then dismiss-accepted","expected":"exit-animating","passed":true},{"actual":"returning","check":"trace second-pointer-down then dismiss-rejected","expected":"returning","passed":true},{"actual":"committing","check":"trace second-pointer-down then second-pointer-down","expected":"committing","passed":true},{"actual":{"phase":"returning","value":39},"check":"domain state regression 1: offset","expected":{"phase":"returning","value":39},"passed":true},{"actual":{"phase":"committing","value":-40},"check":"domain state regression 2: offset","expected":{"phase":"committing","value":-40},"passed":true},{"actual":{"phase":"dragging","value":0},"check":"domain state regression 3: offset","expected":{"phase":"dragging","value":0},"passed":true},{"actual":{"phase":"resting","value":0},"check":"domain state regression 4: offset","expected":{"phase":"resting","value":0},"passed":true},{"actual":{"phase":"dismissed","value":true},"check":"domain state regression 5: removed","expected":{"phase":"dismissed","value":true},"passed":true},{"actual":{"phase":"returning","value":false},"check":"domain state regression 6: removed","expected":{"phase":"returning","value":false},"passed":true},{"actual":{"phase":"dismissed","value":39},"check":"domain state regression 7: offset","expected":{"phase":"resting","value":0},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"resting / drag-start\", \"actual\": \"dismissed\", \"expected\": \"dragging\", \"passed\": false}, {\"check\": \"dragging / below-threshold-release\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"dragging / above-threshold-release\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"returning / snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"committing / dismiss-accepted\", \"actual\": \"exit-animating\", \"expected\": \"exit-animating\", \"passed\": true}, {\"check\": \"committing / dismiss-rejected\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"exit-animating / animation-finished\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"dragging / pointer-cancel\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"exit-animating / reduced-motion-enabled\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"committing / second-pointer-down\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"dismissed\", \"expected\": \"dragging\", \"passed\": false}, {\"check\": \"trace drag-start then below-threshold-release\", \"actual\": \"dismissed\", \"expected\": \"returning\", \"passed\": false}, {\"check\": \"trace drag-start then above-threshold-release\", \"actual\": \"dismissed\", \"expected\": \"committing\", \"passed\": false}, {\"check\": \"trace drag-start then pointer-cancel\", \"actual\": \"dismissed\", \"expected\": \"returning\", \"passed\": false}, {\"check\": \"trace below-threshold-release then snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"trace above-threshold-release then dismiss-accepted\", \"actual\": \"exit-animating\", \"expected\": \"exit-animating\", \"passed\": true}, {\"check\": \"trace above-threshold-release then dismiss-rejected\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace above-threshold-release then second-pointer-down\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"trace snapback-finished then drag-start\", \"actual\": \"dismissed\", \"expected\": \"dragging\", \"passed\": false}, {\"check\": \"trace dismiss-accepted then animation-finished\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"trace dismiss-accepted then reduced-motion-enabled\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"trace dismiss-rejected then snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"trace pointer-cancel then snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"trace second-pointer-down then dismiss-accepted\", \"actual\": \"exit-animating\", \"expected\": \"exit-animating\", \"passed\": true}, {\"check\": \"trace second-pointer-down then dismiss-rejected\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace second-pointer-down then second-pointer-down\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"domain state regression 1: offset\", \"actual\": {\"phase\": \"returning\", \"value\": 39}, \"expected\": {\"phase\": \"returning\", \"value\": 39}, \"passed\": true}, {\"check\": \"domain state regression 2: offset\", \"actual\": {\"phase\": \"committing\", \"value\": -40}, \"expected\": {\"phase\": \"committing\", \"value\": -40}, \"passed\": true}, {\"check\": \"domain state regression 3: offset\", \"actual\": {\"phase\": \"dragging\", \"value\": 0}, \"expected\": {\"phase\": \"dragging\", \"value\": 0}, \"passed\": true}, {\"check\": \"domain state regression 4: offset\", \"actual\": {\"phase\": \"resting\", \"value\": 0}, \"expected\": {\"phase\": \"resting\", \"value\": 0}, \"passed\": true}, {\"check\": \"domain state regression 5: removed\", \"actual\": {\"phase\": \"dismissed\", \"value\": true}, \"expected\": {\"phase\": \"dismissed\", \"value\": true}, \"passed\": true}, {\"check\": \"domain state regression 6: removed\", \"actual\": {\"phase\": \"returning\", \"value\": false}, \"expected\": {\"phase\": \"returning\", \"value\": false}, \"passed\": true}, {\"check\": \"domain state regression 7: offset\", \"actual\": {\"phase\": \"dismissed\", \"value\": 39}, \"expected\": {\"phase\": \"resting\", \"value\": 0}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.436,"exit_code":0,"observations":[{"actual":"dragging","check":"resting / drag-start","expected":"dragging","passed":true},{"actual":"returning","check":"dragging / below-threshold-release","expected":"returning","passed":true},{"actual":"committing","check":"dragging / above-threshold-release","expected":"committing","passed":true},{"actual":"resting","check":"returning / snapback-finished","expected":"resting","passed":true},{"actual":"exit-animating","check":"committing / dismiss-accepted","expected":"exit-animating","passed":true},{"actual":"returning","check":"committing / dismiss-rejected","expected":"returning","passed":true},{"actual":"dismissed","check":"exit-animating / animation-finished","expected":"dismissed","passed":true},{"actual":"returning","check":"dragging / pointer-cancel","expected":"returning","passed":true},{"actual":"dismissed","check":"exit-animating / reduced-motion-enabled","expected":"dismissed","passed":true},{"actual":"committing","check":"committing / second-pointer-down","expected":"committing","passed":true},{"actual":"resting","check":"older notification incarnation","expected":"resting","passed":true},{"actual":"resting","check":"future notification incarnation","expected":"resting","passed":true},{"actual":"resting","check":"unknown event is inert","expected":"resting","passed":true},{"actual":"resting","check":"empty delivery batch","expected":"resting","passed":true},{"actual":"dragging","check":"N stale deliveries before current delivery","expected":"dragging","passed":true},{"actual":"returning","check":"trace drag-start then below-threshold-release","expected":"returning","passed":true},{"actual":"committing","check":"trace drag-start then above-threshold-release","expected":"committing","passed":true},{"actual":"returning","check":"trace drag-start then pointer-cancel","expected":"returning","passed":true},{"actual":"resting","check":"trace below-threshold-release then snapback-finished","expected":"resting","passed":true},{"actual":"exit-animating","check":"trace above-threshold-release then dismiss-accepted","expected":"exit-animating","passed":true},{"actual":"returning","check":"trace above-threshold-release then dismiss-rejected","expected":"returning","passed":true},{"actual":"committing","check":"trace above-threshold-release then second-pointer-down","expected":"committing","passed":true},{"actual":"dragging","check":"trace snapback-finished then drag-start","expected":"dragging","passed":true},{"actual":"dismissed","check":"trace dismiss-accepted then animation-finished","expected":"dismissed","passed":true},{"actual":"dismissed","check":"trace dismiss-accepted then reduced-motion-enabled","expected":"dismissed","passed":true},{"actual":"resting","check":"trace dismiss-rejected then snapback-finished","expected":"resting","passed":true},{"actual":"resting","check":"trace pointer-cancel then snapback-finished","expected":"resting","passed":true},{"actual":"exit-animating","check":"trace second-pointer-down then dismiss-accepted","expected":"exit-animating","passed":true},{"actual":"returning","check":"trace second-pointer-down then dismiss-rejected","expected":"returning","passed":true},{"actual":"committing","check":"trace second-pointer-down then second-pointer-down","expected":"committing","passed":true},{"actual":{"phase":"returning","value":39},"check":"domain state regression 1: offset","expected":{"phase":"returning","value":39},"passed":true},{"actual":{"phase":"committing","value":-40},"check":"domain state regression 2: offset","expected":{"phase":"committing","value":-40},"passed":true},{"actual":{"phase":"dragging","value":0},"check":"domain state regression 3: offset","expected":{"phase":"dragging","value":0},"passed":true},{"actual":{"phase":"resting","value":0},"check":"domain state regression 4: offset","expected":{"phase":"resting","value":0},"passed":true},{"actual":{"phase":"dismissed","value":true},"check":"domain state regression 5: removed","expected":{"phase":"dismissed","value":true},"passed":true},{"actual":{"phase":"returning","value":false},"check":"domain state regression 6: removed","expected":{"phase":"returning","value":false},"passed":true},{"actual":{"phase":"resting","value":0},"check":"domain state regression 7: offset","expected":{"phase":"resting","value":0},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"resting / drag-start\", \"actual\": \"dragging\", \"expected\": \"dragging\", \"passed\": true}, {\"check\": \"dragging / below-threshold-release\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"dragging / above-threshold-release\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"returning / snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"committing / dismiss-accepted\", \"actual\": \"exit-animating\", \"expected\": \"exit-animating\", \"passed\": true}, {\"check\": \"committing / dismiss-rejected\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"exit-animating / animation-finished\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"dragging / pointer-cancel\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"exit-animating / reduced-motion-enabled\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"committing / second-pointer-down\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"dragging\", \"expected\": \"dragging\", \"passed\": true}, {\"check\": \"trace drag-start then below-threshold-release\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace drag-start then above-threshold-release\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"trace drag-start then pointer-cancel\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace below-threshold-release then snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"trace above-threshold-release then dismiss-accepted\", \"actual\": \"exit-animating\", \"expected\": \"exit-animating\", \"passed\": true}, {\"check\": \"trace above-threshold-release then dismiss-rejected\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace above-threshold-release then second-pointer-down\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"trace snapback-finished then drag-start\", \"actual\": \"dragging\", \"expected\": \"dragging\", \"passed\": true}, {\"check\": \"trace dismiss-accepted then animation-finished\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"trace dismiss-accepted then reduced-motion-enabled\", \"actual\": \"dismissed\", \"expected\": \"dismissed\", \"passed\": true}, {\"check\": \"trace dismiss-rejected then snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"trace pointer-cancel then snapback-finished\", \"actual\": \"resting\", \"expected\": \"resting\", \"passed\": true}, {\"check\": \"trace second-pointer-down then dismiss-accepted\", \"actual\": \"exit-animating\", \"expected\": \"exit-animating\", \"passed\": true}, {\"check\": \"trace second-pointer-down then dismiss-rejected\", \"actual\": \"returning\", \"expected\": \"returning\", \"passed\": true}, {\"check\": \"trace second-pointer-down then second-pointer-down\", \"actual\": \"committing\", \"expected\": \"committing\", \"passed\": true}, {\"check\": \"domain state regression 1: offset\", \"actual\": {\"phase\": \"returning\", \"value\": 39}, \"expected\": {\"phase\": \"returning\", \"value\": 39}, \"passed\": true}, {\"check\": \"domain state regression 2: offset\", \"actual\": {\"phase\": \"committing\", \"value\": -40}, \"expected\": {\"phase\": \"committing\", \"value\": -40}, \"passed\": true}, {\"check\": \"domain state regression 3: offset\", \"actual\": {\"phase\": \"dragging\", \"value\": 0}, \"expected\": {\"phase\": \"dragging\", \"value\": 0}, \"passed\": true}, {\"check\": \"domain state regression 4: offset\", \"actual\": {\"phase\": \"resting\", \"value\": 0}, \"expected\": {\"phase\": \"resting\", \"value\": 0}, \"passed\": true}, {\"check\": \"domain state regression 5: removed\", \"actual\": {\"phase\": \"dismissed\", \"value\": true}, \"expected\": {\"phase\": \"dismissed\", \"value\": true}, \"passed\": true}, {\"check\": \"domain state regression 6: removed\", \"actual\": {\"phase\": \"returning\", \"value\": false}, \"expected\": {\"phase\": \"returning\", \"value\": false}, \"passed\": true}, {\"check\": \"domain state regression 7: offset\", \"actual\": {\"phase\": \"resting\", \"value\": 0}, \"expected\": {\"phase\": \"resting\", \"value\": 0}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}