FAILURE MAP
← Case archive

FA-53751 / Accessibility interaction semantics / Open access

Clients lose the confirmation requirement flag · case 01

Clients lose the confirmation requirement flag.

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

ROOT CAUSE

The confirmation metadata decision in the action descriptors adapter violates its declared contract.

VERIFIED REPAIR

Apply the exact contract at the confirmation metadata decision: [ident,name,kind,confirm]

Unsuccessful approach: The local repair substitutes [ident,name,kind,confirm and kind != 'collapse'] but still mishandles the regression fixtures.

Case contract

Input actions [id,label,enabled,exposed,requires_confirmation,kind,priority], plus permission and locale label overrides. Omit unknown kinds (only invoke, expand, collapse, increment, decrement), disabled or unexposed entries. Destructive confirmation-requiring actions need permission. First eligible occurrence of an ID wins; sort by ascending priority preserving ties. Label is override if key exists (including empty), else authored label, else kind. Return [id,label,kind,requires_confirmation]. This only describes platform actions and never activates them.

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):
    actions,permission,overrides = data
    seen = set()
    rows = []
    for ident,label,enabled,exposed,confirm,kind,priority in actions:
        if kind not in {'invoke','expand','collapse','increment','decrement'}: continue
        if not enabled: continue
        if not exposed: continue
        if confirm and not permission: continue
        if ident in seen: continue
        seen.add(ident)
        name = overrides[ident] if ident in overrides else (label if label else kind)
        rows.append((priority,[ident,name,kind,False]))
    return [row for priority,row in sorted(rows,key=lambda item:item[0])]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('ordered descriptor set', solve([[['x','Open',True,True,False,'invoke',N+2],['y','',True,True,False,'expand',N],['z','Close',True,True,True,'collapse',N+1]],True,{'x':'Localized'+str(N)}],), [['y','expand','expand',False],['z','Close','collapse',True],['x','Localized'+str(N),'invoke',False]])
check('disabled entry does not reserve ID', solve([[['x','Bad',False,True,False,'invoke',0],['x','Good',True,True,False,'invoke',1]],False,{}],), [['x','Good','invoke',False]])
check('hidden and unknown', solve([[['x','X',True,False,False,'invoke',0],['y','Y',True,True,False,'erase',1]],True,{}],), [])
check('confirmation unavailable', solve([[['x','Delete',True,True,True,'invoke',0]],False,{}],), [])
check('empty override intentional', solve([[['x','Original',True,True,False,'invoke',0]],False,{'x':''}],), [['x','','invoke',False]])
check('dedupe first and stable ties', solve([[['x','First',True,True,False,'invoke',N],['y','Second',True,True,False,'expand',N],['x','Third',True,True,False,'collapse',0]],False,{}],), [['x','First','invoke',False],['y','Second','expand',False]])
check('empty', solve([[],False,{}],), [])
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
ordered descriptor set[['y', 'expand', 'expand', False], ['z', 'Close', 'collapse', False], ['x', 'Localized1', 'invoke', False]][['y', 'expand', 'expand', False], ['z', 'Close', 'collapse', True], ['x', 'Localized1', 'invoke', False]]Failed
disabled entry does not reserve ID[['x', 'Good', 'invoke', False]][['x', 'Good', 'invoke', False]]Passed
hidden and unknown[][]Passed
confirmation unavailable[][]Passed
empty override intentional[['x', '', 'invoke', False]][['x', '', 'invoke', False]]Passed
dedupe first and stable ties[['x', 'First', 'invoke', False], ['y', 'Second', 'expand', False]][['x', 'First', 'invoke', False], ['y', 'Second', 'expand', False]]Passed
empty[][]Passed

SHA-256 / c004c7eccefb14e96a9b2d26cee630cdaa6ceba55cb569ff4f02861fccd92ec0

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(data):
    actions,permission,overrides = data
    seen = set()
    rows = []
    for ident,label,enabled,exposed,confirm,kind,priority in actions:
        if kind not in {'invoke','expand','collapse','increment','decrement'}: continue
        if not enabled: continue
        if not exposed: continue
        if confirm and not permission: continue
        if ident in seen: continue
        seen.add(ident)
        name = overrides[ident] if ident in overrides else (label if label else kind)
        rows.append((priority,[ident,name,kind,confirm and kind != 'collapse']))
    return [row for priority,row in sorted(rows,key=lambda item:item[0])]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('ordered descriptor set', solve([[['x','Open',True,True,False,'invoke',N+2],['y','',True,True,False,'expand',N],['z','Close',True,True,True,'collapse',N+1]],True,{'x':'Localized'+str(N)}],), [['y','expand','expand',False],['z','Close','collapse',True],['x','Localized'+str(N),'invoke',False]])
