FAILURE MAP
← Case archive

FA-53571 / Accessibility interaction semantics / Open access

Stale create replaces a newer semantic proxy · case 01

Stale create replaces a newer semantic proxy.

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

ROOT CAUSE

The stale create decision in the proxy lifetime adapter violates its declared contract.

VERIFIED REPAIR

Apply the exact contract at the stale create decision: generation > old[0]

Unsuccessful approach: The local repair substitutes generation >= old[0] but still mishandles the regression fixtures.

Case contract

Bounded accessibility proxy registry: input operations [kind,id,generation,value]. create installs a nonnegative generation only if newer than existing generation; retired generations remain recorded. destroy only applies to matching generation. get returns value only for matching generation live proxy. set changes matching live proxy and never creates objects. pin/unpin maintain nonnegative reference count; destroying a pinned proxy immediately makes reads unavailable but keeps tombstone until unpinned. Each operation returns a snapshot [id,generation,live,value,pins] for its ID, or None when absent; dead value is always None. Unknown operations do nothing.

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):
    state = {}
    result = []
    for kind,ident,generation,value in data:
        old = state.get(ident)
        if kind == 'create' and generation >= 0 and (old is None or generation != old[0]):
            state[ident] = [generation,True,value,0]
        elif old is not None and generation == old[0]:
            if kind == 'destroy': old[1],old[2] = False,None
            elif kind == 'set' and old[1]: old[2] = value
            elif kind == 'pin' and old[1]: old[3] += 1
            elif kind == 'unpin': old[3] = max(0,old[3]-1)
        row = state.get(ident)
        result.append((ident,list(row)) if row is not None else None)
    return [([entry[0]]+entry[1]) if entry is not None else None for entry in result]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('newer proxy preserves stale isolation', solve([['create','a',N,'x'],['create','a',N+1,'y'],['set','a',N,'stale'],['destroy','a',N,None]],), [['a',N,True,'x',0],['a',N+1,True,'y',0],['a',N+1,True,'y',0],['a',N+1,True,'y',0]])
check('equal generation no reset', solve([['create','a',N,'x'],['pin','a',N,None],['create','a',N,'y']],), [['a',N,True,'x',0],['a',N,True,'x',1],['a',N,True,'x',1]])
check('stale create and pinned generation', solve([['create','a',N,'x'],['pin','a',N,None],['create','a',N+1,'y'],['create','a',N,'stale']],), [['a',N,True,'x',0],['a',N,True,'x',1],['a',N+1,True,'y',0],['a',N+1,True,'y',0]])
check('retired proxy cannot revive', solve([['create','a',N,'x'],['destroy','a',N,None],['set','a',N,'z'],['pin','a',N,None]],), [['a',N,True,'x',0],['a',N,False,None,0],['a',N,False,None,0],['a',N,False,None,0]])
check('pinned destroy immediate', solve([['create','a',N,'x'],['pin','a',N,None],['destroy','a',N,None],['unpin','a',N,None]],), [['a',N,True,'x',0],['a',N,True,'x',1],['a',N,False,None,1],['a',N,False,None,0]])
check('unpin lower bound', solve([['create','a',0,'x'],['unpin','a',0,None],['set','a',0,'y']],), [['a',0,True,'x',0],['a',0,True,'x',0],['a',0,True,'y',0]])
check('unknown and negative', solve([['set','missing',0,'x'],['create','bad',-1,'x'],['get','missing',0,None]],), [None,None,None])
check('separate proxy IDs', solve([['create','a',N,'x'],['create','b',N,'y']],), [['a',N,True,'x',0],['b',N,True,'y',0]])
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
newer proxy preserves stale isolation[['a', 1, True, 'x', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]][['a', 1, True, 'x', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]]Passed
equal generation no reset[['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, True, 'x', 1]][['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, True, 'x', 1]]Passed
stale create and pinned generation[['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 2, True, 'y', 0], ['a', 1, True, 'stale', 0]][['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]]Failed
retired proxy cannot revive[['a', 1, True, 'x', 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0]][['a', 1, True, 'x', 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0]]Passed
pinned destroy immediate[['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, False, None, 1], ['a', 1, False, None, 0]][['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, False, None, 1], ['a', 1, False, None, 0]]Passed
unpin lower bound[['a', 0, True, 'x', 0], ['a', 0, True, 'x', 0], ['a', 0, True, 'y', 0]][['a', 0, True, 'x', 0], ['a', 0, True, 'x', 0], ['a', 0, True, 'y', 0]]Passed
unknown and negative[None, None, None][None, None, None]Passed
separate proxy IDs[['a', 1, True, 'x', 0], ['b', 1, True, 'y', 0]][['a', 1, True, 'x', 0], ['b', 1, True, 'y', 0]]Passed

