FAILURE MAP
← Case archive

FA-11416 / Accessibility interaction semantics / Open access

A virtual window reports local positions as global set positions · case 01

The first rendered row is announced as item one even when earlier items are offscreen.

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

ROOT CAUSE

Rendered row index and rendered window length replace logical dataset index and total.

VERIFIED REPAIR

Offset one-based positions and carry the declared total, including the unknown-total sentinel.

Unsuccessful approach: Adding the global offset fixes positions but reporting the window end as total understates a known larger dataset and fabricates unknown totals.

Case contract

Return [identifier,one_based_position,total] for a contiguous rendered window at zero-based offset. total is the full known dataset size or -1 for unknown; fixtures have valid offsets and known totals large enough for the window. An empty window returns [].

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(items, offset, total):
    return [[item,i+1,len(items)] for i,item in enumerate(items)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('middle window', solve(['a','b'], N, N+10), [['a',N+1,N+10],['b',N+2,N+10]])
check('unknown total', solve(['a'], N, -1), [['a',N+1,-1]])
check('first window', solve([str(N)], 0, N+5), [[str(N),1,N+5]])
check('last window', solve(['a'], N, N+1), [['a',N+1,N+1]])
check('whole set', solve(['a','b'], 0, 2), [['a',1,2],['b',2,2]])
check('empty unknown', solve([], N, -1), [])
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
middle window[['a', 1, 2], ['b', 2, 2]][['a', 2, 11], ['b', 3, 11]]Failed
unknown total[['a', 1, 1]][['a', 2, -1]]Failed
first window[['1', 1, 1]][['1', 1, 6]]Failed
last window[['a', 1, 1]][['a', 2, 2]]Failed
whole set[['a', 1, 2], ['b', 2, 2]][['a', 1, 2], ['b', 2, 2]]Passed
empty unknown[][]Passed

SHA-256 / 1924fcc2a26ffa5b7227c1ae9b614fd3950d3b7b5098f2acd5e9a99ccbf3f94c

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(items, offset, total):
    return [[item,offset+i+1,offset+len(items)] for i,item in enumerate(items)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('middle window', solve(['a','b'], N, N+10), [['a',N+1,N+10],['b',N+2,N+10]])
check('unknown total', solve(['a'], N, -1), [['a',N+1,-1]])
check('first window', solve([str(N)], 0, N+5), [[str(N),1,N+5]])
check('last window', solve(['a'], N, N+1), [['a',N+1,N+1]])
check('whole set', solve(['a','b'], 0, 2), [['a',1,2],['b',2,2]])
check('empty unknown', solve([], N, -1), [])
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
middle window[['a', 2, 3], ['b', 3, 3]][['a', 2, 11], ['b', 3, 11]]Failed
unknown total[['a', 2, 2]][['a', 2, -1]]Failed
first window[['1', 1, 1]][['1', 1, 6]]Failed
last window[['a', 2, 2]][['a', 2, 2]]Passed
whole set[['a', 1, 2], ['b', 2, 2]][['a', 1, 2], ['b', 2, 2]]Passed
empty unknown[][]Passed

SHA-256 / 329ead03919efaa1c74bb3bf5814177d3a7ae0f7ef1fe39b3dc0f79ff28a64f5

3 / The verified repair

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

N = 1
observations = []
def solve(items, offset, total):
    return [[item,offset+i+1,total] for i,item in enumerate(items)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('middle window', solve(['a','b'], N, N+10), [['a',N+1,N+10],['b',N+2,N+10]])
check('unknown total', solve(['a'], N, -1), [['a',N+1,-1]])
check('first window', solve([str(N)], 0, N+5), [[str(N),1,N+5]])
check('last window', solve(['a'], N, N+1), [['a',N+1,N+1]])
check('whole set', solve(['a','b'], 0, 2), [['a',1,2],['b',2,2]])
check('empty unknown', solve([], N, -1), [])
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
middle window[['a', 2, 11], ['b', 3, 11]][['a', 2, 11], ['b', 3, 11]]Passed
unknown total[['a', 2, -1]][['a', 2, -1]]Passed
first window[['1', 1, 6]][['1', 1, 6]]Passed
last window[['a', 2, 2]][['a', 2, 2]]Passed
whole set[['a', 1, 2], ['b', 2, 2]][['a', 1, 2], ['b', 2, 2]]Passed
empty unknown[][]Passed

SHA-256 / b78e0d61818d324ff06fb68cb80f60ef864546c59d506b4d72ca3dc22be25989

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

Case digest / e5665bf3d6c3f2671b1c2e7c3899d845b5cef9d7c2634f8f8d8bafcca4794e58