FAILURE MAP
← Case archive

FA-53521 / Accessibility interaction semantics / Open access

Destroyed frame hosts retain semantic children · case 01

Destroyed frame hosts retain semantic children.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The defunct host decision in the embedded document adapter violates its declared contract.

VERIFIED REPAIR

Apply the exact contract at the defunct host decision: if dead: return None

Unsuccessful approach: The local repair substitutes if dead and not loaded: return None but still mishandles the regression fixtures.

Case contract

Input [host_id,host_doc,child_doc,loaded,same_origin,allow_read,host_name,child_title,children,defunct]. Return None if defunct. Otherwise return a host bridge object. Child document may only be traversed when loaded and allow_read; same_origin alone grants no reading. Expose children in original order, including repeated distinct IDs, prefixed with child_doc and colon; child document ID cannot be empty or equal to host document. Name prefers a nonempty host name, then child title only if traversal allowed, otherwise empty. Busy means not loaded; unavailable means loaded but traversal forbidden. Relation is [host_id,child_doc] only for traversable children. Source lists never include the host itself.

Why this case matters

Offline accessibility bridge model with explicit policy; useful for testing semantic API adapters independently of browser implementations.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(data):
    host,doc,child,loaded,same,allowed,name,title,children,dead = data
    if False: return None
    can = loaded and allowed and bool(child) and child != doc
    safe = [ident for ident in children if ident != host]
    return {'id':host,'name':name if name else (title if can else ''),'busy':not loaded,'unavailable':loaded and not can,'children':[child+':'+ident for ident in safe] if can else [],'relation':[host,child] if can else None}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('allowed foreign document', solve(['host','d','c',True,False,True,'','Title'+str(N),['a','b','a'],False],), {'id':'host','name':'Title'+str(N),'busy':False,'unavailable':False,'children':['c:a','c:b','c:a'],'relation':['host','c']})
check('same origin no permission', solve(['host','d','c',True,True,False,'','Secret',['a'],False],), {'id':'host','name':'','busy':False,'unavailable':True,'children':[],'relation':None})
check('not loaded', solve(['host','d','c',False,True,True,'Frame','Title',['a'],False],), {'id':'host','name':'Frame','busy':True,'unavailable':False,'children':[],'relation':None})
check('dead host', solve(['host','d','c',True,True,True,'Frame','Title',['a'],True],), None)
check('self document', solve(['host','d','d',True,True,True,'Frame','Title',['a'],False],), {'id':'host','name':'Frame','busy':False,'unavailable':True,'children':[],'relation':None})
check('empty child identifier', solve(['host','d','',True,True,True,'Frame','Title',['a'],False],), {'id':'host','name':'Frame','busy':False,'unavailable':True,'children':[],'relation':None})
check('host filtered', solve(['host','d','c',True,True,True,'Frame','Title',['a','host','b'],False],), {'id':'host','name':'Frame','busy':False,'unavailable':False,'children':['c:a','c:b'],'relation':['host','c']})
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 fixtureActualExpectedOutcome
allowed foreign document{'busy': False, 'children': ['c:a', 'c:b', 'c:a'], 'id': 'host', 'name': 'Title1', 'relation': ['host', 'c'], 'unavailable': False}{'busy': False, 'children': ['c:a', 'c:b', 'c:a'], 'id': 'host', 'name': 'Title1', 'relation': ['host', 'c'], 'unavailable': False}Passed
same origin no permission{'busy': False, 'children': [], 'id': 'host', 'name': '', 'relation': None, 'unavailable': True}{'busy': False, 'children': [], 'id': 'host', 'name': '', 'relation': None, 'unavailable': True}Passed
not loaded{'busy': True, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': False}{'busy': True, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': False}Passed
dead host{'busy': False, 'children': ['c:a'], 'id': 'host', 'name': 'Frame', 'relation': ['host', 'c'], 'unavailable': False}NoneFailed
self document{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}Passed
empty child identifier{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}Passed
host filtered{'busy': False, 'children': ['c:a', 'c:b'], 'id': 'host', 'name': 'Frame', 'relation': ['host', 'c'], 'unavailable': False}{'busy': False, 'children': ['c:a', 'c:b'], 'id': 'host', 'name': 'Frame', 'relation': ['host', 'c'], 'unavailable': False}Passed

SHA-256 / 924b980f6a490e58602a79aaafe7ca6ddd4726ecdf91f20baa78060caa6fd8f6

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(data):
    host,doc,child,loaded,same,allowed,name,title,children,dead = data
    if dead and not loaded: return None
    can = loaded and allowed and bool(child) and child != doc
    safe = [ident for ident in children if ident != host]
    return {'id':host,'name':name if name else (title if can else ''),'busy':not loaded,'unavailable':loaded and not can,'children':[child+':'+ident for ident in safe] if can else [],'relation':[host,child] if can else None}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('allowed foreign document', solve(['host','d','c',True,False,True,'','Title'+str(N),['a','b','a'],False],), {'id':'host','name':'Title'+str(N),'busy':False,'unavailable':False,'children':['c:a','c:b','c:a'],'relation':['host','c']})