SHA-256 / d4095e38e004e0554135eb6edbe0b675725ea9e071b42c52c617e83a3b8d2dd2

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(data):
    state = {}
    result = []
    for kind,ident,generation,value in data:
        old = state.get(ident)
        if kind == 'create' and generation >= 0 and (old is None or generation >= old[0]):
            state[ident] = [generation,True,value,0]
        elif old is not None and generation == old[0]:
            if kind == 'destroy': old[1],old[2] = False,None
            elif kind == 'set' and old[1]: old[2] = value
            elif kind == 'pin' and old[1]: old[3] += 1
            elif kind == 'unpin': old[3] = max(0,old[3]-1)
        row = state.get(ident)
        result.append((ident,list(row)) if row is not None else None)
    return [([entry[0]]+entry[1]) if entry is not None else None for entry in result]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('newer proxy preserves stale isolation', solve([['create','a',N,'x'],['create','a',N+1,'y'],['set','a',N,'stale'],['destroy','a',N,None]],), [['a',N,True,'x',0],['a',N+1,True,'y',0],['a',N+1,True,'y',0],['a',N+1,True,'y',0]])
check('equal generation no reset', solve([['create','a',N,'x'],['pin','a',N,None],['create','a',N,'y']],), [['a',N,True,'x',0],['a',N,True,'x',1],['a',N,True,'x',1]])
check('stale create and pinned generation', solve([['create','a',N,'x'],['pin','a',N,None],['create','a',N+1,'y'],['create','a',N,'stale']],), [['a',N,True,'x',0],['a',N,True,'x',1],['a',N+1,True,'y',0],['a',N+1,True,'y',0]])
check('retired proxy cannot revive', solve([['create','a',N,'x'],['destroy','a',N,None],['set','a',N,'z'],['pin','a',N,None]],), [['a',N,True,'x',0],['a',N,False,None,0],['a',N,False,None,0],['a',N,False,None,0]])
check('pinned destroy immediate', solve([['create','a',N,'x'],['pin','a',N,None],['destroy','a',N,None],['unpin','a',N,None]],), [['a',N,True,'x',0],['a',N,True,'x',1],['a',N,False,None,1],['a',N,False,None,0]])
check('unpin lower bound', solve([['create','a',0,'x'],['unpin','a',0,None],['set','a',0,'y']],), [['a',0,True,'x',0],['a',0,True,'x',0],['a',0,True,'y',0]])
check('unknown and negative', solve([['set','missing',0,'x'],['create','bad',-1,'x'],['get','missing',0,None]],), [None,None,None])
check('separate proxy IDs', solve([['create','a',N,'x'],['create','b',N,'y']],), [['a',N,True,'x',0],['b',N,True,'y',0]])
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
newer proxy preserves stale isolation[['a', 1, True, 'x', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]][['a', 1, True, 'x', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]]Passed
equal generation no reset[['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, True, 'y', 0]][['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, True, 'x', 1]]Failed
stale create and pinned generation[['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]][['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]]Passed
retired proxy cannot revive[['a', 1, True, 'x', 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0]][['a', 1, True, 'x', 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0]]Passed
pinned destroy immediate[['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, False, None, 1], ['a', 1, False, None, 0]][['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, False, None, 1], ['a', 1, False, None, 0]]Passed
unpin lower bound[['a', 0, True, 'x', 0], ['a', 0, True, 'x', 0], ['a', 0, True, 'y', 0]][['a', 0, True, 'x', 0], ['a', 0, True, 'x', 0], ['a', 0, True, 'y', 0]]Passed
unknown and negative[None, None, None][None, None, None]Passed
separate proxy IDs[['a', 1, True, 'x', 0], ['b', 1, True, 'y', 0]][['a', 1, True, 'x', 0], ['b', 1, True, 'y', 0]]Passed

