{"abstract":"Clicks on overlay descendants are mistaken for outside clicks.","category":"Overlay interactions","checks":8,"contract":"Only the topmost overlay handles Escape/outside policy; inside descendants are exempt; explicit unmount removes only its identity.","evaluation_group":"xi-dismiss-stack","failed_approach":"Reversing membership closes only for internal interactions.","family":"xi-dismiss-stack-inside-target","id":"FA-8696","implementations":{"attempt":{"sha256":"6052ade380cb3beeedcc4e14a3c18cd54e5ba436f2c29bbeaf33450c4d3f46c0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(layers, event, target):\n    layers = [dict(x) for x in layers]\n    if not layers: return layers\n    active = layers[-1]\n    if event == 'escape' and active['escape']: return layers[:-1]\n    if event == 'outside' and active['outside'] and target in active['inside']: return layers[:-1]\n    if event == 'remove': return [x for x in layers if x['id'] != target]\n    return layers\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('topmost', solve([dict(id='a',escape=False,outside=False,inside=['a']),dict(id='z',escape=True,outside=True,inside=['z'])], 'escape', None), [{'id': 'a', 'escape': False, 'outside': False, 'inside': ['a']}])\ncheck('protected escape', solve([dict(id='a',escape=False,outside=False,inside=['a'])], 'escape', None), [{'id': 'a', 'escape': False, 'outside': False, 'inside': ['a']}])\ncheck('protected outside', solve([dict(id='a',escape=True,outside=False,inside=['a'])], 'outside', 'x'), [{'id': 'a', 'escape': True, 'outside': False, 'inside': ['a']}])\ncheck('inside child', solve([dict(id='a',escape=True,outside=True,inside=['a','child'])], 'outside', 'child'), [{'id': 'a', 'escape': True, 'outside': True, 'inside': ['a', 'child']}])\ncheck('outside', solve([dict(id='a',escape=True,outside=True,inside=['a'])], 'outside', 'x'), [])\ncheck('remove', solve([dict(id='a',escape=True,outside=True,inside=['a']),dict(id='b',escape=True,outside=True,inside=['b'])], 'remove', 'a'), [{'id': 'b', 'escape': True, 'outside': True, 'inside': ['b']}])\ncheck('parameterized stack depth', solve([dict(id=str(i),escape=True,outside=True,inside=[str(i)]) for i in range(N)],'escape',None), [dict(id=str(i),escape=True,outside=True,inside=[str(i)]) for i in range(N-1)])\nfor repetition in range(N):\n    check('repeat remove', solve([dict(id='a',escape=True,outside=True,inside=['a']),dict(id='b',escape=True,outside=True,inside=['b'])], 'remove', 'a'), [{'id': 'b', 'escape': True, 'outside': True, 'inside': ['b']}])\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":"0e196e7661df2986d321372e122b3c006fca700e0d4de749ebd33eceae1a9bbf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(layers, event, target):\n    layers = [dict(x) for x in layers]\n    if not layers: return layers\n    active = layers[-1]\n    if event == 'escape' and active['escape']: return layers[:-1]\n    if event == 'outside' and active['outside'] and target != active['id']: return layers[:-1]\n    if event == 'remove': return [x for x in layers if x['id'] != target]\n    return layers\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('topmost', solve([dict(id='a',escape=False,outside=False,inside=['a']),dict(id='z',escape=True,outside=True,inside=['z'])], 'escape', None), [{'id': 'a', 'escape': False, 'outside': False, 'inside': ['a']}])\ncheck('protected escape', solve([dict(id='a',escape=False,outside=False,inside=['a'])], 'escape', None), [{'id': 'a', 'escape': False, 'outside': False, 'inside': ['a']}])\ncheck('protected outside', solve([dict(id='a',escape=True,outside=False,inside=['a'])], 'outside', 'x'), [{'id': 'a', 'escape': True, 'outside': False, 'inside': ['a']}])\ncheck('inside child', solve([dict(id='a',escape=True,outside=True,inside=['a','child'])], 'outside', 'child'), [{'id': 'a', 'escape': True, 'outside': True, 'inside': ['a', 'child']}])\ncheck('outside', solve([dict(id='a',escape=True,outside=True,inside=['a'])], 'outside', 'x'), [])\ncheck('remove', solve([dict(id='a',escape=True,outside=True,inside=['a']),dict(id='b',escape=True,outside=True,inside=['b'])], 'remove', 'a'), [{'id': 'b', 'escape': True, 'outside': True, 'inside': ['b']}])\ncheck('parameterized stack depth', solve([dict(id=str(i),escape=True,outside=True,inside=[str(i)]) for i in range(N)],'escape',None), [dict(id=str(i),escape=True,outside=True,inside=[str(i)]) for i in range(N-1)])\nfor repetition in range(N):\n    check('repeat remove', solve([dict(id='a',escape=True,outside=True,inside=['a']),dict(id='b',escape=True,outside=True,inside=['b'])], 'remove', 'a'), [{'id': 'b', 'escape': True, 'outside': True, 'inside': ['b']}])\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":"15ba81ce96041653330d7722eb8d4b4ef5e335c8b061eb8bdf21fd3f701eb989","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(layers, event, target):\n    layers = [dict(x) for x in layers]\n    if not layers: return layers\n    active = layers[-1]\n    if event == 'escape' and active['escape']: return layers[:-1]\n    if event == 'outside' and active['outside'] and target not in active['inside']: return layers[:-1]\n    if event == 'remove': return [x for x in layers if x['id'] != target]\n    return layers\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('topmost', solve([dict(id='a',escape=False,outside=False,inside=['a']),dict(id='z',escape=True,outside=True,inside=['z'])], 'escape', None), [{'id': 'a', 'escape': False, 'outside': False, 'inside': ['a']}])\ncheck('protected escape', solve([dict(id='a',escape=False,outside=False,inside=['a'])], 'escape', None), [{'id': 'a', 'escape': False, 'outside': False, 'inside': ['a']}])\ncheck('protected outside', solve([dict(id='a',escape=True,outside=False,inside=['a'])], 'outside', 'x'), [{'id': 'a', 'escape': True, 'outside': False, 'inside': ['a']}])\ncheck('inside child', solve([dict(id='a',escape=True,outside=True,inside=['a','child'])], 'outside', 'child'), [{'id': 'a', 'escape': True, 'outside': True, 'inside': ['a', 'child']}])\ncheck('outside', solve([dict(id='a',escape=True,outside=True,inside=['a'])], 'outside', 'x'), [])\ncheck('remove', solve([dict(id='a',escape=True,outside=True,inside=['a']),dict(id='b',escape=True,outside=True,inside=['b'])], 'remove', 'a'), [{'id': 'b', 'escape': True, 'outside': True, 'inside': ['b']}])\ncheck('parameterized stack depth', solve([dict(id=str(i),escape=True,outside=True,inside=[str(i)]) for i in range(N)],'escape',None), [dict(id=str(i),escape=True,outside=True,inside=[str(i)]) for i in range(N-1)])\nfor repetition in range(N):\n    check('repeat remove', solve([dict(id='a',escape=True,outside=True,inside=['a']),dict(id='b',escape=True,outside=True,inside=['b'])], 'remove', 'a'), [{'id': 'b', 'escape': True, 'outside': True, 'inside': ['b']}])\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":" 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":"xi-dismiss-stack-inside-target","generated_at":"2026-09-29T14:38:23.659184+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A deterministic model of overlay dismissal stack; this isolates one interface invariant without requiring a browser.","repair":"Implement the inside target operation as `target not in active['inside']`.","root_cause":"The inside target operation uses `target != active['id']` where the contract requires `target not in active['inside']`.","sha256":"b93a7c679163ce3b3a9e1affc391dd9ee8ef4c428172b433d9c69248378e84ae","title":"Overlay dismissal stack: Clicks on overlay descendants are mistaken for outside clicks · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":35.753,"exit_code":1,"observations":[{"actual":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"check":"topmost","expected":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"passed":true},{"actual":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"check":"protected escape","expected":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"passed":true},{"actual":[{"escape":true,"id":"a","inside":["a"],"outside":false}],"check":"protected outside","expected":[{"escape":true,"id":"a","inside":["a"],"outside":false}],"passed":true},{"actual":[],"check":"inside child","expected":[{"escape":true,"id":"a","inside":["a","child"],"outside":true}],"passed":false},{"actual":[{"escape":true,"id":"a","inside":["a"],"outside":true}],"check":"outside","expected":[],"passed":false},{"actual":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"check":"remove","expected":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"passed":true},{"actual":[],"check":"parameterized stack depth","expected":[],"passed":true},{"actual":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"check":"repeat remove","expected":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"topmost\", \"actual\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"expected\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"passed\": true}, {\"check\": \"protected escape\", \"actual\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"expected\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"passed\": true}, {\"check\": \"protected outside\", \"actual\": [{\"id\": \"a\", \"escape\": true, \"outside\": false, \"inside\": [\"a\"]}], \"expected\": [{\"id\": \"a\", \"escape\": true, \"outside\": false, \"inside\": [\"a\"]}], \"passed\": true}, {\"check\": \"inside child\", \"actual\": [], \"expected\": [{\"id\": \"a\", \"escape\": true, \"outside\": true, \"inside\": [\"a\", \"child\"]}], \"passed\": false}, {\"check\": \"outside\", \"actual\": [{\"id\": \"a\", \"escape\": true, \"outside\": true, \"inside\": [\"a\"]}], \"expected\": [], \"passed\": false}, {\"check\": \"remove\", \"actual\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"expected\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"passed\": true}, {\"check\": \"parameterized stack depth\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"repeat remove\", \"actual\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"expected\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":36.186,"exit_code":1,"observations":[{"actual":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"check":"topmost","expected":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"passed":true},{"actual":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"check":"protected escape","expected":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"passed":true},{"actual":[{"escape":true,"id":"a","inside":["a"],"outside":false}],"check":"protected outside","expected":[{"escape":true,"id":"a","inside":["a"],"outside":false}],"passed":true},{"actual":[],"check":"inside child","expected":[{"escape":true,"id":"a","inside":["a","child"],"outside":true}],"passed":false},{"actual":[],"check":"outside","expected":[],"passed":true},{"actual":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"check":"remove","expected":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"passed":true},{"actual":[],"check":"parameterized stack depth","expected":[],"passed":true},{"actual":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"check":"repeat remove","expected":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"topmost\", \"actual\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"expected\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"passed\": true}, {\"check\": \"protected escape\", \"actual\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"expected\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"passed\": true}, {\"check\": \"protected outside\", \"actual\": [{\"id\": \"a\", \"escape\": true, \"outside\": false, \"inside\": [\"a\"]}], \"expected\": [{\"id\": \"a\", \"escape\": true, \"outside\": false, \"inside\": [\"a\"]}], \"passed\": true}, {\"check\": \"inside child\", \"actual\": [], \"expected\": [{\"id\": \"a\", \"escape\": true, \"outside\": true, \"inside\": [\"a\", \"child\"]}], \"passed\": false}, {\"check\": \"outside\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"remove\", \"actual\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"expected\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"passed\": true}, {\"check\": \"parameterized stack depth\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"repeat remove\", \"actual\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"expected\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":36.356,"exit_code":0,"observations":[{"actual":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"check":"topmost","expected":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"passed":true},{"actual":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"check":"protected escape","expected":[{"escape":false,"id":"a","inside":["a"],"outside":false}],"passed":true},{"actual":[{"escape":true,"id":"a","inside":["a"],"outside":false}],"check":"protected outside","expected":[{"escape":true,"id":"a","inside":["a"],"outside":false}],"passed":true},{"actual":[{"escape":true,"id":"a","inside":["a","child"],"outside":true}],"check":"inside child","expected":[{"escape":true,"id":"a","inside":["a","child"],"outside":true}],"passed":true},{"actual":[],"check":"outside","expected":[],"passed":true},{"actual":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"check":"remove","expected":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"passed":true},{"actual":[],"check":"parameterized stack depth","expected":[],"passed":true},{"actual":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"check":"repeat remove","expected":[{"escape":true,"id":"b","inside":["b"],"outside":true}],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"topmost\", \"actual\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"expected\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"passed\": true}, {\"check\": \"protected escape\", \"actual\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"expected\": [{\"id\": \"a\", \"escape\": false, \"outside\": false, \"inside\": [\"a\"]}], \"passed\": true}, {\"check\": \"protected outside\", \"actual\": [{\"id\": \"a\", \"escape\": true, \"outside\": false, \"inside\": [\"a\"]}], \"expected\": [{\"id\": \"a\", \"escape\": true, \"outside\": false, \"inside\": [\"a\"]}], \"passed\": true}, {\"check\": \"inside child\", \"actual\": [{\"id\": \"a\", \"escape\": true, \"outside\": true, \"inside\": [\"a\", \"child\"]}], \"expected\": [{\"id\": \"a\", \"escape\": true, \"outside\": true, \"inside\": [\"a\", \"child\"]}], \"passed\": true}, {\"check\": \"outside\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"remove\", \"actual\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"expected\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"passed\": true}, {\"check\": \"parameterized stack depth\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"repeat remove\", \"actual\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"expected\": [{\"id\": \"b\", \"escape\": true, \"outside\": true, \"inside\": [\"b\"]}], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}