FAILURE MAP
← Case archive

FA-11426 / Accessibility interaction semantics / Open access

A removal is announced under an additions-only live policy · case 01

Live-region mutation filtering emits irrelevant event kinds or loses text edits under the default policy.

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

ROOT CAUSE

Every mutation is treated as a changed string without respecting the relevant event set.

VERIFIED REPAIR

Expand the default and all policies, then preserve the order of events whose kind is admitted.

Unsuccessful approach: Filtering explicit tokens works but interpreting an absent policy as additions-only drops text changes.

Case contract

Events are [kind,text], where kind is additions, removals or text. Policy is None for default additions+text, or a list of relevant tokens; all admits all three kinds. An explicit empty list admits nothing. Return admitted texts in event order without deduplication. This model stops before priority, busy or speech queue scheduling.

Why this case matters

A controlled offline accessibility-data model. It isolates the stated contract; it does not simulate browser accessibility APIs or claim full ARIA conformance.

1 / The failure

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

N = 1
observations = []
def solve(events, policy):
    return [text for kind,text in events]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('default includes edits', solve([('text',str(N)),('removals','gone')], None), [str(N)])
check('addition policy excludes removal', solve([('removals','gone'),('additions',str(N))], ['additions']), [str(N)])
check('all token expands', solve([('removals',str(N)),('text','new')], ['all']), [str(N),'new'])
check('explicit empty', solve([('additions',str(N))], []), [])
check('repeated distinct events retained', solve([('text',str(N)),('text',str(N))], ['text']), [str(N),str(N)])
check('no mutations', solve([], None), [])
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
default includes edits['1', 'gone']['1']Failed
addition policy excludes removal['gone', '1']['1']Failed
all token expands['1', 'new']['1', 'new']Passed
explicit empty['1'][]Failed
repeated distinct events retained['1', '1']['1', '1']Passed
no mutations[][]Passed

SHA-256 / e6d58d3b1d20818500f199644ca5d8f6433e46737dcdcfd6b521a3db042813d8

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(events, policy):
    allowed = {'additions'} if policy is None else set(policy)
    if 'all' in allowed: allowed = {'additions','removals','text'}
    return [text for kind,text in events if kind in allowed]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('default includes edits', solve([('text',str(N)),('removals','gone')], None), [str(N)])
check('addition policy excludes removal', solve([('removals','gone'),('additions',str(N))], ['additions']), [str(N)])
check('all token expands', solve([('removals',str(N)),('text','new')], ['all']), [str(N),'new'])
check('explicit empty', solve([('additions',str(N))], []), [])
check('repeated distinct events retained', solve([('text',str(N)),('text',str(N))], ['text']), [str(N),str(N)])
check('no mutations', solve([], None), [])
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
default includes edits[]['1']Failed
addition policy excludes removal['1']['1']Passed
all token expands['1', 'new']['1', 'new']Passed
explicit empty[][]Passed
repeated distinct events retained['1', '1']['1', '1']Passed
no mutations[][]Passed

SHA-256 / 26893a3dbbc1f256f853e98a88f18892ee99d71f2918083ae1dee946c67a9425

3 / The verified repair

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

N = 1
observations = []
def solve(events, policy):
    allowed = {'additions','text'} if policy is None else set(policy)
    if 'all' in allowed: allowed = {'additions','removals','text'}
    return [text for kind,text in events if kind in allowed]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('default includes edits', solve([('text',str(N)),('removals','gone')], None), [str(N)])
check('addition policy excludes removal', solve([('removals','gone'),('additions',str(N))], ['additions']), [str(N)])
check('all token expands', solve([('removals',str(N)),('text','new')], ['all']), [str(N),'new'])
check('explicit empty', solve([('additions',str(N))], []), [])
check('repeated distinct events retained', solve([('text',str(N)),('text',str(N))], ['text']), [str(N),str(N)])
check('no mutations', solve([], None), [])
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
default includes edits['1']['1']Passed
addition policy excludes removal['1']['1']Passed
all token expands['1', 'new']['1', 'new']Passed
explicit empty[][]Passed
repeated distinct events retained['1', '1']['1', '1']Passed
no mutations[][]Passed

SHA-256 / 4667f6b4cdb0591fcc506a91c750b5e4deed08b1ccdfc48d01b9848bff2d2730

Verification & scope

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

Case digest / fa75b9540b2c237f6013cf29a1bd95a32bd6d4482e9579e979b3b130393001a5