SHA-256 / 9625731ed222ec6462a85b2628e0324918e2c1318d077b0b2533f4e61833af65

3 / The verified repair

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

N = 1
observations = []
def solve(data):
    state = {}
    result = []
    for kind,ident,generation,value in data:
        old = state.get(ident)
        if kind == 'create' and generation >= 0 and (old is None or generation > old[0]):
            state[ident] = [generation,True,value,0]
        elif old is not None and generation == old[0]:
            if kind == 'destroy': old[1],old[2] = False,None
            elif kind == 'set' and old[1]: old[2] = value
            elif kind == 'pin' and old[1]: old[3] += 1
            elif kind == 'unpin': old[3] = max(0,old[3]-1)
        row = state.get(ident)
        result.append((ident,list(row)) if row is not None else None)
    return [([entry[0]]+entry[1]) if entry is not None else None for entry in result]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('newer proxy preserves stale isolation', solve([['create','a',N,'x'],['create','a',N+1,'y'],['set','a',N,'stale'],['destroy','a',N,None]],), [['a',N,True,'x',0],['a',N+1,True,'y',0],['a',N+1,True,'y',0],['a',N+1,True,'y',0]])
check('equal generation no reset', solve([['create','a',N,'x'],['pin','a',N,None],['create','a',N,'y']],), [['a',N,True,'x',0],['a',N,True,'x',1],['a',N,True,'x',1]])
check('stale create and pinned generation', solve([['create','a',N,'x'],['pin','a',N,None],['create','a',N+1,'y'],['create','a',N,'stale']],), [['a',N,True,'x',0],['a',N,True,'x',1],['a',N+1,True,'y',0],['a',N+1,True,'y',0]])
check('retired proxy cannot revive', solve([['create','a',N,'x'],['destroy','a',N,None],['set','a',N,'z'],['pin','a',N,None]],), [['a',N,True,'x',0],['a',N,False,None,0],['a',N,False,None,0],['a',N,False,None,0]])
check('pinned destroy immediate', solve([['create','a',N,'x'],['pin','a',N,None],['destroy','a',N,None],['unpin','a',N,None]],), [['a',N,True,'x',0],['a',N,True,'x',1],['a',N,False,None,1],['a',N,False,None,0]])
check('unpin lower bound', solve([['create','a',0,'x'],['unpin','a',0,None],['set','a',0,'y']],), [['a',0,True,'x',0],['a',0,True,'x',0],['a',0,True,'y',0]])
check('unknown and negative', solve([['set','missing',0,'x'],['create','bad',-1,'x'],['get','missing',0,None]],), [None,None,None])
check('separate proxy IDs', solve([['create','a',N,'x'],['create','b',N,'y']],), [['a',N,True,'x',0],['b',N,True,'y',0]])
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
newer proxy preserves stale isolation[['a', 1, True, 'x', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]][['a', 1, True, 'x', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]]Passed
equal generation no reset[['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, True, 'x', 1]][['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, True, 'x', 1]]Passed
stale create and pinned generation[['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]][['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 2, True, 'y', 0], ['a', 2, True, 'y', 0]]Passed
retired proxy cannot revive[['a', 1, True, 'x', 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0]][['a', 1, True, 'x', 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0], ['a', 1, False, None, 0]]Passed
pinned destroy immediate[['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, False, None, 1], ['a', 1, False, None, 0]][['a', 1, True, 'x', 0], ['a', 1, True, 'x', 1], ['a', 1, False, None, 1], ['a', 1, False, None, 0]]Passed
unpin lower bound[['a', 0, True, 'x', 0], ['a', 0, True, 'x', 0], ['a', 0, True, 'y', 0]][['a', 0, True, 'x', 0], ['a', 0, True, 'x', 0], ['a', 0, True, 'y', 0]]Passed
unknown and negative[None, None, None][None, None, None]Passed
separate proxy IDs[['a', 1, True, 'x', 0], ['b', 1, True, 'y', 0]][['a', 1, True, 'x', 0], ['b', 1, True, 'y', 0]]Passed

SHA-256 / 77712f0bf52e23b28bf5b1b7774b7e7456ec7dd8b98bed4cdf22e5e7ee71edcb

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

Case digest / 85e34fcda43d3807495527d236f00ea8df7a5943693f3d8e7a2098167fe2e404