FAILURE MAP
← Case archive

FA-53576 / Accessibility interaction semantics / Open access

Negative generation creates a platform proxy · case 01

Negative generation creates a platform proxy.

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

ROOT CAUSE

The generation admission decision in the proxy lifetime adapter violates its declared contract.

VERIFIED REPAIR

Apply the exact contract at the generation admission decision: generation >= 0

Unsuccessful approach: The local repair substitutes generation >= -1 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 True 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, ['bad', -1, True, 'x', 0], None][None, None, None]Failed
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 / 6956b1102365bd389a70843c15747001b779996f49294cca32c1400bd4d17d20

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 >= -1 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, ['bad', -1, True, 'x', 0], None][None, None, None]Failed
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 / 17ce5b6f205fb942f880140e74606d9298d17e515bb30a172d97be47ed24aa80

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

Case digest / 89f5844d405e7c7d83766297d5636faa7e8a3305048b4c99adc0494a4928626a