FAILURE MAP
← Case archive

FA-53391 / Accessibility interaction semantics / Open access

Unknown relationship types enter the platform bridge · case 01

Unknown relationship types enter the platform bridge.

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

ROOT CAUSE

The relation kind decision in the relation scope adapter violates its declared contract.

VERIFIED REPAIR

Apply the exact contract at the relation kind decision: if kind not in {'details','controls','describedby'}: continue

Unsuccessful approach: The local repair substitutes if kind == 'unknown': continue but still mishandles the regression fixtures.

Case contract

Input [nodes,requests] with nodes [document,id,exposed,defunct] and requests [source_doc,source_id,target_doc,target_id,kind]. Allowed kinds details, controls, describedby. Resolve in document-scoped ID space, reject missing/hidden/defunct sources or targets, self edges, cross-document edges and unsupported kinds. Dedupe identical edges preserving request order. Return [source_id,kind,target_id]. IDs may repeat in different documents. Source and target visibility are direct snapshot flags, not ancestry.

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):
    nodes,requests = data
    index = {(doc,ident):(visible,dead) for doc,ident,visible,dead in nodes}
    result = []
    seen = set()
    for sd,si,td,ti,kind in requests:
        if False: continue
        if sd != td: continue
        source = index.get((sd,si))
        target = index.get((td,ti))
        if source is None or target is None: continue
        if not source[0] or source[1]: continue
        if not target[0] or target[1]: continue
        if si == ti: continue
        edge = (si,kind,ti)
        if edge in seen: continue
        seen.add(edge)
        result.append(list(edge))
    return result
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('valid ordered and repeated', solve([[['d','s',True,False],['d','t',True,False],['d',str(N),True,False]],[['d','s','d','t','details'],['d','s','d',str(N),'controls'],['d','s','d','t','details']]],), [['s','details','t'],['s','controls',str(N)]])
check('different kinds same endpoints', solve([[['d','s',True,False],['d','t',True,False]],[['d','s','d','t','details'],['d','s','d','t','controls']]],), [['s','details','t'],['s','controls','t']])
check('cross document collision', solve([[['d','s',True,False],['d','t',False,False],['e','t',True,False]],[['d','s','e','t','details'],['d','s','d','t','details']]],), [])
check('unsupported and self', solve([[['d','s',True,False],['d','t',True,False]],[['d','s','d','t','label'],['d','s','d','s','controls']]],), [])
check('missing endpoints', solve([[['d','s',True,False]],[['d','s','d','missing','details'],['d','gone','d','s','details']]],), [])
check('hidden source', solve([[['d','s',False,False],['d','t',True,False]],[['d','s','d','t','details']]],), [])
check('defunct source', solve([[['d','s',True,True],['d','t',True,False]],[['d','s','d','t','details']]],), [])
check('defunct target', solve([[['d','s',True,False],['d','t',True,True]],[['d','s','d','t','details']]],), [])
check('empty snapshot', solve([[],[]],), [])
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
valid ordered and repeated[['s', 'details', 't'], ['s', 'controls', '1']][['s', 'details', 't'], ['s', 'controls', '1']]Passed
different kinds same endpoints[['s', 'details', 't'], ['s', 'controls', 't']][['s', 'details', 't'], ['s', 'controls', 't']]Passed
cross document collision[][]Passed
unsupported and self[['s', 'label', 't']][]Failed
missing endpoints[][]Passed
hidden source[][]Passed
defunct source[][]Passed
defunct target[][]Passed
empty snapshot[][]Passed

