{"abstract":"The unpin-failure event leaves a notification in unpinned instead of unpin-error.","category":"Notification interfaces","checks":35,"contract":"Inbox notification pin persistence is a bounded visual-notification workflow with mutable policy state {'pinned': ['other'], 'item': 'n', 'capacity': 3, 'expired': False, 'retained': True}. Its default transition relation is {('unpinned', 'pin-click'): 'pin-pending', ('pin-pending', 'pin-success'): 'pinned', ('pin-pending', 'pin-failure'): 'pin-error', ('pinned', 'unpin-click'): 'unpin-pending', ('unpin-pending', 'unpin-success'): 'unpinned', ('unpin-pending', 'unpin-failure'): 'unpin-error', ('pin-error', 'cancel-pin-intent'): 'unpinned', ('unpin-error', 'cancel-unpin-intent'): 'pinned', ('pinned', 'notification-expires'): 'expired-pinned', ('expired-pinned', 'unpin-expired'): 'gone'}; 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-pinning","failed_approach":"Silent rollback omits the actionable unpin failure.","family":"s3-notification-interfaces-pinning-06","id":"FA-34816","implementations":{"attempt":{"sha256":"2c309004252031a2c43ae8bfe0fa01437b11d069951114a3d6236c4bad9f979a","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 = {('unpinned', 'pin-click'): 'pin-pending', ('pin-pending', 'pin-success'): 'pinned', ('pin-pending', 'pin-failure'): 'pin-error', ('pinned', 'unpin-click'): 'unpin-pending', ('unpin-pending', 'unpin-success'): 'unpinned', ('unpin-pending', 'unpin-failure'): 'pinned', ('pin-error', 'cancel-pin-intent'): 'unpinned', ('unpin-error', 'cancel-unpin-intent'): 'pinned', ('pinned', 'notification-expires'): 'expired-pinned', ('expired-pinned', 'unpin-expired'): 'gone'}\n    data = json.loads(json.dumps({'pinned': ['other'], 'item': 'n', 'capacity': 3, 'expired': False, 'retained': True})) if payload is None else {**json.loads(json.dumps({'pinned': ['other'], 'item': 'n', 'capacity': 3, 'expired': False, 'retained': True})), **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 == 'pin-click' and data['item'] not in data['pinned'] and len(data['pinned']) >= data['capacity']: event = 'unknown-event'\n            if event == 'notification-expires': data['expired'] = True\n            state = table.get((state, event), state)\n            if state in ('pinned','expired-pinned') and data['item'] not in data['pinned']: data['pinned'].append(data['item'])\n            if state in ('unpinned','gone'): data['pinned'] = [x for x in data['pinned'] if x != data['item']]\n            if state == 'gone': data['retained'] = False\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('unpinned / pin-click', solve('unpinned', [('pin-click', N)], N), 'pin-pending')\ncheck('pin-pending / pin-success', solve('pin-pending', [('pin-success', N)], N), 'pinned')\ncheck('pin-pending / pin-failure', solve('pin-pending', [('pin-failure', N)], N), 'pin-error')\ncheck('pinned / unpin-click', solve('pinned', [('unpin-click', N)], N), 'unpin-pending')\ncheck('unpin-pending / unpin-success', solve('unpin-pending', [('unpin-success', N)], N), 'unpinned')\ncheck('unpin-pending / unpin-failure', solve('unpin-pending', [('unpin-failure', N)], N), 'unpin-error')\ncheck('pin-error / cancel-pin-intent', solve('pin-error', [('cancel-pin-intent', N)], N), 'unpinned')\ncheck('unpin-error / cancel-unpin-intent', solve('unpin-error', [('cancel-unpin-intent', N)], N), 'pinned')\ncheck('pinned / notification-expires', solve('pinned', [('notification-expires', N)], N), 'expired-pinned')\ncheck('expired-pinned / unpin-expired', solve('expired-pinned', [('unpin-expired', N)], N), 'gone')\ncheck('older notification incarnation', solve('unpinned', [('pin-click', N - 1)], N), 'unpinned')\ncheck('future notification incarnation', solve('unpinned', [('pin-click', N + 1)], N), 'unpinned')\ncheck('unknown event is inert', solve('unpinned', [('unknown-event', N)], N), 'unpinned')\ncheck('empty delivery batch', solve('unpinned', [], N), 'unpinned')\ncheck('N stale deliveries before current delivery', solve('unpinned', [('pin-click', N - 1)] * N + [('pin-click', N)], N), 'pin-pending')\ncheck('trace pin-click then pin-success', solve('unpinned', [('pin-click', N), ('pin-success', N)], N), 'pinned')\ncheck('trace pin-click then pin-failure', solve('unpinned', [('pin-click', N), ('pin-failure', N)], N), 'pin-error')\ncheck('trace pin-success then unpin-click', solve('pin-pending', [('pin-success', N), ('unpin-click', N)], N), 'unpin-pending')\ncheck('trace pin-success then notification-expires', solve('pin-pending', [('pin-success', N), ('notification-expires', N)], N), 'expired-pinned')\ncheck('trace pin-failure then cancel-pin-intent', solve('pin-pending', [('pin-failure', N), ('cancel-pin-intent', N)], N), 'unpinned')\ncheck('trace unpin-click then unpin-success', solve('pinned', [('unpin-click', N), ('unpin-success', N)], N), 'unpinned')\ncheck('trace unpin-click then unpin-failure', solve('pinned', [('unpin-click', N), ('unpin-failure', N)], N), 'unpin-error')\ncheck('trace unpin-success then pin-click', solve('unpin-pending', [('unpin-success', N), ('pin-click', N)], N), 'pin-pending')\ncheck('trace unpin-failure then cancel-unpin-intent', solve('unpin-pending', [('unpin-failure', N), ('cancel-unpin-intent', N)], N), 'pinned')\ncheck('trace cancel-pin-intent then pin-click', solve('pin-error', [('cancel-pin-intent', N), ('pin-click', N)], N), 'pin-pending')\ncheck('trace cancel-unpin-intent then unpin-click', solve('unpin-error', [('cancel-unpin-intent', N), ('unpin-click', N)], N), 'unpin-pending')\ncheck('trace cancel-unpin-intent then notification-expires', solve('unpin-error', [('cancel-unpin-intent', N), ('notification-expires', N)], N), 'expired-pinned')\ncheck('trace notification-expires then unpin-expired', solve('pinned', [('notification-expires', N), ('unpin-expired', N)], N), 'gone')\ncheck('domain state regression 1: pinned', solve('unpinned', [('pin-click', N, {})], N, {'capacity': 1}, 'pinned'), {'phase': 'unpinned', 'value': ['other']})\ncheck('domain state regression 2: pinned', solve('pin-pending', [('pin-success', N, {})], N, {}, 'pinned'), {'phase': 'pinned', 'value': ['other', 'n']})\ncheck('domain state regression 3: pinned', solve('unpin-pending', [('unpin-success', N, {})], N, {'pinned': ['n', 'other']}, 'pinned'), {'phase': 'unpinned', 'value': ['other']})\ncheck('domain state regression 4: retained', solve('pinned', [('notification-expires', N, {})], N, {'pinned': ['n']}, 'retained'), {'phase': 'expired-pinned', 'value': True})\ncheck('domain state regression 5: pinned', solve('expired-pinned', [('unpin-expired', N, {})], N, {'pinned': ['n', 'other'], 'expired': True}, 'pinned'), {'phase': 'gone', 'value': ['other']})\ncheck('domain state regression 6: retained', solve('expired-pinned', [('unpin-expired', N, {})], N, {'pinned': ['n'], 'expired': True}, 'retained'), {'phase': 'gone', 'value': False})\ncheck('domain state regression 7: pinned', solve('unpinned', [('pin-click', N, {}), ('pin-success', N, {}), ('notification-expires', N, {}), ('unpin-expired', N, {})], N, {}, 'pinned'), {'phase': 'gone', 'value': ['other']})\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":"c23f65b7b136e91e2f34be15add16dd62ebe80f7a756fc5b39f53ba9ae850219","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 = {('unpinned', 'pin-click'): 'pin-pending', ('pin-pending', 'pin-success'): 'pinned', ('pin-pending', 'pin-failure'): 'pin-error', ('pinned', 'unpin-click'): 'unpin-pending', ('unpin-pending', 'unpin-success'): 'unpinned', ('unpin-pending', 'unpin-failure'): 'unpinned', ('pin-error', 'cancel-pin-intent'): 'unpinned', ('unpin-error', 'cancel-unpin-intent'): 'pinned', ('pinned', 'notification-expires'): 'expired-pinned', ('expired-pinned', 'unpin-expired'): 'gone'}\n    data = json.loads(json.dumps({'pinned': ['other'], 'item': 'n', 'capacity': 3, 'expired': False, 'retained': True})) if payload is None else {**json.loads(json.dumps({'pinned': ['other'], 'item': 'n', 'capacity': 3, 'expired': False, 'retained': True})), **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 == 'pin-click' and data['item'] not in data['pinned'] and len(data['pinned']) >= data['capacity']: event = 'unknown-event'\n            if event == 'notification-expires': data['expired'] = True\n            state = table.get((state, event), state)\n            if state in ('pinned','expired-pinned') and data['item'] not in data['pinned']: data['pinned'].append(data['item'])\n            if state in ('unpinned','gone'): data['pinned'] = [x for x in data['pinned'] if x != data['item']]\n            if state == 'gone': data['retained'] = False\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('unpinned / pin-click', solve('unpinned', [('pin-click', N)], N), 'pin-pending')\ncheck('pin-pending / pin-success', solve('pin-pending', [('pin-success', N)], N), 'pinned')\ncheck('pin-pending / pin-failure', solve('pin-pending', [('pin-failure', N)], N), 'pin-error')\ncheck('pinned / unpin-click', solve('pinned', [('unpin-click', N)], N), 'unpin-pending')\ncheck('unpin-pending / unpin-success', solve('unpin-pending', [('unpin-success', N)], N), 'unpinned')\ncheck('unpin-pending / unpin-failure', solve('unpin-pending', [('unpin-failure', N)], N), 'unpin-error')\ncheck('pin-error / cancel-pin-intent', solve('pin-error', [('cancel-pin-intent', N)], N), 'unpinned')\ncheck('unpin-error / cancel-unpin-intent', solve('unpin-error', [('cancel-unpin-intent', N)], N), 'pinned')\ncheck('pinned / notification-expires', solve('pinned', [('notification-expires', N)], N), 'expired-pinned')\ncheck('expired-pinned / unpin-expired', solve('expired-pinned', [('unpin-expired', N)], N), 'gone')\ncheck('older notification incarnation', solve('unpinned', [('pin-click', N - 1)], N), 'unpinned')\ncheck('future notification incarnation', solve('unpinned', [('pin-click', N + 1)], N), 'unpinned')\ncheck('unknown event is inert', solve('unpinned', [('unknown-event', N)], N), 'unpinned')\ncheck('empty delivery batch', solve('unpinned', [], N), 'unpinned')\ncheck('N stale deliveries before current delivery', solve('unpinned', [('pin-click', N - 1)] * N + [('pin-click', N)], N), 'pin-pending')\ncheck('trace pin-click then pin-success', solve('unpinned', [('pin-click', N), ('pin-success', N)], N), 'pinned')\ncheck('trace pin-click then pin-failure', solve('unpinned', [('pin-click', N), ('pin-failure', N)], N), 'pin-error')\ncheck('trace pin-success then unpin-click', solve('pin-pending', [('pin-success', N), ('unpin-click', N)], N), 'unpin-pending')\ncheck('trace pin-success then notification-expires', solve('pin-pending', [('pin-success', N), ('notification-expires', N)], N), 'expired-pinned')\ncheck('trace pin-failure then cancel-pin-intent', solve('pin-pending', [('pin-failure', N), ('cancel-pin-intent', N)], N), 'unpinned')\ncheck('trace unpin-click then unpin-success', solve('pinned', [('unpin-click', N), ('unpin-success', N)], N), 'unpinned')\ncheck('trace unpin-click then unpin-failure', solve('pinned', [('unpin-click', N), ('unpin-failure', N)], N), 'unpin-error')\ncheck('trace unpin-success then pin-click', solve('unpin-pending', [('unpin-success', N), ('pin-click', N)], N), 'pin-pending')\ncheck('trace unpin-failure then cancel-unpin-intent', solve('unpin-pending', [('unpin-failure', N), ('cancel-unpin-intent', N)], N), 'pinned')\ncheck('trace cancel-pin-intent then pin-click', solve('pin-error', [('cancel-pin-intent', N), ('pin-click', N)], N), 'pin-pending')\ncheck('trace cancel-unpin-intent then unpin-click', solve('unpin-error', [('cancel-unpin-intent', N), ('unpin-click', N)], N), 'unpin-pending')\ncheck('trace cancel-unpin-intent then notification-expires', solve('unpin-error', [('cancel-unpin-intent', N), ('notification-expires', N)], N), 'expired-pinned')\ncheck('trace notification-expires then unpin-expired', solve('pinned', [('notification-expires', N), ('unpin-expired', N)], N), 'gone')\ncheck('domain state regression 1: pinned', solve('unpinned', [('pin-click', N, {})], N, {'capacity': 1}, 'pinned'), {'phase': 'unpinned', 'value': ['other']})\ncheck('domain state regression 2: pinned', solve('pin-pending', [('pin-success', N, {})], N, {}, 'pinned'), {'phase': 'pinned', 'value': ['other', 'n']})\ncheck('domain state regression 3: pinned', solve('unpin-pending', [('unpin-success', N, {})], N, {'pinned': ['n', 'other']}, 'pinned'), {'phase': 'unpinned', 'value': ['other']})\ncheck('domain state regression 4: retained', solve('pinned', [('notification-expires', N, {})], N, {'pinned': ['n']}, 'retained'), {'phase': 'expired-pinned', 'value': True})\ncheck('domain state regression 5: pinned', solve('expired-pinned', [('unpin-expired', N, {})], N, {'pinned': ['n', 'other'], 'expired': True}, 'pinned'), {'phase': 'gone', 'value': ['other']})\ncheck('domain state regression 6: retained', solve('expired-pinned', [('unpin-expired', N, {})], N, {'pinned': ['n'], 'expired': True}, 'retained'), {'phase': 'gone', 'value': False})\ncheck('domain state regression 7: pinned', solve('unpinned', [('pin-click', N, {}), ('pin-success', N, {}), ('notification-expires', N, {}), ('unpin-expired', N, {})], N, {}, 'pinned'), {'phase': 'gone', 'value': ['other']})\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":"e6c097a72a3eb4cc0b0594f693c940370d56e15871231e500fbfbc09d70f2632","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 = {('unpinned', 'pin-click'): 'pin-pending', ('pin-pending', 'pin-success'): 'pinned', ('pin-pending', 'pin-failure'): 'pin-error', ('pinned', 'unpin-click'): 'unpin-pending', ('unpin-pending', 'unpin-success'): 'unpinned', ('unpin-pending', 'unpin-failure'): 'unpin-error', ('pin-error', 'cancel-pin-intent'): 'unpinned', ('unpin-error', 'cancel-unpin-intent'): 'pinned', ('pinned', 'notification-expires'): 'expired-pinned', ('expired-pinned', 'unpin-expired'): 'gone'}\n    data = json.loads(json.dumps({'pinned': ['other'], 'item': 'n', 'capacity': 3, 'expired': False, 'retained': True})) if payload is None else {**json.loads(json.dumps({'pinned': ['other'], 'item': 'n', 'capacity': 3, 'expired': False, 'retained': True})), **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 == 'pin-click' and data['item'] not in data['pinned'] and len(data['pinned']) >= data['capacity']: event = 'unknown-event'\n            if event == 'notification-expires': data['expired'] = True\n            state = table.get((state, event), state)\n            if state in ('pinned','expired-pinned') and data['item'] not in data['pinned']: data['pinned'].append(data['item'])\n            if state in ('unpinned','gone'): data['pinned'] = [x for x in data['pinned'] if x != data['item']]\n            if state == 'gone': data['retained'] = False\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('unpinned / pin-click', solve('unpinned', [('pin-click', N)], N), 'pin-pending')\ncheck('pin-pending / pin-success', solve('pin-pending', [('pin-success', N)], N), 'pinned')\ncheck('pin-pending / pin-failure', solve('pin-pending', [('pin-failure', N)], N), 'pin-error')\ncheck('pinned / unpin-click', solve('pinned', [('unpin-click', N)], N), 'unpin-pending')\ncheck('unpin-pending / unpin-success', solve('unpin-pending', [('unpin-success', N)], N), 'unpinned')\ncheck('unpin-pending / unpin-failure', solve('unpin-pending', [('unpin-failure', N)], N), 'unpin-error')\ncheck('pin-error / cancel-pin-intent', solve('pin-error', [('cancel-pin-intent', N)], N), 'unpinned')\ncheck('unpin-error / cancel-unpin-intent', solve('unpin-error', [('cancel-unpin-intent', N)], N), 'pinned')\ncheck('pinned / notification-expires', solve('pinned', [('notification-expires', N)], N), 'expired-pinned')\ncheck('expired-pinned / unpin-expired', solve('expired-pinned', [('unpin-expired', N)], N), 'gone')\ncheck('older notification incarnation', solve('unpinned', [('pin-click', N - 1)], N), 'unpinned')\ncheck('future notification incarnation', solve('unpinned', [('pin-click', N + 1)], N), 'unpinned')\ncheck('unknown event is inert', solve('unpinned', [('unknown-event', N)], N), 'unpinned')\ncheck('empty delivery batch', solve('unpinned', [], N), 'unpinned')\ncheck('N stale deliveries before current delivery', solve('unpinned', [('pin-click', N - 1)] * N + [('pin-click', N)], N), 'pin-pending')\ncheck('trace pin-click then pin-success', solve('unpinned', [('pin-click', N), ('pin-success', N)], N), 'pinned')\ncheck('trace pin-click then pin-failure', solve('unpinned', [('pin-click', N), ('pin-failure', N)], N), 'pin-error')\ncheck('trace pin-success then unpin-click', solve('pin-pending', [('pin-success', N), ('unpin-click', N)], N), 'unpin-pending')\ncheck('trace pin-success then notification-expires', solve('pin-pending', [('pin-success', N), ('notification-expires', N)], N), 'expired-pinned')\ncheck('trace pin-failure then cancel-pin-intent', solve('pin-pending', [('pin-failure', N), ('cancel-pin-intent', N)], N), 'unpinned')\ncheck('trace unpin-click then unpin-success', solve('pinned', [('unpin-click', N), ('unpin-success', N)], N), 'unpinned')\ncheck('trace unpin-click then unpin-failure', solve('pinned', [('unpin-click', N), ('unpin-failure', N)], N), 'unpin-error')\ncheck('trace unpin-success then pin-click', solve('unpin-pending', [('unpin-success', N), ('pin-click', N)], N), 'pin-pending')\ncheck('trace unpin-failure then cancel-unpin-intent', solve('unpin-pending', [('unpin-failure', N), ('cancel-unpin-intent', N)], N), 'pinned')\ncheck('trace cancel-pin-intent then pin-click', solve('pin-error', [('cancel-pin-intent', N), ('pin-click', N)], N), 'pin-pending')\ncheck('trace cancel-unpin-intent then unpin-click', solve('unpin-error', [('cancel-unpin-intent', N), ('unpin-click', N)], N), 'unpin-pending')\ncheck('trace cancel-unpin-intent then notification-expires', solve('unpin-error', [('cancel-unpin-intent', N), ('notification-expires', N)], N), 'expired-pinned')\ncheck('trace notification-expires then unpin-expired', solve('pinned', [('notification-expires', N), ('unpin-expired', N)], N), 'gone')\ncheck('domain state regression 1: pinned', solve('unpinned', [('pin-click', N, {})], N, {'capacity': 1}, 'pinned'), {'phase': 'unpinned', 'value': ['other']})\ncheck('domain state regression 2: pinned', solve('pin-pending', [('pin-success', N, {})], N, {}, 'pinned'), {'phase': 'pinned', 'value': ['other', 'n']})\ncheck('domain state regression 3: pinned', solve('unpin-pending', [('unpin-success', N, {})], N, {'pinned': ['n', 'other']}, 'pinned'), {'phase': 'unpinned', 'value': ['other']})\ncheck('domain state regression 4: retained', solve('pinned', [('notification-expires', N, {})], N, {'pinned': ['n']}, 'retained'), {'phase': 'expired-pinned', 'value': True})\ncheck('domain state regression 5: pinned', solve('expired-pinned', [('unpin-expired', N, {})], N, {'pinned': ['n', 'other'], 'expired': True}, 'pinned'), {'phase': 'gone', 'value': ['other']})\ncheck('domain state regression 6: retained', solve('expired-pinned', [('unpin-expired', N, {})], N, {'pinned': ['n'], 'expired': True}, 'retained'), {'phase': 'gone', 'value': False})\ncheck('domain state regression 7: pinned', solve('unpinned', [('pin-click', N, {}), ('pin-success', N, {}), ('notification-expires', N, {}), ('unpin-expired', N, {})], N, {}, 'pinned'), {'phase': 'gone', 'value': ['other']})\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-pinning-06","generated_at":"2026-09-29T14:42:35.537237+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 unpin-pending / unpin-failure transition to unpin-error; preserve the other explicitly stipulated transitions.","root_cause":"Failed unpin leaves the row in the wrong section.","sha256":"83707f887d9b38c37c430978ec50ad3e2ccd31b1ba11499a7578edc162a723b7","title":"Inbox notification pin persistence: unpin-failure from unpin-pending · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.683,"exit_code":1,"observations":[{"actual":"pin-pending","check":"unpinned / pin-click","expected":"pin-pending","passed":true},{"actual":"pinned","check":"pin-pending / pin-success","expected":"pinned","passed":true},{"actual":"pin-error","check":"pin-pending / pin-failure","expected":"pin-error","passed":true},{"actual":"unpin-pending","check":"pinned / unpin-click","expected":"unpin-pending","passed":true},{"actual":"unpinned","check":"unpin-pending / unpin-success","expected":"unpinned","passed":true},{"actual":"pinned","check":"unpin-pending / unpin-failure","expected":"unpin-error","passed":false},{"actual":"unpinned","check":"pin-error / cancel-pin-intent","expected":"unpinned","passed":true},{"actual":"pinned","check":"unpin-error / cancel-unpin-intent","expected":"pinned","passed":true},{"actual":"expired-pinned","check":"pinned / notification-expires","expected":"expired-pinned","passed":true},{"actual":"gone","check":"expired-pinned / unpin-expired","expected":"gone","passed":true},{"actual":"unpinned","check":"older notification incarnation","expected":"unpinned","passed":true},{"actual":"unpinned","check":"future notification incarnation","expected":"unpinned","passed":true},{"actual":"unpinned","check":"unknown event is inert","expected":"unpinned","passed":true},{"actual":"unpinned","check":"empty delivery batch","expected":"unpinned","passed":true},{"actual":"pin-pending","check":"N stale deliveries before current delivery","expected":"pin-pending","passed":true},{"actual":"pinned","check":"trace pin-click then pin-success","expected":"pinned","passed":true},{"actual":"pin-error","check":"trace pin-click then pin-failure","expected":"pin-error","passed":true},{"actual":"unpin-pending","check":"trace pin-success then unpin-click","expected":"unpin-pending","passed":true},{"actual":"expired-pinned","check":"trace pin-success then notification-expires","expected":"expired-pinned","passed":true},{"actual":"unpinned","check":"trace pin-failure then cancel-pin-intent","expected":"unpinned","passed":true},{"actual":"unpinned","check":"trace unpin-click then unpin-success","expected":"unpinned","passed":true},{"actual":"pinned","check":"trace unpin-click then unpin-failure","expected":"unpin-error","passed":false},{"actual":"pin-pending","check":"trace unpin-success then pin-click","expected":"pin-pending","passed":true},{"actual":"pinned","check":"trace unpin-failure then cancel-unpin-intent","expected":"pinned","passed":true},{"actual":"pin-pending","check":"trace cancel-pin-intent then pin-click","expected":"pin-pending","passed":true},{"actual":"unpin-pending","check":"trace cancel-unpin-intent then unpin-click","expected":"unpin-pending","passed":true},{"actual":"expired-pinned","check":"trace cancel-unpin-intent then notification-expires","expected":"expired-pinned","passed":true},{"actual":"gone","check":"trace notification-expires then unpin-expired","expected":"gone","passed":true},{"actual":{"phase":"unpinned","value":["other"]},"check":"domain state regression 1: pinned","expected":{"phase":"unpinned","value":["other"]},"passed":true},{"actual":{"phase":"pinned","value":["other","n"]},"check":"domain state regression 2: pinned","expected":{"phase":"pinned","value":["other","n"]},"passed":true},{"actual":{"phase":"unpinned","value":["other"]},"check":"domain state regression 3: pinned","expected":{"phase":"unpinned","value":["other"]},"passed":true},{"actual":{"phase":"expired-pinned","value":true},"check":"domain state regression 4: retained","expected":{"phase":"expired-pinned","value":true},"passed":true},{"actual":{"phase":"gone","value":["other"]},"check":"domain state regression 5: pinned","expected":{"phase":"gone","value":["other"]},"passed":true},{"actual":{"phase":"gone","value":false},"check":"domain state regression 6: retained","expected":{"phase":"gone","value":false},"passed":true},{"actual":{"phase":"gone","value":["other"]},"check":"domain state regression 7: pinned","expected":{"phase":"gone","value":["other"]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unpinned / pin-click\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"pin-pending / pin-success\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"pin-pending / pin-failure\", \"actual\": \"pin-error\", \"expected\": \"pin-error\", \"passed\": true}, {\"check\": \"pinned / unpin-click\", \"actual\": \"unpin-pending\", \"expected\": \"unpin-pending\", \"passed\": true}, {\"check\": \"unpin-pending / unpin-success\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"unpin-pending / unpin-failure\", \"actual\": \"pinned\", \"expected\": \"unpin-error\", \"passed\": false}, {\"check\": \"pin-error / cancel-pin-intent\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"unpin-error / cancel-unpin-intent\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"pinned / notification-expires\", \"actual\": \"expired-pinned\", \"expected\": \"expired-pinned\", \"passed\": true}, {\"check\": \"expired-pinned / unpin-expired\", \"actual\": \"gone\", \"expected\": \"gone\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"trace pin-click then pin-success\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"trace pin-click then pin-failure\", \"actual\": \"pin-error\", \"expected\": \"pin-error\", \"passed\": true}, {\"check\": \"trace pin-success then unpin-click\", \"actual\": \"unpin-pending\", \"expected\": \"unpin-pending\", \"passed\": true}, {\"check\": \"trace pin-success then notification-expires\", \"actual\": \"expired-pinned\", \"expected\": \"expired-pinned\", \"passed\": true}, {\"check\": \"trace pin-failure then cancel-pin-intent\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"trace unpin-click then unpin-success\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"trace unpin-click then unpin-failure\", \"actual\": \"pinned\", \"expected\": \"unpin-error\", \"passed\": false}, {\"check\": \"trace unpin-success then pin-click\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"trace unpin-failure then cancel-unpin-intent\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"trace cancel-pin-intent then pin-click\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"trace cancel-unpin-intent then unpin-click\", \"actual\": \"unpin-pending\", \"expected\": \"unpin-pending\", \"passed\": true}, {\"check\": \"trace cancel-unpin-intent then notification-expires\", \"actual\": \"expired-pinned\", \"expected\": \"expired-pinned\", \"passed\": true}, {\"check\": \"trace notification-expires then unpin-expired\", \"actual\": \"gone\", \"expected\": \"gone\", \"passed\": true}, {\"check\": \"domain state regression 1: pinned\", \"actual\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"passed\": true}, {\"check\": \"domain state regression 2: pinned\", \"actual\": {\"phase\": \"pinned\", \"value\": [\"other\", \"n\"]}, \"expected\": {\"phase\": \"pinned\", \"value\": [\"other\", \"n\"]}, \"passed\": true}, {\"check\": \"domain state regression 3: pinned\", \"actual\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"passed\": true}, {\"check\": \"domain state regression 4: retained\", \"actual\": {\"phase\": \"expired-pinned\", \"value\": true}, \"expected\": {\"phase\": \"expired-pinned\", \"value\": true}, \"passed\": true}, {\"check\": \"domain state regression 5: pinned\", \"actual\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"passed\": true}, {\"check\": \"domain state regression 6: retained\", \"actual\": {\"phase\": \"gone\", \"value\": false}, \"expected\": {\"phase\": \"gone\", \"value\": false}, \"passed\": true}, {\"check\": \"domain state regression 7: pinned\", \"actual\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.892,"exit_code":1,"observations":[{"actual":"pin-pending","check":"unpinned / pin-click","expected":"pin-pending","passed":true},{"actual":"pinned","check":"pin-pending / pin-success","expected":"pinned","passed":true},{"actual":"pin-error","check":"pin-pending / pin-failure","expected":"pin-error","passed":true},{"actual":"unpin-pending","check":"pinned / unpin-click","expected":"unpin-pending","passed":true},{"actual":"unpinned","check":"unpin-pending / unpin-success","expected":"unpinned","passed":true},{"actual":"unpinned","check":"unpin-pending / unpin-failure","expected":"unpin-error","passed":false},{"actual":"unpinned","check":"pin-error / cancel-pin-intent","expected":"unpinned","passed":true},{"actual":"pinned","check":"unpin-error / cancel-unpin-intent","expected":"pinned","passed":true},{"actual":"expired-pinned","check":"pinned / notification-expires","expected":"expired-pinned","passed":true},{"actual":"gone","check":"expired-pinned / unpin-expired","expected":"gone","passed":true},{"actual":"unpinned","check":"older notification incarnation","expected":"unpinned","passed":true},{"actual":"unpinned","check":"future notification incarnation","expected":"unpinned","passed":true},{"actual":"unpinned","check":"unknown event is inert","expected":"unpinned","passed":true},{"actual":"unpinned","check":"empty delivery batch","expected":"unpinned","passed":true},{"actual":"pin-pending","check":"N stale deliveries before current delivery","expected":"pin-pending","passed":true},{"actual":"pinned","check":"trace pin-click then pin-success","expected":"pinned","passed":true},{"actual":"pin-error","check":"trace pin-click then pin-failure","expected":"pin-error","passed":true},{"actual":"unpin-pending","check":"trace pin-success then unpin-click","expected":"unpin-pending","passed":true},{"actual":"expired-pinned","check":"trace pin-success then notification-expires","expected":"expired-pinned","passed":true},{"actual":"unpinned","check":"trace pin-failure then cancel-pin-intent","expected":"unpinned","passed":true},{"actual":"unpinned","check":"trace unpin-click then unpin-success","expected":"unpinned","passed":true},{"actual":"unpinned","check":"trace unpin-click then unpin-failure","expected":"unpin-error","passed":false},{"actual":"pin-pending","check":"trace unpin-success then pin-click","expected":"pin-pending","passed":true},{"actual":"unpinned","check":"trace unpin-failure then cancel-unpin-intent","expected":"pinned","passed":false},{"actual":"pin-pending","check":"trace cancel-pin-intent then pin-click","expected":"pin-pending","passed":true},{"actual":"unpin-pending","check":"trace cancel-unpin-intent then unpin-click","expected":"unpin-pending","passed":true},{"actual":"expired-pinned","check":"trace cancel-unpin-intent then notification-expires","expected":"expired-pinned","passed":true},{"actual":"gone","check":"trace notification-expires then unpin-expired","expected":"gone","passed":true},{"actual":{"phase":"unpinned","value":["other"]},"check":"domain state regression 1: pinned","expected":{"phase":"unpinned","value":["other"]},"passed":true},{"actual":{"phase":"pinned","value":["other","n"]},"check":"domain state regression 2: pinned","expected":{"phase":"pinned","value":["other","n"]},"passed":true},{"actual":{"phase":"unpinned","value":["other"]},"check":"domain state regression 3: pinned","expected":{"phase":"unpinned","value":["other"]},"passed":true},{"actual":{"phase":"expired-pinned","value":true},"check":"domain state regression 4: retained","expected":{"phase":"expired-pinned","value":true},"passed":true},{"actual":{"phase":"gone","value":["other"]},"check":"domain state regression 5: pinned","expected":{"phase":"gone","value":["other"]},"passed":true},{"actual":{"phase":"gone","value":false},"check":"domain state regression 6: retained","expected":{"phase":"gone","value":false},"passed":true},{"actual":{"phase":"gone","value":["other"]},"check":"domain state regression 7: pinned","expected":{"phase":"gone","value":["other"]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unpinned / pin-click\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"pin-pending / pin-success\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"pin-pending / pin-failure\", \"actual\": \"pin-error\", \"expected\": \"pin-error\", \"passed\": true}, {\"check\": \"pinned / unpin-click\", \"actual\": \"unpin-pending\", \"expected\": \"unpin-pending\", \"passed\": true}, {\"check\": \"unpin-pending / unpin-success\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"unpin-pending / unpin-failure\", \"actual\": \"unpinned\", \"expected\": \"unpin-error\", \"passed\": false}, {\"check\": \"pin-error / cancel-pin-intent\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"unpin-error / cancel-unpin-intent\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"pinned / notification-expires\", \"actual\": \"expired-pinned\", \"expected\": \"expired-pinned\", \"passed\": true}, {\"check\": \"expired-pinned / unpin-expired\", \"actual\": \"gone\", \"expected\": \"gone\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"trace pin-click then pin-success\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"trace pin-click then pin-failure\", \"actual\": \"pin-error\", \"expected\": \"pin-error\", \"passed\": true}, {\"check\": \"trace pin-success then unpin-click\", \"actual\": \"unpin-pending\", \"expected\": \"unpin-pending\", \"passed\": true}, {\"check\": \"trace pin-success then notification-expires\", \"actual\": \"expired-pinned\", \"expected\": \"expired-pinned\", \"passed\": true}, {\"check\": \"trace pin-failure then cancel-pin-intent\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"trace unpin-click then unpin-success\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"trace unpin-click then unpin-failure\", \"actual\": \"unpinned\", \"expected\": \"unpin-error\", \"passed\": false}, {\"check\": \"trace unpin-success then pin-click\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"trace unpin-failure then cancel-unpin-intent\", \"actual\": \"unpinned\", \"expected\": \"pinned\", \"passed\": false}, {\"check\": \"trace cancel-pin-intent then pin-click\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"trace cancel-unpin-intent then unpin-click\", \"actual\": \"unpin-pending\", \"expected\": \"unpin-pending\", \"passed\": true}, {\"check\": \"trace cancel-unpin-intent then notification-expires\", \"actual\": \"expired-pinned\", \"expected\": \"expired-pinned\", \"passed\": true}, {\"check\": \"trace notification-expires then unpin-expired\", \"actual\": \"gone\", \"expected\": \"gone\", \"passed\": true}, {\"check\": \"domain state regression 1: pinned\", \"actual\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"passed\": true}, {\"check\": \"domain state regression 2: pinned\", \"actual\": {\"phase\": \"pinned\", \"value\": [\"other\", \"n\"]}, \"expected\": {\"phase\": \"pinned\", \"value\": [\"other\", \"n\"]}, \"passed\": true}, {\"check\": \"domain state regression 3: pinned\", \"actual\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"passed\": true}, {\"check\": \"domain state regression 4: retained\", \"actual\": {\"phase\": \"expired-pinned\", \"value\": true}, \"expected\": {\"phase\": \"expired-pinned\", \"value\": true}, \"passed\": true}, {\"check\": \"domain state regression 5: pinned\", \"actual\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"passed\": true}, {\"check\": \"domain state regression 6: retained\", \"actual\": {\"phase\": \"gone\", \"value\": false}, \"expected\": {\"phase\": \"gone\", \"value\": false}, \"passed\": true}, {\"check\": \"domain state regression 7: pinned\", \"actual\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.797,"exit_code":0,"observations":[{"actual":"pin-pending","check":"unpinned / pin-click","expected":"pin-pending","passed":true},{"actual":"pinned","check":"pin-pending / pin-success","expected":"pinned","passed":true},{"actual":"pin-error","check":"pin-pending / pin-failure","expected":"pin-error","passed":true},{"actual":"unpin-pending","check":"pinned / unpin-click","expected":"unpin-pending","passed":true},{"actual":"unpinned","check":"unpin-pending / unpin-success","expected":"unpinned","passed":true},{"actual":"unpin-error","check":"unpin-pending / unpin-failure","expected":"unpin-error","passed":true},{"actual":"unpinned","check":"pin-error / cancel-pin-intent","expected":"unpinned","passed":true},{"actual":"pinned","check":"unpin-error / cancel-unpin-intent","expected":"pinned","passed":true},{"actual":"expired-pinned","check":"pinned / notification-expires","expected":"expired-pinned","passed":true},{"actual":"gone","check":"expired-pinned / unpin-expired","expected":"gone","passed":true},{"actual":"unpinned","check":"older notification incarnation","expected":"unpinned","passed":true},{"actual":"unpinned","check":"future notification incarnation","expected":"unpinned","passed":true},{"actual":"unpinned","check":"unknown event is inert","expected":"unpinned","passed":true},{"actual":"unpinned","check":"empty delivery batch","expected":"unpinned","passed":true},{"actual":"pin-pending","check":"N stale deliveries before current delivery","expected":"pin-pending","passed":true},{"actual":"pinned","check":"trace pin-click then pin-success","expected":"pinned","passed":true},{"actual":"pin-error","check":"trace pin-click then pin-failure","expected":"pin-error","passed":true},{"actual":"unpin-pending","check":"trace pin-success then unpin-click","expected":"unpin-pending","passed":true},{"actual":"expired-pinned","check":"trace pin-success then notification-expires","expected":"expired-pinned","passed":true},{"actual":"unpinned","check":"trace pin-failure then cancel-pin-intent","expected":"unpinned","passed":true},{"actual":"unpinned","check":"trace unpin-click then unpin-success","expected":"unpinned","passed":true},{"actual":"unpin-error","check":"trace unpin-click then unpin-failure","expected":"unpin-error","passed":true},{"actual":"pin-pending","check":"trace unpin-success then pin-click","expected":"pin-pending","passed":true},{"actual":"pinned","check":"trace unpin-failure then cancel-unpin-intent","expected":"pinned","passed":true},{"actual":"pin-pending","check":"trace cancel-pin-intent then pin-click","expected":"pin-pending","passed":true},{"actual":"unpin-pending","check":"trace cancel-unpin-intent then unpin-click","expected":"unpin-pending","passed":true},{"actual":"expired-pinned","check":"trace cancel-unpin-intent then notification-expires","expected":"expired-pinned","passed":true},{"actual":"gone","check":"trace notification-expires then unpin-expired","expected":"gone","passed":true},{"actual":{"phase":"unpinned","value":["other"]},"check":"domain state regression 1: pinned","expected":{"phase":"unpinned","value":["other"]},"passed":true},{"actual":{"phase":"pinned","value":["other","n"]},"check":"domain state regression 2: pinned","expected":{"phase":"pinned","value":["other","n"]},"passed":true},{"actual":{"phase":"unpinned","value":["other"]},"check":"domain state regression 3: pinned","expected":{"phase":"unpinned","value":["other"]},"passed":true},{"actual":{"phase":"expired-pinned","value":true},"check":"domain state regression 4: retained","expected":{"phase":"expired-pinned","value":true},"passed":true},{"actual":{"phase":"gone","value":["other"]},"check":"domain state regression 5: pinned","expected":{"phase":"gone","value":["other"]},"passed":true},{"actual":{"phase":"gone","value":false},"check":"domain state regression 6: retained","expected":{"phase":"gone","value":false},"passed":true},{"actual":{"phase":"gone","value":["other"]},"check":"domain state regression 7: pinned","expected":{"phase":"gone","value":["other"]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unpinned / pin-click\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"pin-pending / pin-success\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"pin-pending / pin-failure\", \"actual\": \"pin-error\", \"expected\": \"pin-error\", \"passed\": true}, {\"check\": \"pinned / unpin-click\", \"actual\": \"unpin-pending\", \"expected\": \"unpin-pending\", \"passed\": true}, {\"check\": \"unpin-pending / unpin-success\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"unpin-pending / unpin-failure\", \"actual\": \"unpin-error\", \"expected\": \"unpin-error\", \"passed\": true}, {\"check\": \"pin-error / cancel-pin-intent\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"unpin-error / cancel-unpin-intent\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"pinned / notification-expires\", \"actual\": \"expired-pinned\", \"expected\": \"expired-pinned\", \"passed\": true}, {\"check\": \"expired-pinned / unpin-expired\", \"actual\": \"gone\", \"expected\": \"gone\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"trace pin-click then pin-success\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"trace pin-click then pin-failure\", \"actual\": \"pin-error\", \"expected\": \"pin-error\", \"passed\": true}, {\"check\": \"trace pin-success then unpin-click\", \"actual\": \"unpin-pending\", \"expected\": \"unpin-pending\", \"passed\": true}, {\"check\": \"trace pin-success then notification-expires\", \"actual\": \"expired-pinned\", \"expected\": \"expired-pinned\", \"passed\": true}, {\"check\": \"trace pin-failure then cancel-pin-intent\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"trace unpin-click then unpin-success\", \"actual\": \"unpinned\", \"expected\": \"unpinned\", \"passed\": true}, {\"check\": \"trace unpin-click then unpin-failure\", \"actual\": \"unpin-error\", \"expected\": \"unpin-error\", \"passed\": true}, {\"check\": \"trace unpin-success then pin-click\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"trace unpin-failure then cancel-unpin-intent\", \"actual\": \"pinned\", \"expected\": \"pinned\", \"passed\": true}, {\"check\": \"trace cancel-pin-intent then pin-click\", \"actual\": \"pin-pending\", \"expected\": \"pin-pending\", \"passed\": true}, {\"check\": \"trace cancel-unpin-intent then unpin-click\", \"actual\": \"unpin-pending\", \"expected\": \"unpin-pending\", \"passed\": true}, {\"check\": \"trace cancel-unpin-intent then notification-expires\", \"actual\": \"expired-pinned\", \"expected\": \"expired-pinned\", \"passed\": true}, {\"check\": \"trace notification-expires then unpin-expired\", \"actual\": \"gone\", \"expected\": \"gone\", \"passed\": true}, {\"check\": \"domain state regression 1: pinned\", \"actual\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"passed\": true}, {\"check\": \"domain state regression 2: pinned\", \"actual\": {\"phase\": \"pinned\", \"value\": [\"other\", \"n\"]}, \"expected\": {\"phase\": \"pinned\", \"value\": [\"other\", \"n\"]}, \"passed\": true}, {\"check\": \"domain state regression 3: pinned\", \"actual\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"unpinned\", \"value\": [\"other\"]}, \"passed\": true}, {\"check\": \"domain state regression 4: retained\", \"actual\": {\"phase\": \"expired-pinned\", \"value\": true}, \"expected\": {\"phase\": \"expired-pinned\", \"value\": true}, \"passed\": true}, {\"check\": \"domain state regression 5: pinned\", \"actual\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"passed\": true}, {\"check\": \"domain state regression 6: retained\", \"actual\": {\"phase\": \"gone\", \"value\": false}, \"expected\": {\"phase\": \"gone\", \"value\": false}, \"passed\": true}, {\"check\": \"domain state regression 7: pinned\", \"actual\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"expected\": {\"phase\": \"gone\", \"value\": [\"other\"]}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}