{"abstract":"The screen-locked event leaves a notification in revealed instead of redacting.","category":"Notification interfaces","checks":34,"contract":"Sensitive notification preview redaction is a bounded visual-notification workflow with mutable policy state {'secret': 'message', 'rendered': 'message', 'revision': 1, 'approved': 0, 'locked': False}. Its default transition relation is {('revealed', 'screen-locked'): 'redacting', ('redacting', 'redaction-applied'): 'redacted', ('redacted', 'reveal-click'): 'reveal-pending', ('reveal-pending', 'confirmation-accepted'): 'revealed', ('reveal-pending', 'confirmation-denied'): 'redacted', ('revealed', 'sensitive-update'): 'redacting-update', ('redacting-update', 'redaction-applied'): 'redacted-updated', ('redacted-updated', 'reveal-click'): 'updated-reveal-pending', ('updated-reveal-pending', 'confirmation-accepted'): 'revealed-updated', ('reveal-pending', 'screen-locked'): 'redacted'}; 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-privacy-redaction","failed_approach":"Hiding without the redaction phase leaves retained sensitive presentation state.","family":"s3-notification-interfaces-privacy-redaction-01","id":"FA-35141","implementations":{"attempt":{"sha256":"d2232609b6f8f395ed51169dea199ada2fc63f71ac60dfc55de1cf7e85d29e28","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 = {('revealed', 'screen-locked'): 'hidden', ('redacting', 'redaction-applied'): 'redacted', ('redacted', 'reveal-click'): 'reveal-pending', ('reveal-pending', 'confirmation-accepted'): 'revealed', ('reveal-pending', 'confirmation-denied'): 'redacted', ('revealed', 'sensitive-update'): 'redacting-update', ('redacting-update', 'redaction-applied'): 'redacted-updated', ('redacted-updated', 'reveal-click'): 'updated-reveal-pending', ('updated-reveal-pending', 'confirmation-accepted'): 'revealed-updated', ('reveal-pending', 'screen-locked'): 'redacted'}\n    data = json.loads(json.dumps({'secret': 'message', 'rendered': 'message', 'revision': 1, 'approved': 0, 'locked': False})) if payload is None else {**json.loads(json.dumps({'secret': 'message', 'rendered': 'message', 'revision': 1, 'approved': 0, 'locked': 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 == 'screen-locked': data['locked'] = True\n            if event == 'sensitive-update':\n                data['revision'] += 1\n                data['secret'] = arg.get('text','updated')\n            if event == 'confirmation-accepted':\n                if data['locked'] or arg.get('revision',data['revision']) != data['revision']: event = 'confirmation-denied'\n                else: data['approved'] = data['revision']\n            state = table.get((state, event), state)\n            if state in ('redacted','redacted-updated','redacting','redacting-update','hidden'): data['rendered'] = None\n            if state in ('revealed','revealed-updated'): data['rendered'] = data['secret']\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('revealed / screen-locked', solve('revealed', [('screen-locked', N)], N), 'redacting')\ncheck('redacting / redaction-applied', solve('redacting', [('redaction-applied', N)], N), 'redacted')\ncheck('redacted / reveal-click', solve('redacted', [('reveal-click', N)], N), 'reveal-pending')\ncheck('reveal-pending / confirmation-accepted', solve('reveal-pending', [('confirmation-accepted', N)], N), 'revealed')\ncheck('reveal-pending / confirmation-denied', solve('reveal-pending', [('confirmation-denied', N)], N), 'redacted')\ncheck('revealed / sensitive-update', solve('revealed', [('sensitive-update', N)], N), 'redacting-update')\ncheck('redacting-update / redaction-applied', solve('redacting-update', [('redaction-applied', N)], N), 'redacted-updated')\ncheck('redacted-updated / reveal-click', solve('redacted-updated', [('reveal-click', N)], N), 'updated-reveal-pending')\ncheck('updated-reveal-pending / confirmation-accepted', solve('updated-reveal-pending', [('confirmation-accepted', N)], N), 'revealed-updated')\ncheck('reveal-pending / screen-locked', solve('reveal-pending', [('screen-locked', N)], N), 'redacted')\ncheck('older notification incarnation', solve('revealed', [('screen-locked', N - 1)], N), 'revealed')\ncheck('future notification incarnation', solve('revealed', [('screen-locked', N + 1)], N), 'revealed')\ncheck('unknown event is inert', solve('revealed', [('unknown-event', N)], N), 'revealed')\ncheck('empty delivery batch', solve('revealed', [], N), 'revealed')\ncheck('N stale deliveries before current delivery', solve('revealed', [('screen-locked', N - 1)] * N + [('screen-locked', N)], N), 'redacting')\ncheck('trace screen-locked then redaction-applied', solve('revealed', [('screen-locked', N), ('redaction-applied', N)], N), 'redacted')\ncheck('trace redaction-applied then reveal-click', solve('redacting', [('redaction-applied', N), ('reveal-click', N)], N), 'reveal-pending')\ncheck('trace reveal-click then confirmation-accepted', solve('redacted', [('reveal-click', N), ('confirmation-accepted', N)], N), 'revealed')\ncheck('trace reveal-click then confirmation-denied', solve('redacted', [('reveal-click', N), ('confirmation-denied', N)], N), 'redacted')\ncheck('trace reveal-click then screen-locked', solve('redacted', [('reveal-click', N), ('screen-locked', N)], N), 'redacted')\ncheck('trace confirmation-accepted then screen-locked', solve('reveal-pending', [('confirmation-accepted', N), ('screen-locked', N)], N), 'redacting')\ncheck('trace confirmation-accepted then sensitive-update', solve('reveal-pending', [('confirmation-accepted', N), ('sensitive-update', N)], N), 'redacting-update')\ncheck('trace confirmation-denied then reveal-click', solve('reveal-pending', [('confirmation-denied', N), ('reveal-click', N)], N), 'reveal-pending')\ncheck('trace sensitive-update then redaction-applied', solve('revealed', [('sensitive-update', N), ('redaction-applied', N)], N), 'redacted-updated')\ncheck('trace redaction-applied then reveal-click', solve('redacting-update', [('redaction-applied', N), ('reveal-click', N)], N), 'updated-reveal-pending')\ncheck('trace reveal-click then confirmation-accepted', solve('redacted-updated', [('reveal-click', N), ('confirmation-accepted', N)], N), 'revealed-updated')\ncheck('trace screen-locked then reveal-click', solve('reveal-pending', [('screen-locked', N), ('reveal-click', N)], N), 'reveal-pending')\ncheck('domain state regression 1: rendered', solve('revealed', [('screen-locked', N, {})], N, {}, 'rendered'), {'phase': 'redacting', 'value': None})\ncheck('domain state regression 2: rendered', solve('reveal-pending', [('confirmation-accepted', N, {})], N, {'locked': True, 'rendered': None}, 'rendered'), {'phase': 'redacted', 'value': None})\ncheck('domain state regression 3: approved', solve('reveal-pending', [('confirmation-accepted', N, {'revision': 0})], N, {'rendered': None}, 'approved'), {'phase': 'redacted', 'value': 0})\ncheck('domain state regression 4: rendered', solve('reveal-pending', [('confirmation-accepted', N, {'revision': 1})], N, {'rendered': None}, 'rendered'), {'phase': 'revealed', 'value': 'message'})\ncheck('domain state regression 5: rendered', solve('revealed', [('sensitive-update', N, {'text': 'new secret'})], N, {}, 'rendered'), {'phase': 'redacting-update', 'value': None})\ncheck('domain state regression 6: rendered', solve('updated-reveal-pending', [('confirmation-accepted', N, {'revision': 2})], N, {'revision': 2, 'secret': 'new', 'rendered': None}, 'rendered'), {'phase': 'revealed-updated', 'value': 'new'})\ncheck('domain state regression 7: rendered', solve('revealed', [('sensitive-update', N, {'text': 'replacement'}), ('redaction-applied', N, {}), ('reveal-click', N, {}), ('confirmation-accepted', N, {'revision': 2})], N, {}, 'rendered'), {'phase': 'revealed-updated', 'value': 'replacement'})\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":"6ecaf96a051ac6c39d2b9b26f330f7413d00967670f596241accb649b4e8b992","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 = {('revealed', 'screen-locked'): 'revealed', ('redacting', 'redaction-applied'): 'redacted', ('redacted', 'reveal-click'): 'reveal-pending', ('reveal-pending', 'confirmation-accepted'): 'revealed', ('reveal-pending', 'confirmation-denied'): 'redacted', ('revealed', 'sensitive-update'): 'redacting-update', ('redacting-update', 'redaction-applied'): 'redacted-updated', ('redacted-updated', 'reveal-click'): 'updated-reveal-pending', ('updated-reveal-pending', 'confirmation-accepted'): 'revealed-updated', ('reveal-pending', 'screen-locked'): 'redacted'}\n    data = json.loads(json.dumps({'secret': 'message', 'rendered': 'message', 'revision': 1, 'approved': 0, 'locked': False})) if payload is None else {**json.loads(json.dumps({'secret': 'message', 'rendered': 'message', 'revision': 1, 'approved': 0, 'locked': 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 == 'screen-locked': data['locked'] = True\n            if event == 'sensitive-update':\n                data['revision'] += 1\n                data['secret'] = arg.get('text','updated')\n            if event == 'confirmation-accepted':\n                if data['locked'] or arg.get('revision',data['revision']) != data['revision']: event = 'confirmation-denied'\n                else: data['approved'] = data['revision']\n            state = table.get((state, event), state)\n            if state in ('redacted','redacted-updated','redacting','redacting-update','hidden'): data['rendered'] = None\n            if state in ('revealed','revealed-updated'): data['rendered'] = data['secret']\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('revealed / screen-locked', solve('revealed', [('screen-locked', N)], N), 'redacting')\ncheck('redacting / redaction-applied', solve('redacting', [('redaction-applied', N)], N), 'redacted')\ncheck('redacted / reveal-click', solve('redacted', [('reveal-click', N)], N), 'reveal-pending')\ncheck('reveal-pending / confirmation-accepted', solve('reveal-pending', [('confirmation-accepted', N)], N), 'revealed')\ncheck('reveal-pending / confirmation-denied', solve('reveal-pending', [('confirmation-denied', N)], N), 'redacted')\ncheck('revealed / sensitive-update', solve('revealed', [('sensitive-update', N)], N), 'redacting-update')\ncheck('redacting-update / redaction-applied', solve('redacting-update', [('redaction-applied', N)], N), 'redacted-updated')\ncheck('redacted-updated / reveal-click', solve('redacted-updated', [('reveal-click', N)], N), 'updated-reveal-pending')\ncheck('updated-reveal-pending / confirmation-accepted', solve('updated-reveal-pending', [('confirmation-accepted', N)], N), 'revealed-updated')\ncheck('reveal-pending / screen-locked', solve('reveal-pending', [('screen-locked', N)], N), 'redacted')\ncheck('older notification incarnation', solve('revealed', [('screen-locked', N - 1)], N), 'revealed')\ncheck('future notification incarnation', solve('revealed', [('screen-locked', N + 1)], N), 'revealed')\ncheck('unknown event is inert', solve('revealed', [('unknown-event', N)], N), 'revealed')\ncheck('empty delivery batch', solve('revealed', [], N), 'revealed')\ncheck('N stale deliveries before current delivery', solve('revealed', [('screen-locked', N - 1)] * N + [('screen-locked', N)], N), 'redacting')\ncheck('trace screen-locked then redaction-applied', solve('revealed', [('screen-locked', N), ('redaction-applied', N)], N), 'redacted')\ncheck('trace redaction-applied then reveal-click', solve('redacting', [('redaction-applied', N), ('reveal-click', N)], N), 'reveal-pending')\ncheck('trace reveal-click then confirmation-accepted', solve('redacted', [('reveal-click', N), ('confirmation-accepted', N)], N), 'revealed')\ncheck('trace reveal-click then confirmation-denied', solve('redacted', [('reveal-click', N), ('confirmation-denied', N)], N), 'redacted')\ncheck('trace reveal-click then screen-locked', solve('redacted', [('reveal-click', N), ('screen-locked', N)], N), 'redacted')\ncheck('trace confirmation-accepted then screen-locked', solve('reveal-pending', [('confirmation-accepted', N), ('screen-locked', N)], N), 'redacting')\ncheck('trace confirmation-accepted then sensitive-update', solve('reveal-pending', [('confirmation-accepted', N), ('sensitive-update', N)], N), 'redacting-update')\ncheck('trace confirmation-denied then reveal-click', solve('reveal-pending', [('confirmation-denied', N), ('reveal-click', N)], N), 'reveal-pending')\ncheck('trace sensitive-update then redaction-applied', solve('revealed', [('sensitive-update', N), ('redaction-applied', N)], N), 'redacted-updated')\ncheck('trace redaction-applied then reveal-click', solve('redacting-update', [('redaction-applied', N), ('reveal-click', N)], N), 'updated-reveal-pending')\ncheck('trace reveal-click then confirmation-accepted', solve('redacted-updated', [('reveal-click', N), ('confirmation-accepted', N)], N), 'revealed-updated')\ncheck('trace screen-locked then reveal-click', solve('reveal-pending', [('screen-locked', N), ('reveal-click', N)], N), 'reveal-pending')\ncheck('domain state regression 1: rendered', solve('revealed', [('screen-locked', N, {})], N, {}, 'rendered'), {'phase': 'redacting', 'value': None})\ncheck('domain state regression 2: rendered', solve('reveal-pending', [('confirmation-accepted', N, {})], N, {'locked': True, 'rendered': None}, 'rendered'), {'phase': 'redacted', 'value': None})\ncheck('domain state regression 3: approved', solve('reveal-pending', [('confirmation-accepted', N, {'revision': 0})], N, {'rendered': None}, 'approved'), {'phase': 'redacted', 'value': 0})\ncheck('domain state regression 4: rendered', solve('reveal-pending', [('confirmation-accepted', N, {'revision': 1})], N, {'rendered': None}, 'rendered'), {'phase': 'revealed', 'value': 'message'})\ncheck('domain state regression 5: rendered', solve('revealed', [('sensitive-update', N, {'text': 'new secret'})], N, {}, 'rendered'), {'phase': 'redacting-update', 'value': None})\ncheck('domain state regression 6: rendered', solve('updated-reveal-pending', [('confirmation-accepted', N, {'revision': 2})], N, {'revision': 2, 'secret': 'new', 'rendered': None}, 'rendered'), {'phase': 'revealed-updated', 'value': 'new'})\ncheck('domain state regression 7: rendered', solve('revealed', [('sensitive-update', N, {'text': 'replacement'}), ('redaction-applied', N, {}), ('reveal-click', N, {}), ('confirmation-accepted', N, {'revision': 2})], N, {}, 'rendered'), {'phase': 'revealed-updated', 'value': 'replacement'})\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":"ae4e9b83520af29f595fdf49b76d6f548581a6922645c7888aa4af3d353c74af","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 = {('revealed', 'screen-locked'): 'redacting', ('redacting', 'redaction-applied'): 'redacted', ('redacted', 'reveal-click'): 'reveal-pending', ('reveal-pending', 'confirmation-accepted'): 'revealed', ('reveal-pending', 'confirmation-denied'): 'redacted', ('revealed', 'sensitive-update'): 'redacting-update', ('redacting-update', 'redaction-applied'): 'redacted-updated', ('redacted-updated', 'reveal-click'): 'updated-reveal-pending', ('updated-reveal-pending', 'confirmation-accepted'): 'revealed-updated', ('reveal-pending', 'screen-locked'): 'redacted'}\n    data = json.loads(json.dumps({'secret': 'message', 'rendered': 'message', 'revision': 1, 'approved': 0, 'locked': False})) if payload is None else {**json.loads(json.dumps({'secret': 'message', 'rendered': 'message', 'revision': 1, 'approved': 0, 'locked': 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 == 'screen-locked': data['locked'] = True\n            if event == 'sensitive-update':\n                data['revision'] += 1\n                data['secret'] = arg.get('text','updated')\n            if event == 'confirmation-accepted':\n                if data['locked'] or arg.get('revision',data['revision']) != data['revision']: event = 'confirmation-denied'\n                else: data['approved'] = data['revision']\n            state = table.get((state, event), state)\n            if state in ('redacted','redacted-updated','redacting','redacting-update','hidden'): data['rendered'] = None\n            if state in ('revealed','revealed-updated'): data['rendered'] = data['secret']\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('revealed / screen-locked', solve('revealed', [('screen-locked', N)], N), 'redacting')\ncheck('redacting / redaction-applied', solve('redacting', [('redaction-applied', N)], N), 'redacted')\ncheck('redacted / reveal-click', solve('redacted', [('reveal-click', N)], N), 'reveal-pending')\ncheck('reveal-pending / confirmation-accepted', solve('reveal-pending', [('confirmation-accepted', N)], N), 'revealed')\ncheck('reveal-pending / confirmation-denied', solve('reveal-pending', [('confirmation-denied', N)], N), 'redacted')\ncheck('revealed / sensitive-update', solve('revealed', [('sensitive-update', N)], N), 'redacting-update')\ncheck('redacting-update / redaction-applied', solve('redacting-update', [('redaction-applied', N)], N), 'redacted-updated')\ncheck('redacted-updated / reveal-click', solve('redacted-updated', [('reveal-click', N)], N), 'updated-reveal-pending')\ncheck('updated-reveal-pending / confirmation-accepted', solve('updated-reveal-pending', [('confirmation-accepted', N)], N), 'revealed-updated')\ncheck('reveal-pending / screen-locked', solve('reveal-pending', [('screen-locked', N)], N), 'redacted')\ncheck('older notification incarnation', solve('revealed', [('screen-locked', N - 1)], N), 'revealed')\ncheck('future notification incarnation', solve('revealed', [('screen-locked', N + 1)], N), 'revealed')\ncheck('unknown event is inert', solve('revealed', [('unknown-event', N)], N), 'revealed')\ncheck('empty delivery batch', solve('revealed', [], N), 'revealed')\ncheck('N stale deliveries before current delivery', solve('revealed', [('screen-locked', N - 1)] * N + [('screen-locked', N)], N), 'redacting')\ncheck('trace screen-locked then redaction-applied', solve('revealed', [('screen-locked', N), ('redaction-applied', N)], N), 'redacted')\ncheck('trace redaction-applied then reveal-click', solve('redacting', [('redaction-applied', N), ('reveal-click', N)], N), 'reveal-pending')\ncheck('trace reveal-click then confirmation-accepted', solve('redacted', [('reveal-click', N), ('confirmation-accepted', N)], N), 'revealed')\ncheck('trace reveal-click then confirmation-denied', solve('redacted', [('reveal-click', N), ('confirmation-denied', N)], N), 'redacted')\ncheck('trace reveal-click then screen-locked', solve('redacted', [('reveal-click', N), ('screen-locked', N)], N), 'redacted')\ncheck('trace confirmation-accepted then screen-locked', solve('reveal-pending', [('confirmation-accepted', N), ('screen-locked', N)], N), 'redacting')\ncheck('trace confirmation-accepted then sensitive-update', solve('reveal-pending', [('confirmation-accepted', N), ('sensitive-update', N)], N), 'redacting-update')\ncheck('trace confirmation-denied then reveal-click', solve('reveal-pending', [('confirmation-denied', N), ('reveal-click', N)], N), 'reveal-pending')\ncheck('trace sensitive-update then redaction-applied', solve('revealed', [('sensitive-update', N), ('redaction-applied', N)], N), 'redacted-updated')\ncheck('trace redaction-applied then reveal-click', solve('redacting-update', [('redaction-applied', N), ('reveal-click', N)], N), 'updated-reveal-pending')\ncheck('trace reveal-click then confirmation-accepted', solve('redacted-updated', [('reveal-click', N), ('confirmation-accepted', N)], N), 'revealed-updated')\ncheck('trace screen-locked then reveal-click', solve('reveal-pending', [('screen-locked', N), ('reveal-click', N)], N), 'reveal-pending')\ncheck('domain state regression 1: rendered', solve('revealed', [('screen-locked', N, {})], N, {}, 'rendered'), {'phase': 'redacting', 'value': None})\ncheck('domain state regression 2: rendered', solve('reveal-pending', [('confirmation-accepted', N, {})], N, {'locked': True, 'rendered': None}, 'rendered'), {'phase': 'redacted', 'value': None})\ncheck('domain state regression 3: approved', solve('reveal-pending', [('confirmation-accepted', N, {'revision': 0})], N, {'rendered': None}, 'approved'), {'phase': 'redacted', 'value': 0})\ncheck('domain state regression 4: rendered', solve('reveal-pending', [('confirmation-accepted', N, {'revision': 1})], N, {'rendered': None}, 'rendered'), {'phase': 'revealed', 'value': 'message'})\ncheck('domain state regression 5: rendered', solve('revealed', [('sensitive-update', N, {'text': 'new secret'})], N, {}, 'rendered'), {'phase': 'redacting-update', 'value': None})\ncheck('domain state regression 6: rendered', solve('updated-reveal-pending', [('confirmation-accepted', N, {'revision': 2})], N, {'revision': 2, 'secret': 'new', 'rendered': None}, 'rendered'), {'phase': 'revealed-updated', 'value': 'new'})\ncheck('domain state regression 7: rendered', solve('revealed', [('sensitive-update', N, {'text': 'replacement'}), ('redaction-applied', N, {}), ('reveal-click', N, {}), ('confirmation-accepted', N, {'revision': 2})], N, {}, 'rendered'), {'phase': 'revealed-updated', 'value': 'replacement'})\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-privacy-redaction-01","generated_at":"2026-09-29T14:42:38.702137+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 revealed / screen-locked transition to redacting; preserve the other explicitly stipulated transitions.","root_cause":"Locking leaves sensitive preview content mounted.","sha256":"d582721b0f2ace73525560a824af9f025812ef8297b232d0cf3731f3dc563ffa","title":"Sensitive notification preview redaction: screen-locked from revealed · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.122,"exit_code":1,"observations":[{"actual":"hidden","check":"revealed / screen-locked","expected":"redacting","passed":false},{"actual":"redacted","check":"redacting / redaction-applied","expected":"redacted","passed":true},{"actual":"reveal-pending","check":"redacted / reveal-click","expected":"reveal-pending","passed":true},{"actual":"revealed","check":"reveal-pending / confirmation-accepted","expected":"revealed","passed":true},{"actual":"redacted","check":"reveal-pending / confirmation-denied","expected":"redacted","passed":true},{"actual":"redacting-update","check":"revealed / sensitive-update","expected":"redacting-update","passed":true},{"actual":"redacted-updated","check":"redacting-update / redaction-applied","expected":"redacted-updated","passed":true},{"actual":"updated-reveal-pending","check":"redacted-updated / reveal-click","expected":"updated-reveal-pending","passed":true},{"actual":"revealed-updated","check":"updated-reveal-pending / confirmation-accepted","expected":"revealed-updated","passed":true},{"actual":"redacted","check":"reveal-pending / screen-locked","expected":"redacted","passed":true},{"actual":"revealed","check":"older notification incarnation","expected":"revealed","passed":true},{"actual":"revealed","check":"future notification incarnation","expected":"revealed","passed":true},{"actual":"revealed","check":"unknown event is inert","expected":"revealed","passed":true},{"actual":"revealed","check":"empty delivery batch","expected":"revealed","passed":true},{"actual":"hidden","check":"N stale deliveries before current delivery","expected":"redacting","passed":false},{"actual":"hidden","check":"trace screen-locked then redaction-applied","expected":"redacted","passed":false},{"actual":"reveal-pending","check":"trace redaction-applied then reveal-click","expected":"reveal-pending","passed":true},{"actual":"revealed","check":"trace reveal-click then confirmation-accepted","expected":"revealed","passed":true},{"actual":"redacted","check":"trace reveal-click then confirmation-denied","expected":"redacted","passed":true},{"actual":"redacted","check":"trace reveal-click then screen-locked","expected":"redacted","passed":true},{"actual":"hidden","check":"trace confirmation-accepted then screen-locked","expected":"redacting","passed":false},{"actual":"redacting-update","check":"trace confirmation-accepted then sensitive-update","expected":"redacting-update","passed":true},{"actual":"reveal-pending","check":"trace confirmation-denied then reveal-click","expected":"reveal-pending","passed":true},{"actual":"redacted-updated","check":"trace sensitive-update then redaction-applied","expected":"redacted-updated","passed":true},{"actual":"updated-reveal-pending","check":"trace redaction-applied then reveal-click","expected":"updated-reveal-pending","passed":true},{"actual":"revealed-updated","check":"trace reveal-click then confirmation-accepted","expected":"revealed-updated","passed":true},{"actual":"reveal-pending","check":"trace screen-locked then reveal-click","expected":"reveal-pending","passed":true},{"actual":{"phase":"hidden","value":null},"check":"domain state regression 1: rendered","expected":{"phase":"redacting","value":null},"passed":false},{"actual":{"phase":"redacted","value":null},"check":"domain state regression 2: rendered","expected":{"phase":"redacted","value":null},"passed":true},{"actual":{"phase":"redacted","value":0},"check":"domain state regression 3: approved","expected":{"phase":"redacted","value":0},"passed":true},{"actual":{"phase":"revealed","value":"message"},"check":"domain state regression 4: rendered","expected":{"phase":"revealed","value":"message"},"passed":true},{"actual":{"phase":"redacting-update","value":null},"check":"domain state regression 5: rendered","expected":{"phase":"redacting-update","value":null},"passed":true},{"actual":{"phase":"revealed-updated","value":"new"},"check":"domain state regression 6: rendered","expected":{"phase":"revealed-updated","value":"new"},"passed":true},{"actual":{"phase":"revealed-updated","value":"replacement"},"check":"domain state regression 7: rendered","expected":{"phase":"revealed-updated","value":"replacement"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"revealed / screen-locked\", \"actual\": \"hidden\", \"expected\": \"redacting\", \"passed\": false}, {\"check\": \"redacting / redaction-applied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"redacted / reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"reveal-pending / confirmation-accepted\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"reveal-pending / confirmation-denied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"revealed / sensitive-update\", \"actual\": \"redacting-update\", \"expected\": \"redacting-update\", \"passed\": true}, {\"check\": \"redacting-update / redaction-applied\", \"actual\": \"redacted-updated\", \"expected\": \"redacted-updated\", \"passed\": true}, {\"check\": \"redacted-updated / reveal-click\", \"actual\": \"updated-reveal-pending\", \"expected\": \"updated-reveal-pending\", \"passed\": true}, {\"check\": \"updated-reveal-pending / confirmation-accepted\", \"actual\": \"revealed-updated\", \"expected\": \"revealed-updated\", \"passed\": true}, {\"check\": \"reveal-pending / screen-locked\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"hidden\", \"expected\": \"redacting\", \"passed\": false}, {\"check\": \"trace screen-locked then redaction-applied\", \"actual\": \"hidden\", \"expected\": \"redacted\", \"passed\": false}, {\"check\": \"trace redaction-applied then reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"trace reveal-click then confirmation-accepted\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"trace reveal-click then confirmation-denied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"trace reveal-click then screen-locked\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"trace confirmation-accepted then screen-locked\", \"actual\": \"hidden\", \"expected\": \"redacting\", \"passed\": false}, {\"check\": \"trace confirmation-accepted then sensitive-update\", \"actual\": \"redacting-update\", \"expected\": \"redacting-update\", \"passed\": true}, {\"check\": \"trace confirmation-denied then reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"trace sensitive-update then redaction-applied\", \"actual\": \"redacted-updated\", \"expected\": \"redacted-updated\", \"passed\": true}, {\"check\": \"trace redaction-applied then reveal-click\", \"actual\": \"updated-reveal-pending\", \"expected\": \"updated-reveal-pending\", \"passed\": true}, {\"check\": \"trace reveal-click then confirmation-accepted\", \"actual\": \"revealed-updated\", \"expected\": \"revealed-updated\", \"passed\": true}, {\"check\": \"trace screen-locked then reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"domain state regression 1: rendered\", \"actual\": {\"phase\": \"hidden\", \"value\": null}, \"expected\": {\"phase\": \"redacting\", \"value\": null}, \"passed\": false}, {\"check\": \"domain state regression 2: rendered\", \"actual\": {\"phase\": \"redacted\", \"value\": null}, \"expected\": {\"phase\": \"redacted\", \"value\": null}, \"passed\": true}, {\"check\": \"domain state regression 3: approved\", \"actual\": {\"phase\": \"redacted\", \"value\": 0}, \"expected\": {\"phase\": \"redacted\", \"value\": 0}, \"passed\": true}, {\"check\": \"domain state regression 4: rendered\", \"actual\": {\"phase\": \"revealed\", \"value\": \"message\"}, \"expected\": {\"phase\": \"revealed\", \"value\": \"message\"}, \"passed\": true}, {\"check\": \"domain state regression 5: rendered\", \"actual\": {\"phase\": \"redacting-update\", \"value\": null}, \"expected\": {\"phase\": \"redacting-update\", \"value\": null}, \"passed\": true}, {\"check\": \"domain state regression 6: rendered\", \"actual\": {\"phase\": \"revealed-updated\", \"value\": \"new\"}, \"expected\": {\"phase\": \"revealed-updated\", \"value\": \"new\"}, \"passed\": true}, {\"check\": \"domain state regression 7: rendered\", \"actual\": {\"phase\": \"revealed-updated\", \"value\": \"replacement\"}, \"expected\": {\"phase\": \"revealed-updated\", \"value\": \"replacement\"}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.421,"exit_code":1,"observations":[{"actual":"revealed","check":"revealed / screen-locked","expected":"redacting","passed":false},{"actual":"redacted","check":"redacting / redaction-applied","expected":"redacted","passed":true},{"actual":"reveal-pending","check":"redacted / reveal-click","expected":"reveal-pending","passed":true},{"actual":"revealed","check":"reveal-pending / confirmation-accepted","expected":"revealed","passed":true},{"actual":"redacted","check":"reveal-pending / confirmation-denied","expected":"redacted","passed":true},{"actual":"redacting-update","check":"revealed / sensitive-update","expected":"redacting-update","passed":true},{"actual":"redacted-updated","check":"redacting-update / redaction-applied","expected":"redacted-updated","passed":true},{"actual":"updated-reveal-pending","check":"redacted-updated / reveal-click","expected":"updated-reveal-pending","passed":true},{"actual":"revealed-updated","check":"updated-reveal-pending / confirmation-accepted","expected":"revealed-updated","passed":true},{"actual":"redacted","check":"reveal-pending / screen-locked","expected":"redacted","passed":true},{"actual":"revealed","check":"older notification incarnation","expected":"revealed","passed":true},{"actual":"revealed","check":"future notification incarnation","expected":"revealed","passed":true},{"actual":"revealed","check":"unknown event is inert","expected":"revealed","passed":true},{"actual":"revealed","check":"empty delivery batch","expected":"revealed","passed":true},{"actual":"revealed","check":"N stale deliveries before current delivery","expected":"redacting","passed":false},{"actual":"revealed","check":"trace screen-locked then redaction-applied","expected":"redacted","passed":false},{"actual":"reveal-pending","check":"trace redaction-applied then reveal-click","expected":"reveal-pending","passed":true},{"actual":"revealed","check":"trace reveal-click then confirmation-accepted","expected":"revealed","passed":true},{"actual":"redacted","check":"trace reveal-click then confirmation-denied","expected":"redacted","passed":true},{"actual":"redacted","check":"trace reveal-click then screen-locked","expected":"redacted","passed":true},{"actual":"revealed","check":"trace confirmation-accepted then screen-locked","expected":"redacting","passed":false},{"actual":"redacting-update","check":"trace confirmation-accepted then sensitive-update","expected":"redacting-update","passed":true},{"actual":"reveal-pending","check":"trace confirmation-denied then reveal-click","expected":"reveal-pending","passed":true},{"actual":"redacted-updated","check":"trace sensitive-update then redaction-applied","expected":"redacted-updated","passed":true},{"actual":"updated-reveal-pending","check":"trace redaction-applied then reveal-click","expected":"updated-reveal-pending","passed":true},{"actual":"revealed-updated","check":"trace reveal-click then confirmation-accepted","expected":"revealed-updated","passed":true},{"actual":"reveal-pending","check":"trace screen-locked then reveal-click","expected":"reveal-pending","passed":true},{"actual":{"phase":"revealed","value":"message"},"check":"domain state regression 1: rendered","expected":{"phase":"redacting","value":null},"passed":false},{"actual":{"phase":"redacted","value":null},"check":"domain state regression 2: rendered","expected":{"phase":"redacted","value":null},"passed":true},{"actual":{"phase":"redacted","value":0},"check":"domain state regression 3: approved","expected":{"phase":"redacted","value":0},"passed":true},{"actual":{"phase":"revealed","value":"message"},"check":"domain state regression 4: rendered","expected":{"phase":"revealed","value":"message"},"passed":true},{"actual":{"phase":"redacting-update","value":null},"check":"domain state regression 5: rendered","expected":{"phase":"redacting-update","value":null},"passed":true},{"actual":{"phase":"revealed-updated","value":"new"},"check":"domain state regression 6: rendered","expected":{"phase":"revealed-updated","value":"new"},"passed":true},{"actual":{"phase":"revealed-updated","value":"replacement"},"check":"domain state regression 7: rendered","expected":{"phase":"revealed-updated","value":"replacement"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"revealed / screen-locked\", \"actual\": \"revealed\", \"expected\": \"redacting\", \"passed\": false}, {\"check\": \"redacting / redaction-applied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"redacted / reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"reveal-pending / confirmation-accepted\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"reveal-pending / confirmation-denied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"revealed / sensitive-update\", \"actual\": \"redacting-update\", \"expected\": \"redacting-update\", \"passed\": true}, {\"check\": \"redacting-update / redaction-applied\", \"actual\": \"redacted-updated\", \"expected\": \"redacted-updated\", \"passed\": true}, {\"check\": \"redacted-updated / reveal-click\", \"actual\": \"updated-reveal-pending\", \"expected\": \"updated-reveal-pending\", \"passed\": true}, {\"check\": \"updated-reveal-pending / confirmation-accepted\", \"actual\": \"revealed-updated\", \"expected\": \"revealed-updated\", \"passed\": true}, {\"check\": \"reveal-pending / screen-locked\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"revealed\", \"expected\": \"redacting\", \"passed\": false}, {\"check\": \"trace screen-locked then redaction-applied\", \"actual\": \"revealed\", \"expected\": \"redacted\", \"passed\": false}, {\"check\": \"trace redaction-applied then reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"trace reveal-click then confirmation-accepted\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"trace reveal-click then confirmation-denied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"trace reveal-click then screen-locked\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"trace confirmation-accepted then screen-locked\", \"actual\": \"revealed\", \"expected\": \"redacting\", \"passed\": false}, {\"check\": \"trace confirmation-accepted then sensitive-update\", \"actual\": \"redacting-update\", \"expected\": \"redacting-update\", \"passed\": true}, {\"check\": \"trace confirmation-denied then reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"trace sensitive-update then redaction-applied\", \"actual\": \"redacted-updated\", \"expected\": \"redacted-updated\", \"passed\": true}, {\"check\": \"trace redaction-applied then reveal-click\", \"actual\": \"updated-reveal-pending\", \"expected\": \"updated-reveal-pending\", \"passed\": true}, {\"check\": \"trace reveal-click then confirmation-accepted\", \"actual\": \"revealed-updated\", \"expected\": \"revealed-updated\", \"passed\": true}, {\"check\": \"trace screen-locked then reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"domain state regression 1: rendered\", \"actual\": {\"phase\": \"revealed\", \"value\": \"message\"}, \"expected\": {\"phase\": \"redacting\", \"value\": null}, \"passed\": false}, {\"check\": \"domain state regression 2: rendered\", \"actual\": {\"phase\": \"redacted\", \"value\": null}, \"expected\": {\"phase\": \"redacted\", \"value\": null}, \"passed\": true}, {\"check\": \"domain state regression 3: approved\", \"actual\": {\"phase\": \"redacted\", \"value\": 0}, \"expected\": {\"phase\": \"redacted\", \"value\": 0}, \"passed\": true}, {\"check\": \"domain state regression 4: rendered\", \"actual\": {\"phase\": \"revealed\", \"value\": \"message\"}, \"expected\": {\"phase\": \"revealed\", \"value\": \"message\"}, \"passed\": true}, {\"check\": \"domain state regression 5: rendered\", \"actual\": {\"phase\": \"redacting-update\", \"value\": null}, \"expected\": {\"phase\": \"redacting-update\", \"value\": null}, \"passed\": true}, {\"check\": \"domain state regression 6: rendered\", \"actual\": {\"phase\": \"revealed-updated\", \"value\": \"new\"}, \"expected\": {\"phase\": \"revealed-updated\", \"value\": \"new\"}, \"passed\": true}, {\"check\": \"domain state regression 7: rendered\", \"actual\": {\"phase\": \"revealed-updated\", \"value\": \"replacement\"}, \"expected\": {\"phase\": \"revealed-updated\", \"value\": \"replacement\"}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.105,"exit_code":0,"observations":[{"actual":"redacting","check":"revealed / screen-locked","expected":"redacting","passed":true},{"actual":"redacted","check":"redacting / redaction-applied","expected":"redacted","passed":true},{"actual":"reveal-pending","check":"redacted / reveal-click","expected":"reveal-pending","passed":true},{"actual":"revealed","check":"reveal-pending / confirmation-accepted","expected":"revealed","passed":true},{"actual":"redacted","check":"reveal-pending / confirmation-denied","expected":"redacted","passed":true},{"actual":"redacting-update","check":"revealed / sensitive-update","expected":"redacting-update","passed":true},{"actual":"redacted-updated","check":"redacting-update / redaction-applied","expected":"redacted-updated","passed":true},{"actual":"updated-reveal-pending","check":"redacted-updated / reveal-click","expected":"updated-reveal-pending","passed":true},{"actual":"revealed-updated","check":"updated-reveal-pending / confirmation-accepted","expected":"revealed-updated","passed":true},{"actual":"redacted","check":"reveal-pending / screen-locked","expected":"redacted","passed":true},{"actual":"revealed","check":"older notification incarnation","expected":"revealed","passed":true},{"actual":"revealed","check":"future notification incarnation","expected":"revealed","passed":true},{"actual":"revealed","check":"unknown event is inert","expected":"revealed","passed":true},{"actual":"revealed","check":"empty delivery batch","expected":"revealed","passed":true},{"actual":"redacting","check":"N stale deliveries before current delivery","expected":"redacting","passed":true},{"actual":"redacted","check":"trace screen-locked then redaction-applied","expected":"redacted","passed":true},{"actual":"reveal-pending","check":"trace redaction-applied then reveal-click","expected":"reveal-pending","passed":true},{"actual":"revealed","check":"trace reveal-click then confirmation-accepted","expected":"revealed","passed":true},{"actual":"redacted","check":"trace reveal-click then confirmation-denied","expected":"redacted","passed":true},{"actual":"redacted","check":"trace reveal-click then screen-locked","expected":"redacted","passed":true},{"actual":"redacting","check":"trace confirmation-accepted then screen-locked","expected":"redacting","passed":true},{"actual":"redacting-update","check":"trace confirmation-accepted then sensitive-update","expected":"redacting-update","passed":true},{"actual":"reveal-pending","check":"trace confirmation-denied then reveal-click","expected":"reveal-pending","passed":true},{"actual":"redacted-updated","check":"trace sensitive-update then redaction-applied","expected":"redacted-updated","passed":true},{"actual":"updated-reveal-pending","check":"trace redaction-applied then reveal-click","expected":"updated-reveal-pending","passed":true},{"actual":"revealed-updated","check":"trace reveal-click then confirmation-accepted","expected":"revealed-updated","passed":true},{"actual":"reveal-pending","check":"trace screen-locked then reveal-click","expected":"reveal-pending","passed":true},{"actual":{"phase":"redacting","value":null},"check":"domain state regression 1: rendered","expected":{"phase":"redacting","value":null},"passed":true},{"actual":{"phase":"redacted","value":null},"check":"domain state regression 2: rendered","expected":{"phase":"redacted","value":null},"passed":true},{"actual":{"phase":"redacted","value":0},"check":"domain state regression 3: approved","expected":{"phase":"redacted","value":0},"passed":true},{"actual":{"phase":"revealed","value":"message"},"check":"domain state regression 4: rendered","expected":{"phase":"revealed","value":"message"},"passed":true},{"actual":{"phase":"redacting-update","value":null},"check":"domain state regression 5: rendered","expected":{"phase":"redacting-update","value":null},"passed":true},{"actual":{"phase":"revealed-updated","value":"new"},"check":"domain state regression 6: rendered","expected":{"phase":"revealed-updated","value":"new"},"passed":true},{"actual":{"phase":"revealed-updated","value":"replacement"},"check":"domain state regression 7: rendered","expected":{"phase":"revealed-updated","value":"replacement"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"revealed / screen-locked\", \"actual\": \"redacting\", \"expected\": \"redacting\", \"passed\": true}, {\"check\": \"redacting / redaction-applied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"redacted / reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"reveal-pending / confirmation-accepted\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"reveal-pending / confirmation-denied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"revealed / sensitive-update\", \"actual\": \"redacting-update\", \"expected\": \"redacting-update\", \"passed\": true}, {\"check\": \"redacting-update / redaction-applied\", \"actual\": \"redacted-updated\", \"expected\": \"redacted-updated\", \"passed\": true}, {\"check\": \"redacted-updated / reveal-click\", \"actual\": \"updated-reveal-pending\", \"expected\": \"updated-reveal-pending\", \"passed\": true}, {\"check\": \"updated-reveal-pending / confirmation-accepted\", \"actual\": \"revealed-updated\", \"expected\": \"revealed-updated\", \"passed\": true}, {\"check\": \"reveal-pending / screen-locked\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"redacting\", \"expected\": \"redacting\", \"passed\": true}, {\"check\": \"trace screen-locked then redaction-applied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"trace redaction-applied then reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"trace reveal-click then confirmation-accepted\", \"actual\": \"revealed\", \"expected\": \"revealed\", \"passed\": true}, {\"check\": \"trace reveal-click then confirmation-denied\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"trace reveal-click then screen-locked\", \"actual\": \"redacted\", \"expected\": \"redacted\", \"passed\": true}, {\"check\": \"trace confirmation-accepted then screen-locked\", \"actual\": \"redacting\", \"expected\": \"redacting\", \"passed\": true}, {\"check\": \"trace confirmation-accepted then sensitive-update\", \"actual\": \"redacting-update\", \"expected\": \"redacting-update\", \"passed\": true}, {\"check\": \"trace confirmation-denied then reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"trace sensitive-update then redaction-applied\", \"actual\": \"redacted-updated\", \"expected\": \"redacted-updated\", \"passed\": true}, {\"check\": \"trace redaction-applied then reveal-click\", \"actual\": \"updated-reveal-pending\", \"expected\": \"updated-reveal-pending\", \"passed\": true}, {\"check\": \"trace reveal-click then confirmation-accepted\", \"actual\": \"revealed-updated\", \"expected\": \"revealed-updated\", \"passed\": true}, {\"check\": \"trace screen-locked then reveal-click\", \"actual\": \"reveal-pending\", \"expected\": \"reveal-pending\", \"passed\": true}, {\"check\": \"domain state regression 1: rendered\", \"actual\": {\"phase\": \"redacting\", \"value\": null}, \"expected\": {\"phase\": \"redacting\", \"value\": null}, \"passed\": true}, {\"check\": \"domain state regression 2: rendered\", \"actual\": {\"phase\": \"redacted\", \"value\": null}, \"expected\": {\"phase\": \"redacted\", \"value\": null}, \"passed\": true}, {\"check\": \"domain state regression 3: approved\", \"actual\": {\"phase\": \"redacted\", \"value\": 0}, \"expected\": {\"phase\": \"redacted\", \"value\": 0}, \"passed\": true}, {\"check\": \"domain state regression 4: rendered\", \"actual\": {\"phase\": \"revealed\", \"value\": \"message\"}, \"expected\": {\"phase\": \"revealed\", \"value\": \"message\"}, \"passed\": true}, {\"check\": \"domain state regression 5: rendered\", \"actual\": {\"phase\": \"redacting-update\", \"value\": null}, \"expected\": {\"phase\": \"redacting-update\", \"value\": null}, \"passed\": true}, {\"check\": \"domain state regression 6: rendered\", \"actual\": {\"phase\": \"revealed-updated\", \"value\": \"new\"}, \"expected\": {\"phase\": \"revealed-updated\", \"value\": \"new\"}, \"passed\": true}, {\"check\": \"domain state regression 7: rendered\", \"actual\": {\"phase\": \"revealed-updated\", \"value\": \"replacement\"}, \"expected\": {\"phase\": \"revealed-updated\", \"value\": \"replacement\"}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}