FAILURE MAP
← Case archive

FA-38631 / Tree accessibility / Open access

Subtree deletion state cleanup: Range anchor cleanup crosses subtree boundary · case 01

Range anchor cleanup crosses subtree boundary produces the wrong hierarchical widget state in a regression fixture.

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

ROOT CAUSE

The delete-subtree contract is violated at `None if d['anchor'] in removed else d['anchor']` by replacing it with `d['anchor']`.

VERIFIED REPAIR

Restore `None if d['anchor'] in removed else d['anchor']` at this fault site while retaining the other tree state decisions.

Unsuccessful approach: The partial repair `None` still violates a boundary or preservation case.

Case contract

Remove a supplied subtree closure atomically. Focus inside the deleted subtree recovers to surviving next sibling, previous sibling, then parent, then first root. Preserve unrelated state; clear only removed anchor, edits, expansion, selection and pending loads.

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):
    removed=set(d['removed'])
    rows=[x for x in d['rows'] if x not in removed]
    selected=[x for x in d['selected'] if x not in removed]
    expanded=[x for x in d['expanded'] if x not in removed]
    pending={x:v for x,v in d['pending'].items() if x not in removed}
    nextrow=next((x for x in d['next'] if x in rows),None)
    prevrow=next((x for x in reversed(d['previous']) if x in rows),None)
    fallback=next((x for x in [nextrow,prevrow,d['parent']]+d['roots'] if x in rows),None)
    focus=fallback if d['focus'] in removed else d['focus']
    anchor=d['anchor']
    edit=None if d['edit'] in removed else d['edit']
    return [rows,selected,expanded,pending,focus,anchor,edit]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 2: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 3: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 4: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 5: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'x', None, None])]}
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
next recovery[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'z', 'c', None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'z', None, None]Failed
previous recovery[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', 'c', None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None]Failed
parent recovery[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'r', 'c', None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'r', None, None]Failed
unrelated focus[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a'][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']Passed
last root[[], ['a'], ['r'], {'a': 1}, None, 'c', None][[], ['a'], ['r'], {'a': 1}, None, None, None]Failed
stale neighbors[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', 'c', None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None]Failed

SHA-256 / 63e7bd36b08d579d0e2cdad5e1571026e97dde82beb5fe772e28103f8db6eadd

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(d):
    removed=set(d['removed'])
    rows=[x for x in d['rows'] if x not in removed]
    selected=[x for x in d['selected'] if x not in removed]
    expanded=[x for x in d['expanded'] if x not in removed]
    pending={x:v for x,v in d['pending'].items() if x not in removed}
    nextrow=next((x for x in d['next'] if x in rows),None)
    prevrow=next((x for x in reversed(d['previous']) if x in rows),None)
    fallback=next((x for x in [nextrow,prevrow,d['parent']]+d['roots'] if x in rows),None)
    focus=fallback if d['focus'] in removed else d['focus']
    anchor=None
    edit=None if d['edit'] in removed else d['edit']
    return [rows,selected,expanded,pending,focus,anchor,edit]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 2: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 3: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 4: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 5: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'x', None, None])]}
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
next recovery[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'z', None, None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'z', None, None]Passed
previous recovery[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None]Passed
parent recovery[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'r', None, None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'r', None, None]Passed
unrelated focus[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'a', None, 'a'][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']Failed
last root[[], ['a'], ['r'], {'a': 1}, None, None, None][[], ['a'], ['r'], {'a': 1}, None, None, None]Passed
stale neighbors[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None]Passed

SHA-256 / 45c8ec97d4a87b78a806e854d94c05ea3e8be7e99bf84fc8e4b20fe2ab762679

3 / The verified repair

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

N = 1
observations = []
def solve(d):
    removed=set(d['removed'])
    rows=[x for x in d['rows'] if x not in removed]
    selected=[x for x in d['selected'] if x not in removed]
    expanded=[x for x in d['expanded'] if x not in removed]
    pending={x:v for x,v in d['pending'].items() if x not in removed}
    nextrow=next((x for x in d['next'] if x in rows),None)
    prevrow=next((x for x in reversed(d['previous']) if x in rows),None)
    fallback=next((x for x in [nextrow,prevrow,d['parent']]+d['roots'] if x in rows),None)
    focus=fallback if d['focus'] in removed else d['focus']
    anchor=None if d['anchor'] in removed else d['anchor']
    edit=None if d['edit'] in removed else d['edit']
    return [rows,selected,expanded,pending,focus,anchor,edit]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 2: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 3: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 4: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3'], ['a'], ['r'], {'a': 1}, 'x', None, None])], 5: [('next recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'z', None, None]), ('previous recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'x', None, None]), ('parent recovery', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['a'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'r', None, None]), ('unrelated focus', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'previous': ['a', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'a', 'anchor': 'a', 'edit': 'a'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']), ('last root', {'removed': ['b', 'c'], 'rows': ['b', 'c'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': [], 'previous': [], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [[], ['a'], ['r'], {'a': 1}, None, None, None]), ('stale neighbors', {'removed': ['b', 'c'], 'rows': ['r', 'a', 'x', 'b', 'c', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], 'selected': ['a', 'c'], 'expanded': ['r', 'b'], 'pending': {'a': 1, 'c': 2}, 'next': ['c'], 'previous': ['a', 'c', 'x'], 'parent': 'r', 'roots': ['r'], 'focus': 'c', 'anchor': 'c', 'edit': 'c'}, [['r', 'a', 'x', 'z', 'q0', 'q1', 'q2', 'q3', 'q4'], ['a'], ['r'], {'a': 1}, 'x', None, None])]}
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
next recovery[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'z', None, None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'z', None, None]Passed
previous recovery[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None]Passed
parent recovery[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'r', None, None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'r', None, None]Passed
unrelated focus[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a'][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'a', 'a', 'a']Passed
last root[[], ['a'], ['r'], {'a': 1}, None, None, None][[], ['a'], ['r'], {'a': 1}, None, None, None]Passed
stale neighbors[['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None][['r', 'a', 'x', 'z', 'q0'], ['a'], ['r'], {'a': 1}, 'x', None, None]Passed

SHA-256 / 82498f6a70cf985a6fa199d162acf3231f8dfbc239a2ad301f824a695d227202

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

Case digest / 3d7c598b23e5c72cb2211b0c0de5c8e061856160abfa8533b79acfe494f1b49b