check('same origin no permission', solve(['host','d','c',True,True,False,'','Secret',['a'],False],), {'id':'host','name':'','busy':False,'unavailable':True,'children':[],'relation':None})
check('not loaded', solve(['host','d','c',False,True,True,'Frame','Title',['a'],False],), {'id':'host','name':'Frame','busy':True,'unavailable':False,'children':[],'relation':None})
check('dead host', solve(['host','d','c',True,True,True,'Frame','Title',['a'],True],), None)
check('self document', solve(['host','d','d',True,True,True,'Frame','Title',['a'],False],), {'id':'host','name':'Frame','busy':False,'unavailable':True,'children':[],'relation':None})
check('empty child identifier', solve(['host','d','',True,True,True,'Frame','Title',['a'],False],), {'id':'host','name':'Frame','busy':False,'unavailable':True,'children':[],'relation':None})
check('host filtered', solve(['host','d','c',True,True,True,'Frame','Title',['a','host','b'],False],), {'id':'host','name':'Frame','busy':False,'unavailable':False,'children':['c:a','c:b'],'relation':['host','c']})
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 fixtureActualExpectedOutcome
allowed foreign document{'busy': False, 'children': ['c:a', 'c:b', 'c:a'], 'id': 'host', 'name': 'Title1', 'relation': ['host', 'c'], 'unavailable': False}{'busy': False, 'children': ['c:a', 'c:b', 'c:a'], 'id': 'host', 'name': 'Title1', 'relation': ['host', 'c'], 'unavailable': False}Passed
same origin no permission{'busy': False, 'children': [], 'id': 'host', 'name': '', 'relation': None, 'unavailable': True}{'busy': False, 'children': [], 'id': 'host', 'name': '', 'relation': None, 'unavailable': True}Passed
not loaded{'busy': True, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': False}{'busy': True, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': False}Passed
dead host{'busy': False, 'children': ['c:a'], 'id': 'host', 'name': 'Frame', 'relation': ['host', 'c'], 'unavailable': False}NoneFailed
self document{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}Passed
empty child identifier{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}Passed
host filtered{'busy': False, 'children': ['c:a', 'c:b'], 'id': 'host', 'name': 'Frame', 'relation': ['host', 'c'], 'unavailable': False}{'busy': False, 'children': ['c:a', 'c:b'], 'id': 'host', 'name': 'Frame', 'relation': ['host', 'c'], 'unavailable': False}Passed

SHA-256 / be829a61d9a4e00602c483f471e0dce48aa33555fb4c696a74244b7d469981a4

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(data):
    host,doc,child,loaded,same,allowed,name,title,children,dead = data
    if dead: return None
    can = loaded and allowed and bool(child) and child != doc
    safe = [ident for ident in children if ident != host]
    return {'id':host,'name':name if name else (title if can else ''),'busy':not loaded,'unavailable':loaded and not can,'children':[child+':'+ident for ident in safe] if can else [],'relation':[host,child] if can else None}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('allowed foreign document', solve(['host','d','c',True,False,True,'','Title'+str(N),['a','b','a'],False],), {'id':'host','name':'Title'+str(N),'busy':False,'unavailable':False,'children':['c:a','c:b','c:a'],'relation':['host','c']})
check('same origin no permission', solve(['host','d','c',True,True,False,'','Secret',['a'],False],), {'id':'host','name':'','busy':False,'unavailable':True,'children':[],'relation':None})
check('not loaded', solve(['host','d','c',False,True,True,'Frame','Title',['a'],False],), {'id':'host','name':'Frame','busy':True,'unavailable':False,'children':[],'relation':None})
check('dead host', solve(['host','d','c',True,True,True,'Frame','Title',['a'],True],), None)
check('self document', solve(['host','d','d',True,True,True,'Frame','Title',['a'],False],), {'id':'host','name':'Frame','busy':False,'unavailable':True,'children':[],'relation':None})
check('empty child identifier', solve(['host','d','',True,True,True,'Frame','Title',['a'],False],), {'id':'host','name':'Frame','busy':False,'unavailable':True,'children':[],'relation':None})
check('host filtered', solve(['host','d','c',True,True,True,'Frame','Title',['a','host','b'],False],), {'id':'host','name':'Frame','busy':False,'unavailable':False,'children':['c:a','c:b'],'relation':['host','c']})
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 fixtureActualExpectedOutcome
allowed foreign document{'busy': False, 'children': ['c:a', 'c:b', 'c:a'], 'id': 'host', 'name': 'Title1', 'relation': ['host', 'c'], 'unavailable': False}{'busy': False, 'children': ['c:a', 'c:b', 'c:a'], 'id': 'host', 'name': 'Title1', 'relation': ['host', 'c'], 'unavailable': False}Passed
same origin no permission{'busy': False, 'children': [], 'id': 'host', 'name': '', 'relation': None, 'unavailable': True}{'busy': False, 'children': [], 'id': 'host', 'name': '', 'relation': None, 'unavailable': True}Passed
not loaded{'busy': True, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': False}{'busy': True, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': False}Passed
dead hostNoneNonePassed
self document{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}Passed
empty child identifier{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}{'busy': False, 'children': [], 'id': 'host', 'name': 'Frame', 'relation': None, 'unavailable': True}Passed
host filtered{'busy': False, 'children': ['c:a', 'c:b'], 'id': 'host', 'name': 'Frame', 'relation': ['host', 'c'], 'unavailable': False}{'busy': False, 'children': ['c:a', 'c:b'], 'id': 'host', 'name': 'Frame', 'relation': ['host', 'c'], 'unavailable': False}Passed

SHA-256 / 0bdaaf0188c54ee9282f0e44fe4ea0d3d46791473963c78126fa73ddfac7fe1b

Verification & scope

Stipulated finite adapter contract, not a claim of platform accessibility or ARIA conformance. 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:45:39.848944+00:00.

Case digest / 5ec586f50f349485c50fafb6a3390539d62d833c9117a2877c0a147b58e0c09b