SHA-256 / 0f35bfa685471d7ba87876cce645e518e356bb0b6fbc5584fa69b44262dd9648

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(data):
    nodes,requests = data
    index = {(doc,ident):(visible,dead) for doc,ident,visible,dead in nodes}
    result = []
    seen = set()
    for sd,si,td,ti,kind in requests:
        if kind == 'unknown': continue
        if sd != td: continue
        source = index.get((sd,si))
        target = index.get((td,ti))
        if source is None or target is None: continue
        if not source[0] or source[1]: continue
        if not target[0] or target[1]: continue
        if si == ti: continue
        edge = (si,kind,ti)
        if edge in seen: continue
        seen.add(edge)
        result.append(list(edge))
    return result
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('valid ordered and repeated', solve([[['d','s',True,False],['d','t',True,False],['d',str(N),True,False]],[['d','s','d','t','details'],['d','s','d',str(N),'controls'],['d','s','d','t','details']]],), [['s','details','t'],['s','controls',str(N)]])
check('different kinds same endpoints', solve([[['d','s',True,False],['d','t',True,False]],[['d','s','d','t','details'],['d','s','d','t','controls']]],), [['s','details','t'],['s','controls','t']])
check('cross document collision', solve([[['d','s',True,False],['d','t',False,False],['e','t',True,False]],[['d','s','e','t','details'],['d','s','d','t','details']]],), [])
check('unsupported and self', solve([[['d','s',True,False],['d','t',True,False]],[['d','s','d','t','label'],['d','s','d','s','controls']]],), [])
check('missing endpoints', solve([[['d','s',True,False]],[['d','s','d','missing','details'],['d','gone','d','s','details']]],), [])
check('hidden source', solve([[['d','s',False,False],['d','t',True,False]],[['d','s','d','t','details']]],), [])
check('defunct source', solve([[['d','s',True,True],['d','t',True,False]],[['d','s','d','t','details']]],), [])
check('defunct target', solve([[['d','s',True,False],['d','t',True,True]],[['d','s','d','t','details']]],), [])
check('empty snapshot', solve([[],[]],), [])
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
valid ordered and repeated[['s', 'details', 't'], ['s', 'controls', '1']][['s', 'details', 't'], ['s', 'controls', '1']]Passed
different kinds same endpoints[['s', 'details', 't'], ['s', 'controls', 't']][['s', 'details', 't'], ['s', 'controls', 't']]Passed
cross document collision[][]Passed
unsupported and self[['s', 'label', 't']][]Failed
missing endpoints[][]Passed
hidden source[][]Passed
defunct source[][]Passed
defunct target[][]Passed
empty snapshot[][]Passed

SHA-256 / 4f5e0410a53f058f150fd5c3d46609d5d14306e4d45a701f559d958b7f672ee3

3 / The verified repair

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

N = 1
observations = []
def solve(data):
    nodes,requests = data
    index = {(doc,ident):(visible,dead) for doc,ident,visible,dead in nodes}
    result = []
    seen = set()
    for sd,si,td,ti,kind in requests:
        if kind not in {'details','controls','describedby'}: continue
        if sd != td: continue
        source = index.get((sd,si))
        target = index.get((td,ti))
        if source is None or target is None: continue
        if not source[0] or source[1]: continue
        if not target[0] or target[1]: continue
        if si == ti: continue
        edge = (si,kind,ti)
        if edge in seen: continue
        seen.add(edge)
        result.append(list(edge))
    return result
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('valid ordered and repeated', solve([[['d','s',True,False],['d','t',True,False],['d',str(N),True,False]],[['d','s','d','t','details'],['d','s','d',str(N),'controls'],['d','s','d','t','details']]],), [['s','details','t'],['s','controls',str(N)]])
check('different kinds same endpoints', solve([[['d','s',True,False],['d','t',True,False]],[['d','s','d','t','details'],['d','s','d','t','controls']]],), [['s','details','t'],['s','controls','t']])
check('cross document collision', solve([[['d','s',True,False],['d','t',False,False],['e','t',True,False]],[['d','s','e','t','details'],['d','s','d','t','details']]],), [])
check('unsupported and self', solve([[['d','s',True,False],['d','t',True,False]],[['d','s','d','t','label'],['d','s','d','s','controls']]],), [])
check('missing endpoints', solve([[['d','s',True,False]],[['d','s','d','missing','details'],['d','gone','d','s','details']]],), [])
check('hidden source', solve([[['d','s',False,False],['d','t',True,False]],[['d','s','d','t','details']]],), [])
check('defunct source', solve([[['d','s',True,True],['d','t',True,False]],[['d','s','d','t','details']]],), [])
check('defunct target', solve([[['d','s',True,False],['d','t',True,True]],[['d','s','d','t','details']]],), [])
check('empty snapshot', solve([[],[]],), [])
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
valid ordered and repeated[['s', 'details', 't'], ['s', 'controls', '1']][['s', 'details', 't'], ['s', 'controls', '1']]Passed
different kinds same endpoints[['s', 'details', 't'], ['s', 'controls', 't']][['s', 'details', 't'], ['s', 'controls', 't']]Passed
cross document collision[][]Passed
unsupported and self[][]Passed
missing endpoints[][]Passed
hidden source[][]Passed
defunct source[][]Passed
defunct target[][]Passed
empty snapshot[][]Passed

SHA-256 / 1d6a529da2749e64a4efc33f320196f650c84c1cf8aaf790cd97f9267c10ab4d

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:38.592748+00:00.

Case digest / 6a1e41c7cc8f325a5f73cc602a4ec9a100f1b9be710335dc0dbfbbb7923119cd