FA-38366 / Tree accessibility / Open access
Visible tree range selection: Range union toggles previously selected descendants · case 01
Range union toggles previously selected descendants produces the wrong hierarchical widget state in a regression fixture.
ROOT CAUSE
The range-selection contract is violated at `selected=set(eligible)|kept` by replacing it with `selected=set(eligible)&kept`.
VERIFIED REPAIR
Restore `selected=set(eligible)|kept` at this fault site while retaining the other tree state decisions.
Unsuccessful approach: The partial repair `selected=set(eligible)-kept` still violates a boundary or preservation case.
Case contract
Selectable rows are the ordered visible preorder supplied in rows; disabled rows cannot be selected. A hidden anchor falls back to focus. Preserve outside selections only for additive ranges. Report focus, anchor, ordered selection, and branch coverage.
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):
rows=d['rows']; blocked=set(d['disabled']); old=set(d['selected'])
anchor=d['anchor'] if d['anchor'] in rows else d['focus']
a=rows.index(anchor); b=rows.index(d['target'])
span=rows[min(a,b):max(a,b)+1]
eligible=[x for x in span if x not in blocked]
kept=old if d['additive'] else set()
selected=set(eligible)&kept
ordered=[x for x in rows if x in selected]
focus=d['target']
next_anchor=anchor
branch=[x for x in d['branch'] if x in rows and x not in blocked]
covered=bool(branch) and all(x in selected for x in branch)
return [ordered,focus,next_anchor,covered]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2'], 'c2', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'a'], 'c2', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': False, 'branch': []}, [['z', 'c0', 'c2'], 'c2', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2'], 'c2', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 2: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3'], 'c3', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'a'], 'c3', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3'], 'c3', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3'], 'c3', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 3: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4'], 'c4', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'a'], 'c4', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3', 'c4'], 'c4', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3', 'c4'], 'c4', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 4: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5'], 'c5', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'a'], 'c5', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5'], 'c5', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5'], 'c5', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 5: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6'], 'c6', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'c6', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6'], 'c6', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6'], 'c6', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])]}
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| forward | [[], 'c2', 'z', False] | [['z', 'c0', 'c2'], 'c2', 'z', True] | Failed |
| reverse | [[], 'z', 'a', False] | [['z', 'c0', 'c2', 'a'], 'z', 'a', True] | Failed |
| additive | [[], 'c2', 'z', False] | [['z', 'c0', 'c2', 'a'], 'c2', 'z', True] | Failed |
| hidden anchor | [[], 'z', 'c0', False] | [['z', 'c0'], 'z', 'c0', True] | Failed |
| empty branch | [[], 'c2', 'z', False] | [['z', 'c0', 'c2'], 'c2', 'z', False] | Failed |
| partial branch | [[], 'c2', 'z', False] | [['z', 'c0', 'c2'], 'c2', 'z', False] | Failed |
| singleton | [[], 'c0', 'c0', False] | [['c0'], 'c0', 'c0', False] | Failed |
| disabled target | [[], 'c1', 'z', False] | [['z', 'c0'], 'c1', 'z', True] | Failed |
SHA-256 / 0bf5b9f6ef5f237dacfd926e15b9d0cea64146f506a69878fdc8f9199bcca48f
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
rows=d['rows']; blocked=set(d['disabled']); old=set(d['selected'])
anchor=d['anchor'] if d['anchor'] in rows else d['focus']
a=rows.index(anchor); b=rows.index(d['target'])
span=rows[min(a,b):max(a,b)+1]
eligible=[x for x in span if x not in blocked]
kept=old if d['additive'] else set()
selected=set(eligible)-kept
ordered=[x for x in rows if x in selected]
focus=d['target']
next_anchor=anchor
branch=[x for x in d['branch'] if x in rows and x not in blocked]
covered=bool(branch) and all(x in selected for x in branch)
return [ordered,focus,next_anchor,covered]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2'], 'c2', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'a'], 'c2', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': False, 'branch': []}, [['z', 'c0', 'c2'], 'c2', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2'], 'c2', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 2: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3'], 'c3', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'a'], 'c3', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3'], 'c3', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3'], 'c3', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 3: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4'], 'c4', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'a'], 'c4', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3', 'c4'], 'c4', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3', 'c4'], 'c4', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 4: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5'], 'c5', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'a'], 'c5', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5'], 'c5', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5'], 'c5', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 5: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6'], 'c6', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'c6', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6'], 'c6', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6'], 'c6', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])]}
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| forward | [['z', 'c0', 'c2'], 'c2', 'z', True] | [['z', 'c0', 'c2'], 'c2', 'z', True] | Passed |
| reverse | [['z', 'c0', 'c2', 'a'], 'z', 'a', True] | [['z', 'c0', 'c2', 'a'], 'z', 'a', True] | Passed |
| additive | [['z', 'c0', 'c2'], 'c2', 'z', True] | [['z', 'c0', 'c2', 'a'], 'c2', 'z', True] | Failed |
| hidden anchor | [['z', 'c0'], 'z', 'c0', True] | [['z', 'c0'], 'z', 'c0', True] | Passed |
| empty branch | [['z', 'c0', 'c2'], 'c2', 'z', False] | [['z', 'c0', 'c2'], 'c2', 'z', False] | Passed |
| partial branch | [['z', 'c0', 'c2'], 'c2', 'z', False] | [['z', 'c0', 'c2'], 'c2', 'z', False] | Passed |
| singleton | [['c0'], 'c0', 'c0', False] | [['c0'], 'c0', 'c0', False] | Passed |
| disabled target | [['z', 'c0'], 'c1', 'z', True] | [['z', 'c0'], 'c1', 'z', True] | Passed |
SHA-256 / a77d97fbf47afe6507a4ca2c7f821ff43dc11be8173a251a5972654bace92d4b
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
rows=d['rows']; blocked=set(d['disabled']); old=set(d['selected'])
anchor=d['anchor'] if d['anchor'] in rows else d['focus']
a=rows.index(anchor); b=rows.index(d['target'])
span=rows[min(a,b):max(a,b)+1]
eligible=[x for x in span if x not in blocked]
kept=old if d['additive'] else set()
selected=set(eligible)|kept
ordered=[x for x in rows if x in selected]
focus=d['target']
next_anchor=anchor
branch=[x for x in d['branch'] if x in rows and x not in blocked]
covered=bool(branch) and all(x in selected for x in branch)
return [ordered,focus,next_anchor,covered]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2'], 'c2', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'a'], 'c2', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': False, 'branch': []}, [['z', 'c0', 'c2'], 'c2', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c2', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2'], 'c2', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 2: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3'], 'c3', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'a'], 'c3', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3'], 'c3', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c3', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3'], 'c3', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 3: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4'], 'c4', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'a'], 'c4', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3', 'c4'], 'c4', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c4', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3', 'c4'], 'c4', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 4: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5'], 'c5', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'a'], 'c5', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5'], 'c5', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c5', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5'], 'c5', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])], 5: [('forward', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6'], 'c6', 'z', True]), ('reverse', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'a', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'z', 'a', True]), ('additive', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': True, 'branch': ['z', 'c0']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'c6', 'z', True]), ('hidden anchor', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'hidden', 'focus': 'c0', 'target': 'z', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'z', 'c0', True]), ('empty branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': False, 'branch': []}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6'], 'c6', 'z', False]), ('partial branch', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c6', 'additive': False, 'branch': ['a', 'z']}, [['z', 'c0', 'c2', 'c3', 'c4', 'c5', 'c6'], 'c6', 'z', False]), ('singleton', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'c0', 'focus': 'c0', 'target': 'c0', 'additive': False, 'branch': ['z', 'c0']}, [['c0'], 'c0', 'c0', False]), ('disabled target', {'rows': ['r', 'z', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'a'], 'disabled': ['c1'], 'selected': ['a'], 'anchor': 'z', 'focus': 'c0', 'target': 'c1', 'additive': False, 'branch': ['z', 'c0']}, [['z', 'c0'], 'c1', 'z', True])]}
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| forward | [['z', 'c0', 'c2'], 'c2', 'z', True] | [['z', 'c0', 'c2'], 'c2', 'z', True] | Passed |
| reverse | [['z', 'c0', 'c2', 'a'], 'z', 'a', True] | [['z', 'c0', 'c2', 'a'], 'z', 'a', True] | Passed |
| additive | [['z', 'c0', 'c2', 'a'], 'c2', 'z', True] | [['z', 'c0', 'c2', 'a'], 'c2', 'z', True] | Passed |
| hidden anchor | [['z', 'c0'], 'z', 'c0', True] | [['z', 'c0'], 'z', 'c0', True] | Passed |
| empty branch | [['z', 'c0', 'c2'], 'c2', 'z', False] | [['z', 'c0', 'c2'], 'c2', 'z', False] | Passed |
| partial branch | [['z', 'c0', 'c2'], 'c2', 'z', False] | [['z', 'c0', 'c2'], 'c2', 'z', False] | Passed |
| singleton | [['c0'], 'c0', 'c0', False] | [['c0'], 'c0', 'c0', False] | Passed |
| disabled target | [['z', 'c0'], 'c1', 'z', True] | [['z', 'c0'], 'c1', 'z', True] | Passed |
SHA-256 / c77297f0abf164da3e46d648eb00773bc436cc39a83df4949dabc59c65bcc9af
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:10.423733+00:00.
Case digest / 30918b4e0663092b66b33f273740436000d001554d7904bd7b4d1cf4aca1486b