FAILURE MAP
← Case archive

FA-38811 / Tree accessibility / Open access

Hierarchical treegrid interaction mode: Mode transition ignores Escape or entry eligibility · case 01

Mode transition ignores Escape or entry eligibility produces the wrong hierarchical widget state in a regression fixture.

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

ROOT CAUSE

The treegrid-mode contract is violated at `mode='row' if escape else ('cell' if enter else d['mode'])` by replacing it with `mode='cell' if enter else d['mode']`.

VERIFIED REPAIR

Restore `mode='row' if escape else ('cell' if enter else d['mode'])` at this fault site while retaining the other tree state decisions.

Unsuccessful approach: The partial repair `mode='row' if escape else 'cell'` still violates a boundary or preservation case.

Case contract

Row navigation uses one logical active row. Entering cell mode chooses a visible editable cell in the row; unavailable cells are skipped. Escape returns row mode without moving row focus. Column hiding repairs cell identity, and editable descendants never become separate tree rows.

Why this case matters

Offline executable model of a hierarchical accessibility interaction; inputs are bounded and valid as stipulated. No browser, assistive technology, or normative ARIA conformance is claimed.

1 / The failure

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

N = 1
observations = []
def solve(d):
    cols=[x for x in d['columns'] if x not in d['hidden']]
    editable=[x for x in cols if x in d['editable']]
    enter=d['command']=='enter' and bool(editable) and not d['row_disabled']
    escape=d['command']=='escape'
    mode='cell' if enter else d['mode']
    cell=(editable[0] if enter else d['cell']) if mode=='cell' else None
    cell=cell if cell in cols else (cols[0] if mode=='cell' and cols else None)
    active=d['row']+':'+cell if mode=='cell' and cell is not None else d['row']
    rowtab=0 if mode=='row' else -1
    celltabs={x:(0 if mode=='cell' and x==cell else -1) for x in cols}
    expanded=d['expanded']
    return [mode,cell,active,rowtab,celltabs,expanded]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('enter', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 2: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 3: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 4: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 5: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
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
enter['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]Passed
readonly first['cell', 'x', 'r:x', -1, {'name': -1, 'v0': -1, 'x': 0, 'y': -1}, ['r']]['cell', 'x', 'r:x', -1, {'name': -1, 'v0': -1, 'x': 0, 'y': -1}, ['r']]Passed
escape['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Failed
disabled['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Passed
no editable['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Passed
hidden active['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]Passed
visible active['cell', 'y', 'r:y', -1, {'v0': -1, 'x': -1, 'y': 0}, ['r']]['cell', 'y', 'r:y', -1, {'v0': -1, 'x': -1, 'y': 0}, ['r']]Passed
passive row['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Passed
no columns['row', None, 'r', 0, {}, ['r']]['row', None, 'r', 0, {}, ['r']]Passed

SHA-256 / 736b39cb6a91298933361f7aec1b291707c99210c73b6db8716719b4922b7eff

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(d):
    cols=[x for x in d['columns'] if x not in d['hidden']]
    editable=[x for x in cols if x in d['editable']]
    enter=d['command']=='enter' and bool(editable) and not d['row_disabled']
    escape=d['command']=='escape'
    mode='row' if escape else 'cell'
    cell=(editable[0] if enter else d['cell']) if mode=='cell' else None
    cell=cell if cell in cols else (cols[0] if mode=='cell' and cols else None)
    active=d['row']+':'+cell if mode=='cell' and cell is not None else d['row']
    rowtab=0 if mode=='row' else -1
    celltabs={x:(0 if mode=='cell' and x==cell else -1) for x in cols}
    expanded=d['expanded']
    return [mode,cell,active,rowtab,celltabs,expanded]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('enter', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 2: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 3: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 4: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 5: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
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
enter['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]Passed
readonly first['cell', 'x', 'r:x', -1, {'name': -1, 'v0': -1, 'x': 0, 'y': -1}, ['r']]['cell', 'x', 'r:x', -1, {'name': -1, 'v0': -1, 'x': 0, 'y': -1}, ['r']]Passed
escape['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Passed
disabled['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Failed
no editable['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Failed
hidden active['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]Passed
visible active['cell', 'y', 'r:y', -1, {'v0': -1, 'x': -1, 'y': 0}, ['r']]['cell', 'y', 'r:y', -1, {'v0': -1, 'x': -1, 'y': 0}, ['r']]Passed
passive row['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Failed
no columns['cell', None, 'r', -1, {}, ['r']]['row', None, 'r', 0, {}, ['r']]Failed

SHA-256 / 5526dee976e341c15b899e910d9ae23d04a36478e20165490bab89372b3701c9

3 / The verified repair

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

N = 1
observations = []
def solve(d):
    cols=[x for x in d['columns'] if x not in d['hidden']]
    editable=[x for x in cols if x in d['editable']]
    enter=d['command']=='enter' and bool(editable) and not d['row_disabled']
    escape=d['command']=='escape'
    mode='row' if escape else ('cell' if enter else d['mode'])
    cell=(editable[0] if enter else d['cell']) if mode=='cell' else None
    cell=cell if cell in cols else (cols[0] if mode=='cell' and cols else None)
    active=d['row']+':'+cell if mode=='cell' and cell is not None else d['row']
    rowtab=0 if mode=='row' else -1
    celltabs={x:(0 if mode=='cell' and x==cell else -1) for x in cols}
    expanded=d['expanded']
    return [mode,cell,active,rowtab,celltabs,expanded]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('enter', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 2: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 3: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 4: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])], 5: [('enter', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('readonly first', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': [], 'editable': ['x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'name': -1, 'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('escape', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'escape', 'row_disabled': False, 'mode': 'cell', 'cell': 'x', 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('disabled', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': True, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('no editable', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': [], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('hidden active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'name', 'row': 'r', 'expanded': ['r']}, ['cell', 'x', 'r:x', -1, {'x': 0, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('visible active', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'cell', 'cell': 'y', 'row': 'r', 'expanded': ['r']}, ['cell', 'y', 'r:y', -1, {'x': -1, 'y': 0, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('passive row', {'columns': ['name', 'x', 'y', 'v0', 'v1', 'v2', 'v3', 'v4'], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'refresh', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {'x': -1, 'y': -1, 'v0': -1, 'v1': -1, 'v2': -1, 'v3': -1, 'v4': -1}, ['r']]), ('no columns', {'columns': [], 'hidden': ['name'], 'editable': ['name', 'x', 'y'], 'command': 'enter', 'row_disabled': False, 'mode': 'row', 'cell': None, 'row': 'r', 'expanded': ['r']}, ['row', None, 'r', 0, {}, ['r']])]}
for label, data, expected in cases[N]:
    check(label, solve(data), expected)
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
enter['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]Passed
readonly first['cell', 'x', 'r:x', -1, {'name': -1, 'v0': -1, 'x': 0, 'y': -1}, ['r']]['cell', 'x', 'r:x', -1, {'name': -1, 'v0': -1, 'x': 0, 'y': -1}, ['r']]Passed
escape['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Passed
disabled['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Passed
no editable['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Passed
hidden active['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]['cell', 'x', 'r:x', -1, {'v0': -1, 'x': 0, 'y': -1}, ['r']]Passed
visible active['cell', 'y', 'r:y', -1, {'v0': -1, 'x': -1, 'y': 0}, ['r']]['cell', 'y', 'r:y', -1, {'v0': -1, 'x': -1, 'y': 0}, ['r']]Passed
passive row['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]['row', None, 'r', 0, {'v0': -1, 'x': -1, 'y': -1}, ['r']]Passed
no columns['row', None, 'r', 0, {}, ['r']]['row', None, 'r', 0, {}, ['r']]Passed

SHA-256 / 71fa4723cf8cf41313708a2de7053d1c140d687443713dcfed8f5cc2f73c6bf7

Verification & scope

Synthetic deterministic hierarchical-widget data contract; not an implementation of a browser accessibility tree. 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:43:15.012998+00:00.

Case digest / f1afa1b8e68f47949d9e16ecf4ee4ce03409a41bbfed84585a8663f0c0a87b9a