check('disabled entry does not reserve ID', solve([[['x','Bad',False,True,False,'invoke',0],['x','Good',True,True,False,'invoke',1]],False,{}],), [['x','Good','invoke',False]])
check('hidden and unknown', solve([[['x','X',True,False,False,'invoke',0],['y','Y',True,True,False,'erase',1]],True,{}],), [])
check('confirmation unavailable', solve([[['x','Delete',True,True,True,'invoke',0]],False,{}],), [])
check('empty override intentional', solve([[['x','Original',True,True,False,'invoke',0]],False,{'x':''}],), [['x','','invoke',False]])
check('dedupe first and stable ties', solve([[['x','First',True,True,False,'invoke',N],['y','Second',True,True,False,'expand',N],['x','Third',True,True,False,'collapse',0]],False,{}],), [['x','First','invoke',False],['y','Second','expand',False]])
check('empty', solve([[],False,{}],), [])
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
ordered descriptor set[['y', 'expand', 'expand', False], ['z', 'Close', 'collapse', False], ['x', 'Localized1', 'invoke', False]][['y', 'expand', 'expand', False], ['z', 'Close', 'collapse', True], ['x', 'Localized1', 'invoke', False]]Failed
disabled entry does not reserve ID[['x', 'Good', 'invoke', False]][['x', 'Good', 'invoke', False]]Passed
hidden and unknown[][]Passed
confirmation unavailable[][]Passed
empty override intentional[['x', '', 'invoke', False]][['x', '', 'invoke', False]]Passed
dedupe first and stable ties[['x', 'First', 'invoke', False], ['y', 'Second', 'expand', False]][['x', 'First', 'invoke', False], ['y', 'Second', 'expand', False]]Passed
empty[][]Passed

SHA-256 / 2316ff30e31a9ba1808c473071ead086f1ad51ff40fb6130a666e9cab2a1efd7

3 / The verified repair

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

N = 1
observations = []
def solve(data):
    actions,permission,overrides = data
    seen = set()
    rows = []
    for ident,label,enabled,exposed,confirm,kind,priority in actions:
        if kind not in {'invoke','expand','collapse','increment','decrement'}: continue
        if not enabled: continue
        if not exposed: continue
        if confirm and not permission: continue
        if ident in seen: continue
        seen.add(ident)
        name = overrides[ident] if ident in overrides else (label if label else kind)
        rows.append((priority,[ident,name,kind,confirm]))
    return [row for priority,row in sorted(rows,key=lambda item:item[0])]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('ordered descriptor set', solve([[['x','Open',True,True,False,'invoke',N+2],['y','',True,True,False,'expand',N],['z','Close',True,True,True,'collapse',N+1]],True,{'x':'Localized'+str(N)}],), [['y','expand','expand',False],['z','Close','collapse',True],['x','Localized'+str(N),'invoke',False]])
check('disabled entry does not reserve ID', solve([[['x','Bad',False,True,False,'invoke',0],['x','Good',True,True,False,'invoke',1]],False,{}],), [['x','Good','invoke',False]])
check('hidden and unknown', solve([[['x','X',True,False,False,'invoke',0],['y','Y',True,True,False,'erase',1]],True,{}],), [])
check('confirmation unavailable', solve([[['x','Delete',True,True,True,'invoke',0]],False,{}],), [])
check('empty override intentional', solve([[['x','Original',True,True,False,'invoke',0]],False,{'x':''}],), [['x','','invoke',False]])
check('dedupe first and stable ties', solve([[['x','First',True,True,False,'invoke',N],['y','Second',True,True,False,'expand',N],['x','Third',True,True,False,'collapse',0]],False,{}],), [['x','First','invoke',False],['y','Second','expand',False]])
check('empty', solve([[],False,{}],), [])
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
ordered descriptor set[['y', 'expand', 'expand', False], ['z', 'Close', 'collapse', True], ['x', 'Localized1', 'invoke', False]][['y', 'expand', 'expand', False], ['z', 'Close', 'collapse', True], ['x', 'Localized1', 'invoke', False]]Passed
disabled entry does not reserve ID[['x', 'Good', 'invoke', False]][['x', 'Good', 'invoke', False]]Passed
hidden and unknown[][]Passed
confirmation unavailable[][]Passed
empty override intentional[['x', '', 'invoke', False]][['x', '', 'invoke', False]]Passed
dedupe first and stable ties[['x', 'First', 'invoke', False], ['y', 'Second', 'expand', False]][['x', 'First', 'invoke', False], ['y', 'Second', 'expand', False]]Passed
empty[][]Passed

SHA-256 / 1b66e4e52237053feddeb5ca1f8a1d08cee4c1a84c98f140cc67b2ff2c073047

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

Case digest / ee1592a19c0c5af51d0a2dfd0f39968ad68fad275c53b34bd5673d9c2eb2eea5