{"abstract":"The collapse-during-load event leaves a notification in collapsed instead of collapse-pending.","category":"Notification interfaces","checks":41,"contract":"Grouped notification interaction is a bounded visual-notification workflow with mutable policy state {'children': ['a', 'b'], 'request': 3, 'wanted_open': False}. Its default transition relation is {('collapsed', 'expand'): 'expanded', ('expanded', 'collapse'): 'collapsed', ('collapsed', 'uncached-expand'): 'loading', ('loading', 'children-arrive'): 'expanded', ('loading', 'children-fail'): 'load-error', ('load-error', 'retry-expand'): 'loading', ('loading', 'collapse-during-load'): 'collapse-pending', ('collapse-pending', 'children-arrive'): 'collapsed', ('expanded', 'last-child-removed'): 'empty', ('empty', 'first-child-added'): 'collapsed'}; 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-group-expansion","failed_approach":"Keeping expansion active disregards the user's collapse intent.","family":"s3-notification-interfaces-group-expansion-07","id":"FA-34121","implementations":{"attempt":{"sha256":"e5c0f83ac17f62f80b877fce8311c44d9827e7644dd720aec26051d1521b3cfb","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 = {('collapsed', 'expand'): 'expanded', ('expanded', 'collapse'): 'collapsed', ('collapsed', 'uncached-expand'): 'loading', ('loading', 'children-arrive'): 'expanded', ('loading', 'children-fail'): 'load-error', ('load-error', 'retry-expand'): 'loading', ('loading', 'collapse-during-load'): 'expanded', ('collapse-pending', 'children-arrive'): 'collapsed', ('expanded', 'last-child-removed'): 'empty', ('empty', 'first-child-added'): 'collapsed'}\n    data = json.loads(json.dumps({'children': ['a', 'b'], 'request': 3, 'wanted_open': False})) if payload is None else {**json.loads(json.dumps({'children': ['a', 'b'], 'request': 3, 'wanted_open': False})), **json.loads(json.dumps(payload))}\n    state = initial\n    for delivery in events:\n        event, event_generation = delivery[:2]\n        arg = delivery[2] if len(delivery) > 2 else {}\n        if event_generation == generation:\n            previous = state\n            if event in ('children-arrive','children-fail') and arg.get('request',data['request']) != data['request']: event = 'unknown-event'\n            if event in ('expand','uncached-expand','retry-expand'): data['wanted_open'] = True\n            if event in ('collapse','collapse-during-load'): data['wanted_open'] = False\n            if event == 'children-arrive' and 'children' in arg: data['children'] = list(dict.fromkeys(arg['children']))\n            if event == 'last-child-removed': data['children'] = []\n            if event == 'first-child-added': data['children'] = [arg.get('child','new')]\n            state = table.get((state, event), state)\n            if state == 'expanded': data['wanted_open'] = True\n            if state in ('collapsed','empty'): data['wanted_open'] = 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('collapsed / expand', solve('collapsed', [('expand', N)], N), 'expanded')\ncheck('expanded / collapse', solve('expanded', [('collapse', N)], N), 'collapsed')\ncheck('collapsed / uncached-expand', solve('collapsed', [('uncached-expand', N)], N), 'loading')\ncheck('loading / children-arrive', solve('loading', [('children-arrive', N)], N), 'expanded')\ncheck('loading / children-fail', solve('loading', [('children-fail', N)], N), 'load-error')\ncheck('load-error / retry-expand', solve('load-error', [('retry-expand', N)], N), 'loading')\ncheck('loading / collapse-during-load', solve('loading', [('collapse-during-load', N)], N), 'collapse-pending')\ncheck('collapse-pending / children-arrive', solve('collapse-pending', [('children-arrive', N)], N), 'collapsed')\ncheck('expanded / last-child-removed', solve('expanded', [('last-child-removed', N)], N), 'empty')\ncheck('empty / first-child-added', solve('empty', [('first-child-added', N)], N), 'collapsed')\ncheck('older notification incarnation', solve('collapsed', [('expand', N - 1)], N), 'collapsed')\ncheck('future notification incarnation', solve('collapsed', [('expand', N + 1)], N), 'collapsed')\ncheck('unknown event is inert', solve('collapsed', [('unknown-event', N)], N), 'collapsed')\ncheck('empty delivery batch', solve('collapsed', [], N), 'collapsed')\ncheck('N stale deliveries before current delivery', solve('collapsed', [('expand', N - 1)] * N + [('expand', N)], N), 'expanded')\ncheck('trace expand then collapse', solve('collapsed', [('expand', N), ('collapse', N)], N), 'collapsed')\ncheck('trace expand then last-child-removed', solve('collapsed', [('expand', N), ('last-child-removed', N)], N), 'empty')\ncheck('trace collapse then expand', solve('expanded', [('collapse', N), ('expand', N)], N), 'expanded')\ncheck('trace collapse then uncached-expand', solve('expanded', [('collapse', N), ('uncached-expand', N)], N), 'loading')\ncheck('trace uncached-expand then children-arrive', solve('collapsed', [('uncached-expand', N), ('children-arrive', N)], N), 'expanded')\ncheck('trace uncached-expand then children-fail', solve('collapsed', [('uncached-expand', N), ('children-fail', N)], N), 'load-error')\ncheck('trace uncached-expand then collapse-during-load', solve('collapsed', [('uncached-expand', N), ('collapse-during-load', N)], N), 'collapse-pending')\ncheck('trace children-arrive then collapse', solve('loading', [('children-arrive', N), ('collapse', N)], N), 'collapsed')\ncheck('trace children-arrive then last-child-removed', solve('loading', [('children-arrive', N), ('last-child-removed', N)], N), 'empty')\ncheck('trace children-fail then retry-expand', solve('loading', [('children-fail', N), ('retry-expand', N)], N), 'loading')\ncheck('trace retry-expand then children-arrive', solve('load-error', [('retry-expand', N), ('children-arrive', N)], N), 'expanded')\ncheck('trace retry-expand then children-fail', solve('load-error', [('retry-expand', N), ('children-fail', N)], N), 'load-error')\ncheck('trace retry-expand then collapse-during-load', solve('load-error', [('retry-expand', N), ('collapse-during-load', N)], N), 'collapse-pending')\ncheck('trace collapse-during-load then children-arrive', solve('loading', [('collapse-during-load', N), ('children-arrive', N)], N), 'collapsed')\ncheck('trace children-arrive then expand', solve('collapse-pending', [('children-arrive', N), ('expand', N)], N), 'expanded')\ncheck('trace children-arrive then uncached-expand', solve('collapse-pending', [('children-arrive', N), ('uncached-expand', N)], N), 'loading')\ncheck('trace last-child-removed then first-child-added', solve('expanded', [('last-child-removed', N), ('first-child-added', N)], N), 'collapsed')\ncheck('trace first-child-added then expand', solve('empty', [('first-child-added', N), ('expand', N)], N), 'expanded')\ncheck('trace first-child-added then uncached-expand', solve('empty', [('first-child-added', N), ('uncached-expand', N)], N), 'loading')\ncheck('domain state regression 1: children', solve('loading', [('children-arrive', N, {'request': 2, 'children': ['old']})], N, {}, 'children'), {'phase': 'loading', 'value': ['a', 'b']})\ncheck('domain state regression 2: children', solve('loading', [('children-arrive', N, {'children': ['x', 'x', 'y']})], N, {}, 'children'), {'phase': 'expanded', 'value': ['x', 'y']})\ncheck('domain state regression 3: wanted_open', solve('collapse-pending', [('children-arrive', N, {'children': ['x']})], N, {}, 'wanted_open'), {'phase': 'collapsed', 'value': False})\ncheck('domain state regression 4: children', solve('expanded', [('last-child-removed', N, {})], N, {}, 'children'), {'phase': 'empty', 'value': []})\ncheck('domain state regression 5: children', solve('empty', [('first-child-added', N, {'child': 'z'})], N, {}, 'children'), {'phase': 'collapsed', 'value': ['z']})\ncheck('domain state regression 6: children', solve('expanded', [('collapse', N, {})], N, {}, 'children'), {'phase': 'collapsed', 'value': ['a', 'b']})\ncheck('domain state regression 7: children', solve('collapsed', [('uncached-expand', N, {}), ('collapse-during-load', N, {}), ('children-arrive', N, {'children': ['x', 'y']})], N, {}, 'children'), {'phase': 'collapsed', 'value': ['x', 'y']})\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":"49bde631af4041ce72d14d2fa2232464ec438af553e13b8429ccd34d0b6f5705","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 = {('collapsed', 'expand'): 'expanded', ('expanded', 'collapse'): 'collapsed', ('collapsed', 'uncached-expand'): 'loading', ('loading', 'children-arrive'): 'expanded', ('loading', 'children-fail'): 'load-error', ('load-error', 'retry-expand'): 'loading', ('loading', 'collapse-during-load'): 'collapsed', ('collapse-pending', 'children-arrive'): 'collapsed', ('expanded', 'last-child-removed'): 'empty', ('empty', 'first-child-added'): 'collapsed'}\n    data = json.loads(json.dumps({'children': ['a', 'b'], 'request': 3, 'wanted_open': False})) if payload is None else {**json.loads(json.dumps({'children': ['a', 'b'], 'request': 3, 'wanted_open': False})), **json.loads(json.dumps(payload))}\n    state = initial\n    for delivery in events:\n        event, event_generation = delivery[:2]\n        arg = delivery[2] if len(delivery) > 2 else {}\n        if event_generation == generation:\n            previous = state\n            if event in ('children-arrive','children-fail') and arg.get('request',data['request']) != data['request']: event = 'unknown-event'\n            if event in ('expand','uncached-expand','retry-expand'): data['wanted_open'] = True\n            if event in ('collapse','collapse-during-load'): data['wanted_open'] = False\n            if event == 'children-arrive' and 'children' in arg: data['children'] = list(dict.fromkeys(arg['children']))\n            if event == 'last-child-removed': data['children'] = []\n            if event == 'first-child-added': data['children'] = [arg.get('child','new')]\n            state = table.get((state, event), state)\n            if state == 'expanded': data['wanted_open'] = True\n            if state in ('collapsed','empty'): data['wanted_open'] = 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('collapsed / expand', solve('collapsed', [('expand', N)], N), 'expanded')\ncheck('expanded / collapse', solve('expanded', [('collapse', N)], N), 'collapsed')\ncheck('collapsed / uncached-expand', solve('collapsed', [('uncached-expand', N)], N), 'loading')\ncheck('loading / children-arrive', solve('loading', [('children-arrive', N)], N), 'expanded')\ncheck('loading / children-fail', solve('loading', [('children-fail', N)], N), 'load-error')\ncheck('load-error / retry-expand', solve('load-error', [('retry-expand', N)], N), 'loading')\ncheck('loading / collapse-during-load', solve('loading', [('collapse-during-load', N)], N), 'collapse-pending')\ncheck('collapse-pending / children-arrive', solve('collapse-pending', [('children-arrive', N)], N), 'collapsed')\ncheck('expanded / last-child-removed', solve('expanded', [('last-child-removed', N)], N), 'empty')\ncheck('empty / first-child-added', solve('empty', [('first-child-added', N)], N), 'collapsed')\ncheck('older notification incarnation', solve('collapsed', [('expand', N - 1)], N), 'collapsed')\ncheck('future notification incarnation', solve('collapsed', [('expand', N + 1)], N), 'collapsed')\ncheck('unknown event is inert', solve('collapsed', [('unknown-event', N)], N), 'collapsed')\ncheck('empty delivery batch', solve('collapsed', [], N), 'collapsed')\ncheck('N stale deliveries before current delivery', solve('collapsed', [('expand', N - 1)] * N + [('expand', N)], N), 'expanded')\ncheck('trace expand then collapse', solve('collapsed', [('expand', N), ('collapse', N)], N), 'collapsed')\ncheck('trace expand then last-child-removed', solve('collapsed', [('expand', N), ('last-child-removed', N)], N), 'empty')\ncheck('trace collapse then expand', solve('expanded', [('collapse', N), ('expand', N)], N), 'expanded')\ncheck('trace collapse then uncached-expand', solve('expanded', [('collapse', N), ('uncached-expand', N)], N), 'loading')\ncheck('trace uncached-expand then children-arrive', solve('collapsed', [('uncached-expand', N), ('children-arrive', N)], N), 'expanded')\ncheck('trace uncached-expand then children-fail', solve('collapsed', [('uncached-expand', N), ('children-fail', N)], N), 'load-error')\ncheck('trace uncached-expand then collapse-during-load', solve('collapsed', [('uncached-expand', N), ('collapse-during-load', N)], N), 'collapse-pending')\ncheck('trace children-arrive then collapse', solve('loading', [('children-arrive', N), ('collapse', N)], N), 'collapsed')\ncheck('trace children-arrive then last-child-removed', solve('loading', [('children-arrive', N), ('last-child-removed', N)], N), 'empty')\ncheck('trace children-fail then retry-expand', solve('loading', [('children-fail', N), ('retry-expand', N)], N), 'loading')\ncheck('trace retry-expand then children-arrive', solve('load-error', [('retry-expand', N), ('children-arrive', N)], N), 'expanded')\ncheck('trace retry-expand then children-fail', solve('load-error', [('retry-expand', N), ('children-fail', N)], N), 'load-error')\ncheck('trace retry-expand then collapse-during-load', solve('load-error', [('retry-expand', N), ('collapse-during-load', N)], N), 'collapse-pending')\ncheck('trace collapse-during-load then children-arrive', solve('loading', [('collapse-during-load', N), ('children-arrive', N)], N), 'collapsed')\ncheck('trace children-arrive then expand', solve('collapse-pending', [('children-arrive', N), ('expand', N)], N), 'expanded')\ncheck('trace children-arrive then uncached-expand', solve('collapse-pending', [('children-arrive', N), ('uncached-expand', N)], N), 'loading')\ncheck('trace last-child-removed then first-child-added', solve('expanded', [('last-child-removed', N), ('first-child-added', N)], N), 'collapsed')\ncheck('trace first-child-added then expand', solve('empty', [('first-child-added', N), ('expand', N)], N), 'expanded')\ncheck('trace first-child-added then uncached-expand', solve('empty', [('first-child-added', N), ('uncached-expand', N)], N), 'loading')\ncheck('domain state regression 1: children', solve('loading', [('children-arrive', N, {'request': 2, 'children': ['old']})], N, {}, 'children'), {'phase': 'loading', 'value': ['a', 'b']})\ncheck('domain state regression 2: children', solve('loading', [('children-arrive', N, {'children': ['x', 'x', 'y']})], N, {}, 'children'), {'phase': 'expanded', 'value': ['x', 'y']})\ncheck('domain state regression 3: wanted_open', solve('collapse-pending', [('children-arrive', N, {'children': ['x']})], N, {}, 'wanted_open'), {'phase': 'collapsed', 'value': False})\ncheck('domain state regression 4: children', solve('expanded', [('last-child-removed', N, {})], N, {}, 'children'), {'phase': 'empty', 'value': []})\ncheck('domain state regression 5: children', solve('empty', [('first-child-added', N, {'child': 'z'})], N, {}, 'children'), {'phase': 'collapsed', 'value': ['z']})\ncheck('domain state regression 6: children', solve('expanded', [('collapse', N, {})], N, {}, 'children'), {'phase': 'collapsed', 'value': ['a', 'b']})\ncheck('domain state regression 7: children', solve('collapsed', [('uncached-expand', N, {}), ('collapse-during-load', N, {}), ('children-arrive', N, {'children': ['x', 'y']})], N, {}, 'children'), {'phase': 'collapsed', 'value': ['x', 'y']})\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":"8d360c087c50c3bf7b717357bd9581455e79e318bc35da05c062f3b8fa7fb912","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 = {('collapsed', 'expand'): 'expanded', ('expanded', 'collapse'): 'collapsed', ('collapsed', 'uncached-expand'): 'loading', ('loading', 'children-arrive'): 'expanded', ('loading', 'children-fail'): 'load-error', ('load-error', 'retry-expand'): 'loading', ('loading', 'collapse-during-load'): 'collapse-pending', ('collapse-pending', 'children-arrive'): 'collapsed', ('expanded', 'last-child-removed'): 'empty', ('empty', 'first-child-added'): 'collapsed'}\n    data = json.loads(json.dumps({'children': ['a', 'b'], 'request': 3, 'wanted_open': False})) if payload is None else {**json.loads(json.dumps({'children': ['a', 'b'], 'request': 3, 'wanted_open': False})), **json.loads(json.dumps(payload))}\n    state = initial\n    for delivery in events:\n        event, event_generation = delivery[:2]\n        arg = delivery[2] if len(delivery) > 2 else {}\n        if event_generation == generation:\n            previous = state\n            if event in ('children-arrive','children-fail') and arg.get('request',data['request']) != data['request']: event = 'unknown-event'\n            if event in ('expand','uncached-expand','retry-expand'): data['wanted_open'] = True\n            if event in ('collapse','collapse-during-load'): data['wanted_open'] = False\n            if event == 'children-arrive' and 'children' in arg: data['children'] = list(dict.fromkeys(arg['children']))\n            if event == 'last-child-removed': data['children'] = []\n            if event == 'first-child-added': data['children'] = [arg.get('child','new')]\n            state = table.get((state, event), state)\n            if state == 'expanded': data['wanted_open'] = True\n            if state in ('collapsed','empty'): data['wanted_open'] = 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('collapsed / expand', solve('collapsed', [('expand', N)], N), 'expanded')\ncheck('expanded / collapse', solve('expanded', [('collapse', N)], N), 'collapsed')\ncheck('collapsed / uncached-expand', solve('collapsed', [('uncached-expand', N)], N), 'loading')\ncheck('loading / children-arrive', solve('loading', [('children-arrive', N)], N), 'expanded')\ncheck('loading / children-fail', solve('loading', [('children-fail', N)], N), 'load-error')\ncheck('load-error / retry-expand', solve('load-error', [('retry-expand', N)], N), 'loading')\ncheck('loading / collapse-during-load', solve('loading', [('collapse-during-load', N)], N), 'collapse-pending')\ncheck('collapse-pending / children-arrive', solve('collapse-pending', [('children-arrive', N)], N), 'collapsed')\ncheck('expanded / last-child-removed', solve('expanded', [('last-child-removed', N)], N), 'empty')\ncheck('empty / first-child-added', solve('empty', [('first-child-added', N)], N), 'collapsed')\ncheck('older notification incarnation', solve('collapsed', [('expand', N - 1)], N), 'collapsed')\ncheck('future notification incarnation', solve('collapsed', [('expand', N + 1)], N), 'collapsed')\ncheck('unknown event is inert', solve('collapsed', [('unknown-event', N)], N), 'collapsed')\ncheck('empty delivery batch', solve('collapsed', [], N), 'collapsed')\ncheck('N stale deliveries before current delivery', solve('collapsed', [('expand', N - 1)] * N + [('expand', N)], N), 'expanded')\ncheck('trace expand then collapse', solve('collapsed', [('expand', N), ('collapse', N)], N), 'collapsed')\ncheck('trace expand then last-child-removed', solve('collapsed', [('expand', N), ('last-child-removed', N)], N), 'empty')\ncheck('trace collapse then expand', solve('expanded', [('collapse', N), ('expand', N)], N), 'expanded')\ncheck('trace collapse then uncached-expand', solve('expanded', [('collapse', N), ('uncached-expand', N)], N), 'loading')\ncheck('trace uncached-expand then children-arrive', solve('collapsed', [('uncached-expand', N), ('children-arrive', N)], N), 'expanded')\ncheck('trace uncached-expand then children-fail', solve('collapsed', [('uncached-expand', N), ('children-fail', N)], N), 'load-error')\ncheck('trace uncached-expand then collapse-during-load', solve('collapsed', [('uncached-expand', N), ('collapse-during-load', N)], N), 'collapse-pending')\ncheck('trace children-arrive then collapse', solve('loading', [('children-arrive', N), ('collapse', N)], N), 'collapsed')\ncheck('trace children-arrive then last-child-removed', solve('loading', [('children-arrive', N), ('last-child-removed', N)], N), 'empty')\ncheck('trace children-fail then retry-expand', solve('loading', [('children-fail', N), ('retry-expand', N)], N), 'loading')\ncheck('trace retry-expand then children-arrive', solve('load-error', [('retry-expand', N), ('children-arrive', N)], N), 'expanded')\ncheck('trace retry-expand then children-fail', solve('load-error', [('retry-expand', N), ('children-fail', N)], N), 'load-error')\ncheck('trace retry-expand then collapse-during-load', solve('load-error', [('retry-expand', N), ('collapse-during-load', N)], N), 'collapse-pending')\ncheck('trace collapse-during-load then children-arrive', solve('loading', [('collapse-during-load', N), ('children-arrive', N)], N), 'collapsed')\ncheck('trace children-arrive then expand', solve('collapse-pending', [('children-arrive', N), ('expand', N)], N), 'expanded')\ncheck('trace children-arrive then uncached-expand', solve('collapse-pending', [('children-arrive', N), ('uncached-expand', N)], N), 'loading')\ncheck('trace last-child-removed then first-child-added', solve('expanded', [('last-child-removed', N), ('first-child-added', N)], N), 'collapsed')\ncheck('trace first-child-added then expand', solve('empty', [('first-child-added', N), ('expand', N)], N), 'expanded')\ncheck('trace first-child-added then uncached-expand', solve('empty', [('first-child-added', N), ('uncached-expand', N)], N), 'loading')\ncheck('domain state regression 1: children', solve('loading', [('children-arrive', N, {'request': 2, 'children': ['old']})], N, {}, 'children'), {'phase': 'loading', 'value': ['a', 'b']})\ncheck('domain state regression 2: children', solve('loading', [('children-arrive', N, {'children': ['x', 'x', 'y']})], N, {}, 'children'), {'phase': 'expanded', 'value': ['x', 'y']})\ncheck('domain state regression 3: wanted_open', solve('collapse-pending', [('children-arrive', N, {'children': ['x']})], N, {}, 'wanted_open'), {'phase': 'collapsed', 'value': False})\ncheck('domain state regression 4: children', solve('expanded', [('last-child-removed', N, {})], N, {}, 'children'), {'phase': 'empty', 'value': []})\ncheck('domain state regression 5: children', solve('empty', [('first-child-added', N, {'child': 'z'})], N, {}, 'children'), {'phase': 'collapsed', 'value': ['z']})\ncheck('domain state regression 6: children', solve('expanded', [('collapse', N, {})], N, {}, 'children'), {'phase': 'collapsed', 'value': ['a', 'b']})\ncheck('domain state regression 7: children', solve('collapsed', [('uncached-expand', N, {}), ('collapse-during-load', N, {}), ('children-arrive', N, {'children': ['x', 'y']})], N, {}, 'children'), {'phase': 'collapsed', 'value': ['x', 'y']})\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-group-expansion-07","generated_at":"2026-09-29T14:42:28.810215+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 loading / collapse-during-load transition to collapse-pending; preserve the other explicitly stipulated transitions.","root_cause":"Collapsing forgets that a response is outstanding.","sha256":"c80b7761b9acabc546c7a36a7e540045c02877f56ee0b0869bce1dd43fee11bb","title":"Grouped notification interaction: collapse-during-load from loading · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.203,"exit_code":1,"observations":[{"actual":"expanded","check":"collapsed / expand","expected":"expanded","passed":true},{"actual":"collapsed","check":"expanded / collapse","expected":"collapsed","passed":true},{"actual":"loading","check":"collapsed / uncached-expand","expected":"loading","passed":true},{"actual":"expanded","check":"loading / children-arrive","expected":"expanded","passed":true},{"actual":"load-error","check":"loading / children-fail","expected":"load-error","passed":true},{"actual":"loading","check":"load-error / retry-expand","expected":"loading","passed":true},{"actual":"expanded","check":"loading / collapse-during-load","expected":"collapse-pending","passed":false},{"actual":"collapsed","check":"collapse-pending / children-arrive","expected":"collapsed","passed":true},{"actual":"empty","check":"expanded / last-child-removed","expected":"empty","passed":true},{"actual":"collapsed","check":"empty / first-child-added","expected":"collapsed","passed":true},{"actual":"collapsed","check":"older notification incarnation","expected":"collapsed","passed":true},{"actual":"collapsed","check":"future notification incarnation","expected":"collapsed","passed":true},{"actual":"collapsed","check":"unknown event is inert","expected":"collapsed","passed":true},{"actual":"collapsed","check":"empty delivery batch","expected":"collapsed","passed":true},{"actual":"expanded","check":"N stale deliveries before current delivery","expected":"expanded","passed":true},{"actual":"collapsed","check":"trace expand then collapse","expected":"collapsed","passed":true},{"actual":"empty","check":"trace expand then last-child-removed","expected":"empty","passed":true},{"actual":"expanded","check":"trace collapse then expand","expected":"expanded","passed":true},{"actual":"loading","check":"trace collapse then uncached-expand","expected":"loading","passed":true},{"actual":"expanded","check":"trace uncached-expand then children-arrive","expected":"expanded","passed":true},{"actual":"load-error","check":"trace uncached-expand then children-fail","expected":"load-error","passed":true},{"actual":"expanded","check":"trace uncached-expand then collapse-during-load","expected":"collapse-pending","passed":false},{"actual":"collapsed","check":"trace children-arrive then collapse","expected":"collapsed","passed":true},{"actual":"empty","check":"trace children-arrive then last-child-removed","expected":"empty","passed":true},{"actual":"loading","check":"trace children-fail then retry-expand","expected":"loading","passed":true},{"actual":"expanded","check":"trace retry-expand then children-arrive","expected":"expanded","passed":true},{"actual":"load-error","check":"trace retry-expand then children-fail","expected":"load-error","passed":true},{"actual":"expanded","check":"trace retry-expand then collapse-during-load","expected":"collapse-pending","passed":false},{"actual":"expanded","check":"trace collapse-during-load then children-arrive","expected":"collapsed","passed":false},{"actual":"expanded","check":"trace children-arrive then expand","expected":"expanded","passed":true},{"actual":"loading","check":"trace children-arrive then uncached-expand","expected":"loading","passed":true},{"actual":"collapsed","check":"trace last-child-removed then first-child-added","expected":"collapsed","passed":true},{"actual":"expanded","check":"trace first-child-added then expand","expected":"expanded","passed":true},{"actual":"loading","check":"trace first-child-added then uncached-expand","expected":"loading","passed":true},{"actual":{"phase":"loading","value":["a","b"]},"check":"domain state regression 1: children","expected":{"phase":"loading","value":["a","b"]},"passed":true},{"actual":{"phase":"expanded","value":["x","y"]},"check":"domain state regression 2: children","expected":{"phase":"expanded","value":["x","y"]},"passed":true},{"actual":{"phase":"collapsed","value":false},"check":"domain state regression 3: wanted_open","expected":{"phase":"collapsed","value":false},"passed":true},{"actual":{"phase":"empty","value":[]},"check":"domain state regression 4: children","expected":{"phase":"empty","value":[]},"passed":true},{"actual":{"phase":"collapsed","value":["z"]},"check":"domain state regression 5: children","expected":{"phase":"collapsed","value":["z"]},"passed":true},{"actual":{"phase":"collapsed","value":["a","b"]},"check":"domain state regression 6: children","expected":{"phase":"collapsed","value":["a","b"]},"passed":true},{"actual":{"phase":"expanded","value":["x","y"]},"check":"domain state regression 7: children","expected":{"phase":"collapsed","value":["x","y"]},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"collapsed / expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"expanded / collapse\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"collapsed / uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"loading / children-arrive\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"loading / children-fail\", \"actual\": \"load-error\", \"expected\": \"load-error\", \"passed\": true}, {\"check\": \"load-error / retry-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"loading / collapse-during-load\", \"actual\": \"expanded\", \"expected\": \"collapse-pending\", \"passed\": false}, {\"check\": \"collapse-pending / children-arrive\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"expanded / last-child-removed\", \"actual\": \"empty\", \"expected\": \"empty\", \"passed\": true}, {\"check\": \"empty / first-child-added\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace expand then collapse\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace expand then last-child-removed\", \"actual\": \"empty\", \"expected\": \"empty\", \"passed\": true}, {\"check\": \"trace collapse then expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace collapse then uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"trace uncached-expand then children-arrive\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace uncached-expand then children-fail\", \"actual\": \"load-error\", \"expected\": \"load-error\", \"passed\": true}, {\"check\": \"trace uncached-expand then collapse-during-load\", \"actual\": \"expanded\", \"expected\": \"collapse-pending\", \"passed\": false}, {\"check\": \"trace children-arrive then collapse\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace children-arrive then last-child-removed\", \"actual\": \"empty\", \"expected\": \"empty\", \"passed\": true}, {\"check\": \"trace children-fail then retry-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"trace retry-expand then children-arrive\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace retry-expand then children-fail\", \"actual\": \"load-error\", \"expected\": \"load-error\", \"passed\": true}, {\"check\": \"trace retry-expand then collapse-during-load\", \"actual\": \"expanded\", \"expected\": \"collapse-pending\", \"passed\": false}, {\"check\": \"trace collapse-during-load then children-arrive\", \"actual\": \"expanded\", \"expected\": \"collapsed\", \"passed\": false}, {\"check\": \"trace children-arrive then expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace children-arrive then uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"trace last-child-removed then first-child-added\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace first-child-added then expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace first-child-added then uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"domain state regression 1: children\", \"actual\": {\"phase\": \"loading\", \"value\": [\"a\", \"b\"]}, \"expected\": {\"phase\": \"loading\", \"value\": [\"a\", \"b\"]}, \"passed\": true}, {\"check\": \"domain state regression 2: children\", \"actual\": {\"phase\": \"expanded\", \"value\": [\"x\", \"y\"]}, \"expected\": {\"phase\": \"expanded\", \"value\": [\"x\", \"y\"]}, \"passed\": true}, {\"check\": \"domain state regression 3: wanted_open\", \"actual\": {\"phase\": \"collapsed\", \"value\": false}, \"expected\": {\"phase\": \"collapsed\", \"value\": false}, \"passed\": true}, {\"check\": \"domain state regression 4: children\", \"actual\": {\"phase\": \"empty\", \"value\": []}, \"expected\": {\"phase\": \"empty\", \"value\": []}, \"passed\": true}, {\"check\": \"domain state regression 5: children\", \"actual\": {\"phase\": \"collapsed\", \"value\": [\"z\"]}, \"expected\": {\"phase\": \"collapsed\", \"value\": [\"z\"]}, \"passed\": true}, {\"check\": \"domain state regression 6: children\", \"actual\": {\"phase\": \"collapsed\", \"value\": [\"a\", \"b\"]}, \"expected\": {\"phase\": \"collapsed\", \"value\": [\"a\", \"b\"]}, \"passed\": true}, {\"check\": \"domain state regression 7: children\", \"actual\": {\"phase\": \"expanded\", \"value\": [\"x\", \"y\"]}, \"expected\": {\"phase\": \"collapsed\", \"value\": [\"x\", \"y\"]}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.303,"exit_code":1,"observations":[{"actual":"expanded","check":"collapsed / expand","expected":"expanded","passed":true},{"actual":"collapsed","check":"expanded / collapse","expected":"collapsed","passed":true},{"actual":"loading","check":"collapsed / uncached-expand","expected":"loading","passed":true},{"actual":"expanded","check":"loading / children-arrive","expected":"expanded","passed":true},{"actual":"load-error","check":"loading / children-fail","expected":"load-error","passed":true},{"actual":"loading","check":"load-error / retry-expand","expected":"loading","passed":true},{"actual":"collapsed","check":"loading / collapse-during-load","expected":"collapse-pending","passed":false},{"actual":"collapsed","check":"collapse-pending / children-arrive","expected":"collapsed","passed":true},{"actual":"empty","check":"expanded / last-child-removed","expected":"empty","passed":true},{"actual":"collapsed","check":"empty / first-child-added","expected":"collapsed","passed":true},{"actual":"collapsed","check":"older notification incarnation","expected":"collapsed","passed":true},{"actual":"collapsed","check":"future notification incarnation","expected":"collapsed","passed":true},{"actual":"collapsed","check":"unknown event is inert","expected":"collapsed","passed":true},{"actual":"collapsed","check":"empty delivery batch","expected":"collapsed","passed":true},{"actual":"expanded","check":"N stale deliveries before current delivery","expected":"expanded","passed":true},{"actual":"collapsed","check":"trace expand then collapse","expected":"collapsed","passed":true},{"actual":"empty","check":"trace expand then last-child-removed","expected":"empty","passed":true},{"actual":"expanded","check":"trace collapse then expand","expected":"expanded","passed":true},{"actual":"loading","check":"trace collapse then uncached-expand","expected":"loading","passed":true},{"actual":"expanded","check":"trace uncached-expand then children-arrive","expected":"expanded","passed":true},{"actual":"load-error","check":"trace uncached-expand then children-fail","expected":"load-error","passed":true},{"actual":"collapsed","check":"trace uncached-expand then collapse-during-load","expected":"collapse-pending","passed":false},{"actual":"collapsed","check":"trace children-arrive then collapse","expected":"collapsed","passed":true},{"actual":"empty","check":"trace children-arrive then last-child-removed","expected":"empty","passed":true},{"actual":"loading","check":"trace children-fail then retry-expand","expected":"loading","passed":true},{"actual":"expanded","check":"trace retry-expand then children-arrive","expected":"expanded","passed":true},{"actual":"load-error","check":"trace retry-expand then children-fail","expected":"load-error","passed":true},{"actual":"collapsed","check":"trace retry-expand then collapse-during-load","expected":"collapse-pending","passed":false},{"actual":"collapsed","check":"trace collapse-during-load then children-arrive","expected":"collapsed","passed":true},{"actual":"expanded","check":"trace children-arrive then expand","expected":"expanded","passed":true},{"actual":"loading","check":"trace children-arrive then uncached-expand","expected":"loading","passed":true},{"actual":"collapsed","check":"trace last-child-removed then first-child-added","expected":"collapsed","passed":true},{"actual":"expanded","check":"trace first-child-added then expand","expected":"expanded","passed":true},{"actual":"loading","check":"trace first-child-added then uncached-expand","expected":"loading","passed":true},{"actual":{"phase":"loading","value":["a","b"]},"check":"domain state regression 1: children","expected":{"phase":"loading","value":["a","b"]},"passed":true},{"actual":{"phase":"expanded","value":["x","y"]},"check":"domain state regression 2: children","expected":{"phase":"expanded","value":["x","y"]},"passed":true},{"actual":{"phase":"collapsed","value":false},"check":"domain state regression 3: wanted_open","expected":{"phase":"collapsed","value":false},"passed":true},{"actual":{"phase":"empty","value":[]},"check":"domain state regression 4: children","expected":{"phase":"empty","value":[]},"passed":true},{"actual":{"phase":"collapsed","value":["z"]},"check":"domain state regression 5: children","expected":{"phase":"collapsed","value":["z"]},"passed":true},{"actual":{"phase":"collapsed","value":["a","b"]},"check":"domain state regression 6: children","expected":{"phase":"collapsed","value":["a","b"]},"passed":true},{"actual":{"phase":"collapsed","value":["x","y"]},"check":"domain state regression 7: children","expected":{"phase":"collapsed","value":["x","y"]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"collapsed / expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"expanded / collapse\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"collapsed / uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"loading / children-arrive\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"loading / children-fail\", \"actual\": \"load-error\", \"expected\": \"load-error\", \"passed\": true}, {\"check\": \"load-error / retry-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"loading / collapse-during-load\", \"actual\": \"collapsed\", \"expected\": \"collapse-pending\", \"passed\": false}, {\"check\": \"collapse-pending / children-arrive\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"expanded / last-child-removed\", \"actual\": \"empty\", \"expected\": \"empty\", \"passed\": true}, {\"check\": \"empty / first-child-added\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace expand then collapse\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace expand then last-child-removed\", \"actual\": \"empty\", \"expected\": \"empty\", \"passed\": true}, {\"check\": \"trace collapse then expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace collapse then uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"trace uncached-expand then children-arrive\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace uncached-expand then children-fail\", \"actual\": \"load-error\", \"expected\": \"load-error\", \"passed\": true}, {\"check\": \"trace uncached-expand then collapse-during-load\", \"actual\": \"collapsed\", \"expected\": \"collapse-pending\", \"passed\": false}, {\"check\": \"trace children-arrive then collapse\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace children-arrive then last-child-removed\", \"actual\": \"empty\", \"expected\": \"empty\", \"passed\": true}, {\"check\": \"trace children-fail then retry-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"trace retry-expand then children-arrive\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace retry-expand then children-fail\", \"actual\": \"load-error\", \"expected\": \"load-error\", \"passed\": true}, {\"check\": \"trace retry-expand then collapse-during-load\", \"actual\": \"collapsed\", \"expected\": \"collapse-pending\", \"passed\": false}, {\"check\": \"trace collapse-during-load then children-arrive\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace children-arrive then expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace children-arrive then uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"trace last-child-removed then first-child-added\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace first-child-added then expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace first-child-added then uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"domain state regression 1: children\", \"actual\": {\"phase\": \"loading\", \"value\": [\"a\", \"b\"]}, \"expected\": {\"phase\": \"loading\", \"value\": [\"a\", \"b\"]}, \"passed\": true}, {\"check\": \"domain state regression 2: children\", \"actual\": {\"phase\": \"expanded\", \"value\": [\"x\", \"y\"]}, \"expected\": {\"phase\": \"expanded\", \"value\": [\"x\", \"y\"]}, \"passed\": true}, {\"check\": \"domain state regression 3: wanted_open\", \"actual\": {\"phase\": \"collapsed\", \"value\": false}, \"expected\": {\"phase\": \"collapsed\", \"value\": false}, \"passed\": true}, {\"check\": \"domain state regression 4: children\", \"actual\": {\"phase\": \"empty\", \"value\": []}, \"expected\": {\"phase\": \"empty\", \"value\": []}, \"passed\": true}, {\"check\": \"domain state regression 5: children\", \"actual\": {\"phase\": \"collapsed\", \"value\": [\"z\"]}, \"expected\": {\"phase\": \"collapsed\", \"value\": [\"z\"]}, \"passed\": true}, {\"check\": \"domain state regression 6: children\", \"actual\": {\"phase\": \"collapsed\", \"value\": [\"a\", \"b\"]}, \"expected\": {\"phase\": \"collapsed\", \"value\": [\"a\", \"b\"]}, \"passed\": true}, {\"check\": \"domain state regression 7: children\", \"actual\": {\"phase\": \"collapsed\", \"value\": [\"x\", \"y\"]}, \"expected\": {\"phase\": \"collapsed\", \"value\": [\"x\", \"y\"]}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":47.029,"exit_code":0,"observations":[{"actual":"expanded","check":"collapsed / expand","expected":"expanded","passed":true},{"actual":"collapsed","check":"expanded / collapse","expected":"collapsed","passed":true},{"actual":"loading","check":"collapsed / uncached-expand","expected":"loading","passed":true},{"actual":"expanded","check":"loading / children-arrive","expected":"expanded","passed":true},{"actual":"load-error","check":"loading / children-fail","expected":"load-error","passed":true},{"actual":"loading","check":"load-error / retry-expand","expected":"loading","passed":true},{"actual":"collapse-pending","check":"loading / collapse-during-load","expected":"collapse-pending","passed":true},{"actual":"collapsed","check":"collapse-pending / children-arrive","expected":"collapsed","passed":true},{"actual":"empty","check":"expanded / last-child-removed","expected":"empty","passed":true},{"actual":"collapsed","check":"empty / first-child-added","expected":"collapsed","passed":true},{"actual":"collapsed","check":"older notification incarnation","expected":"collapsed","passed":true},{"actual":"collapsed","check":"future notification incarnation","expected":"collapsed","passed":true},{"actual":"collapsed","check":"unknown event is inert","expected":"collapsed","passed":true},{"actual":"collapsed","check":"empty delivery batch","expected":"collapsed","passed":true},{"actual":"expanded","check":"N stale deliveries before current delivery","expected":"expanded","passed":true},{"actual":"collapsed","check":"trace expand then collapse","expected":"collapsed","passed":true},{"actual":"empty","check":"trace expand then last-child-removed","expected":"empty","passed":true},{"actual":"expanded","check":"trace collapse then expand","expected":"expanded","passed":true},{"actual":"loading","check":"trace collapse then uncached-expand","expected":"loading","passed":true},{"actual":"expanded","check":"trace uncached-expand then children-arrive","expected":"expanded","passed":true},{"actual":"load-error","check":"trace uncached-expand then children-fail","expected":"load-error","passed":true},{"actual":"collapse-pending","check":"trace uncached-expand then collapse-during-load","expected":"collapse-pending","passed":true},{"actual":"collapsed","check":"trace children-arrive then collapse","expected":"collapsed","passed":true},{"actual":"empty","check":"trace children-arrive then last-child-removed","expected":"empty","passed":true},{"actual":"loading","check":"trace children-fail then retry-expand","expected":"loading","passed":true},{"actual":"expanded","check":"trace retry-expand then children-arrive","expected":"expanded","passed":true},{"actual":"load-error","check":"trace retry-expand then children-fail","expected":"load-error","passed":true},{"actual":"collapse-pending","check":"trace retry-expand then collapse-during-load","expected":"collapse-pending","passed":true},{"actual":"collapsed","check":"trace collapse-during-load then children-arrive","expected":"collapsed","passed":true},{"actual":"expanded","check":"trace children-arrive then expand","expected":"expanded","passed":true},{"actual":"loading","check":"trace children-arrive then uncached-expand","expected":"loading","passed":true},{"actual":"collapsed","check":"trace last-child-removed then first-child-added","expected":"collapsed","passed":true},{"actual":"expanded","check":"trace first-child-added then expand","expected":"expanded","passed":true},{"actual":"loading","check":"trace first-child-added then uncached-expand","expected":"loading","passed":true},{"actual":{"phase":"loading","value":["a","b"]},"check":"domain state regression 1: children","expected":{"phase":"loading","value":["a","b"]},"passed":true},{"actual":{"phase":"expanded","value":["x","y"]},"check":"domain state regression 2: children","expected":{"phase":"expanded","value":["x","y"]},"passed":true},{"actual":{"phase":"collapsed","value":false},"check":"domain state regression 3: wanted_open","expected":{"phase":"collapsed","value":false},"passed":true},{"actual":{"phase":"empty","value":[]},"check":"domain state regression 4: children","expected":{"phase":"empty","value":[]},"passed":true},{"actual":{"phase":"collapsed","value":["z"]},"check":"domain state regression 5: children","expected":{"phase":"collapsed","value":["z"]},"passed":true},{"actual":{"phase":"collapsed","value":["a","b"]},"check":"domain state regression 6: children","expected":{"phase":"collapsed","value":["a","b"]},"passed":true},{"actual":{"phase":"collapsed","value":["x","y"]},"check":"domain state regression 7: children","expected":{"phase":"collapsed","value":["x","y"]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"collapsed / expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"expanded / collapse\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"collapsed / uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"loading / children-arrive\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"loading / children-fail\", \"actual\": \"load-error\", \"expected\": \"load-error\", \"passed\": true}, {\"check\": \"load-error / retry-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"loading / collapse-during-load\", \"actual\": \"collapse-pending\", \"expected\": \"collapse-pending\", \"passed\": true}, {\"check\": \"collapse-pending / children-arrive\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"expanded / last-child-removed\", \"actual\": \"empty\", \"expected\": \"empty\", \"passed\": true}, {\"check\": \"empty / first-child-added\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"older notification incarnation\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"future notification incarnation\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"unknown event is inert\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"empty delivery batch\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"N stale deliveries before current delivery\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace expand then collapse\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace expand then last-child-removed\", \"actual\": \"empty\", \"expected\": \"empty\", \"passed\": true}, {\"check\": \"trace collapse then expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace collapse then uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"trace uncached-expand then children-arrive\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace uncached-expand then children-fail\", \"actual\": \"load-error\", \"expected\": \"load-error\", \"passed\": true}, {\"check\": \"trace uncached-expand then collapse-during-load\", \"actual\": \"collapse-pending\", \"expected\": \"collapse-pending\", \"passed\": true}, {\"check\": \"trace children-arrive then collapse\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace children-arrive then last-child-removed\", \"actual\": \"empty\", \"expected\": \"empty\", \"passed\": true}, {\"check\": \"trace children-fail then retry-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"trace retry-expand then children-arrive\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace retry-expand then children-fail\", \"actual\": \"load-error\", \"expected\": \"load-error\", \"passed\": true}, {\"check\": \"trace retry-expand then collapse-during-load\", \"actual\": \"collapse-pending\", \"expected\": \"collapse-pending\", \"passed\": true}, {\"check\": \"trace collapse-during-load then children-arrive\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace children-arrive then expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace children-arrive then uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"trace last-child-removed then first-child-added\", \"actual\": \"collapsed\", \"expected\": \"collapsed\", \"passed\": true}, {\"check\": \"trace first-child-added then expand\", \"actual\": \"expanded\", \"expected\": \"expanded\", \"passed\": true}, {\"check\": \"trace first-child-added then uncached-expand\", \"actual\": \"loading\", \"expected\": \"loading\", \"passed\": true}, {\"check\": \"domain state regression 1: children\", \"actual\": {\"phase\": \"loading\", \"value\": [\"a\", \"b\"]}, \"expected\": {\"phase\": \"loading\", \"value\": [\"a\", \"b\"]}, \"passed\": true}, {\"check\": \"domain state regression 2: children\", \"actual\": {\"phase\": \"expanded\", \"value\": [\"x\", \"y\"]}, \"expected\": {\"phase\": \"expanded\", \"value\": [\"x\", \"y\"]}, \"passed\": true}, {\"check\": \"domain state regression 3: wanted_open\", \"actual\": {\"phase\": \"collapsed\", \"value\": false}, \"expected\": {\"phase\": \"collapsed\", \"value\": false}, \"passed\": true}, {\"check\": \"domain state regression 4: children\", \"actual\": {\"phase\": \"empty\", \"value\": []}, \"expected\": {\"phase\": \"empty\", \"value\": []}, \"passed\": true}, {\"check\": \"domain state regression 5: children\", \"actual\": {\"phase\": \"collapsed\", \"value\": [\"z\"]}, \"expected\": {\"phase\": \"collapsed\", \"value\": [\"z\"]}, \"passed\": true}, {\"check\": \"domain state regression 6: children\", \"actual\": {\"phase\": \"collapsed\", \"value\": [\"a\", \"b\"]}, \"expected\": {\"phase\": \"collapsed\", \"value\": [\"a\", \"b\"]}, \"passed\": true}, {\"check\": \"domain state regression 7: children\", \"actual\": {\"phase\": \"collapsed\", \"value\": [\"x\", \"y\"]}, \"expected\": {\"phase\": \"collapsed\", \"value\": [\"x\", \"y\"]}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}