FA-8686 / Overlay interactions / Open access
Overlay dismissal stack: Escape closes layers explicitly configured nondismissible · case 01
Escape closes layers explicitly configured nondismissible.
ROOT CAUSE
The escape policy operation uses `event == 'escape'` where the contract requires `event == 'escape' and active['escape']`.
VERIFIED REPAIR
Implement the escape policy operation as `event == 'escape' and active['escape']`.
Unsuccessful approach: Reversing the policy blocks dismissible overlays.
Case contract
Only the topmost overlay handles Escape/outside policy; inside descendants are exempt; explicit unmount removes only its identity.
Why this case matters
A deterministic model of overlay dismissal stack; this isolates one interface invariant without requiring a browser.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(layers, event, target):
layers = [dict(x) for x in layers]
if not layers: return layers
active = layers[-1]
if event == 'escape': return layers[:-1]
if event == 'outside' and active['outside'] and target not in active['inside']: return layers[:-1]
if event == 'remove': return [x for x in layers if x['id'] != target]
return layers
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('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']}])
check('protected escape', solve([dict(id='a',escape=False,outside=False,inside=['a'])], 'escape', None), [{'id': 'a', 'escape': False, 'outside': False, 'inside': ['a']}])
check('protected outside', solve([dict(id='a',escape=True,outside=False,inside=['a'])], 'outside', 'x'), [{'id': 'a', 'escape': True, 'outside': False, 'inside': ['a']}])
check('inside child', solve([dict(id='a',escape=True,outside=True,inside=['a','child'])], 'outside', 'child'), [{'id': 'a', 'escape': True, 'outside': True, 'inside': ['a', 'child']}])
check('outside', solve([dict(id='a',escape=True,outside=True,inside=['a'])], 'outside', 'x'), [])
check('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']}])
check('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)])
for repetition in range(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']}])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| topmost | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}] | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}] | Passed |
| protected escape | [] | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}] | Failed |
| protected outside | [{'escape': True, 'id': 'a', 'inside': ['a'], 'outside': False}] | [{'escape': True, 'id': 'a', 'inside': ['a'], 'outside': False}] | Passed |
| inside child | [{'escape': True, 'id': 'a', 'inside': ['a', 'child'], 'outside': True}] | [{'escape': True, 'id': 'a', 'inside': ['a', 'child'], 'outside': True}] | Passed |
| outside | [] | [] | Passed |
| remove | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | Passed |
| parameterized stack depth | [] | [] | Passed |
| repeat remove | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | Passed |
SHA-256 / db79badcc23fcdcb9c0b81a62db994189105f25c4f1a35c7755fef1b64905406
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(layers, event, target):
layers = [dict(x) for x in layers]
if not layers: return layers
active = layers[-1]
if event == 'escape' and not active['escape']: return layers[:-1]
if event == 'outside' and active['outside'] and target not in active['inside']: return layers[:-1]
if event == 'remove': return [x for x in layers if x['id'] != target]
return layers
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('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']}])
check('protected escape', solve([dict(id='a',escape=False,outside=False,inside=['a'])], 'escape', None), [{'id': 'a', 'escape': False, 'outside': False, 'inside': ['a']}])
check('protected outside', solve([dict(id='a',escape=True,outside=False,inside=['a'])], 'outside', 'x'), [{'id': 'a', 'escape': True, 'outside': False, 'inside': ['a']}])
check('inside child', solve([dict(id='a',escape=True,outside=True,inside=['a','child'])], 'outside', 'child'), [{'id': 'a', 'escape': True, 'outside': True, 'inside': ['a', 'child']}])
check('outside', solve([dict(id='a',escape=True,outside=True,inside=['a'])], 'outside', 'x'), [])
check('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']}])
check('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)])
for repetition in range(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']}])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| topmost | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}, {'escape': True, 'id': 'z', 'inside': ['z'], 'outside': True}] | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}] | Failed |
| protected escape | [] | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}] | Failed |
| protected outside | [{'escape': True, 'id': 'a', 'inside': ['a'], 'outside': False}] | [{'escape': True, 'id': 'a', 'inside': ['a'], 'outside': False}] | Passed |
| inside child | [{'escape': True, 'id': 'a', 'inside': ['a', 'child'], 'outside': True}] | [{'escape': True, 'id': 'a', 'inside': ['a', 'child'], 'outside': True}] | Passed |
| outside | [] | [] | Passed |
| remove | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | Passed |
| parameterized stack depth | [{'escape': True, 'id': '0', 'inside': ['0'], 'outside': True}] | [] | Failed |
| repeat remove | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | Passed |
SHA-256 / 1e40e470126bec98277b791c1a886e69f55f0c2db9fabfe6cd7353c6920bce12
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(layers, event, target):
layers = [dict(x) for x in layers]
if not layers: return layers
active = layers[-1]
if event == 'escape' and active['escape']: return layers[:-1]
if event == 'outside' and active['outside'] and target not in active['inside']: return layers[:-1]
if event == 'remove': return [x for x in layers if x['id'] != target]
return layers
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('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']}])
check('protected escape', solve([dict(id='a',escape=False,outside=False,inside=['a'])], 'escape', None), [{'id': 'a', 'escape': False, 'outside': False, 'inside': ['a']}])
check('protected outside', solve([dict(id='a',escape=True,outside=False,inside=['a'])], 'outside', 'x'), [{'id': 'a', 'escape': True, 'outside': False, 'inside': ['a']}])
check('inside child', solve([dict(id='a',escape=True,outside=True,inside=['a','child'])], 'outside', 'child'), [{'id': 'a', 'escape': True, 'outside': True, 'inside': ['a', 'child']}])
check('outside', solve([dict(id='a',escape=True,outside=True,inside=['a'])], 'outside', 'x'), [])
check('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']}])
check('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)])
for repetition in range(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']}])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| topmost | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}] | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}] | Passed |
| protected escape | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}] | [{'escape': False, 'id': 'a', 'inside': ['a'], 'outside': False}] | Passed |
| protected outside | [{'escape': True, 'id': 'a', 'inside': ['a'], 'outside': False}] | [{'escape': True, 'id': 'a', 'inside': ['a'], 'outside': False}] | Passed |
| inside child | [{'escape': True, 'id': 'a', 'inside': ['a', 'child'], 'outside': True}] | [{'escape': True, 'id': 'a', 'inside': ['a', 'child'], 'outside': True}] | Passed |
| outside | [] | [] | Passed |
| remove | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | Passed |
| parameterized stack depth | [] | [] | Passed |
| repeat remove | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | [{'escape': True, 'id': 'b', 'inside': ['b'], 'outside': True}] | Passed |
SHA-256 / 15ba81ce96041653330d7722eb8d4b4ef5e335c8b061eb8bdf21fd3f701eb989
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:38:23.581529+00:00.
Case digest / 41959fe88927af17f314a788d3ad4c6f22f364d7c61cc957bd057db0ab4d2b28