FA-38766 / Tree accessibility / Open access
Hierarchical filter projection: Filter focus recovery chooses remote ancestor · case 01
Filter focus recovery chooses remote ancestor produces the wrong hierarchical widget state in a regression fixture.
ROOT CAUSE
The tree-filter-projection contract is violated at `reversed(d['ancestors'].get(d['focus'],[]))` by replacing it with `d['ancestors'].get(d['focus'],[])`.
VERIFIED REPAIR
Restore `reversed(d['ancestors'].get(d['focus'],[]))` at this fault site while retaining the other tree state decisions.
Unsuccessful approach: The partial repair `[]` still violates a boundary or preservation case.
Case contract
Matching rows retain all ancestors as context. Context-only branches auto-open without changing saved expansion. Selection remains by ID across filtering; focus hidden by the filter returns to nearest projected ancestor. Sibling positions are recomputed among projected children.
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):
matched=set(d['matches'])&set(d['rows'])
context={a for x in matched for a in d['ancestors'].get(x,[])}
projected=[x for x in d['rows'] if x in matched|context]
opened=sorted(set(d['saved_open'])|context)
selected=d['selected']
focus=d['focus'] if d['focus'] in projected else next((a for a in d['ancestors'].get(d['focus'],[]) if a in projected),(projected[0] if projected else None))
positions={x:1+sum(d['parents'].get(y)==d['parents'].get(x) for y in projected[:i]) for i,x in enumerate(projected)}
sizes={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in projected) for x in projected}
context_only=[x for x in projected if x not in matched]
empty=not projected
return [projected,opened,selected,focus,positions,sizes,context_only,empty]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 2: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 3: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 4: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 5: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])]}
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 |
|---|---|---|---|
| deep match | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'z', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | Failed |
| missing match | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'z', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z', 'a'], False] | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z', 'a'], False] | Failed |
| ancestor match | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'z', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z'], False] | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z'], False] | Failed |
| no matches | [[], ['q'], ['c', 'q'], None, {}, {}, [], True] | [[], ['q'], ['c', 'q'], None, {}, {}, [], True] | Passed |
| root match | [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False] | [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False] | Passed |
| focused match | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | Passed |
SHA-256 / 96b855cd26bf73177b19b3fc8f35a4ab0328c3678fd16d98478c666de860d401
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
matched=set(d['matches'])&set(d['rows'])
context={a for x in matched for a in d['ancestors'].get(x,[])}
projected=[x for x in d['rows'] if x in matched|context]
opened=sorted(set(d['saved_open'])|context)
selected=d['selected']
focus=d['focus'] if d['focus'] in projected else next((a for a in [] if a in projected),(projected[0] if projected else None))
positions={x:1+sum(d['parents'].get(y)==d['parents'].get(x) for y in projected[:i]) for i,x in enumerate(projected)}
sizes={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in projected) for x in projected}
context_only=[x for x in projected if x not in matched]
empty=not projected
return [projected,opened,selected,focus,positions,sizes,context_only,empty]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 2: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 3: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 4: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 5: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])]}
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 |
|---|---|---|---|
| deep match | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'z', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | Failed |
| missing match | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'z', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z', 'a'], False] | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z', 'a'], False] | Failed |
| ancestor match | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'z', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z'], False] | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z'], False] | Failed |
| no matches | [[], ['q'], ['c', 'q'], None, {}, {}, [], True] | [[], ['q'], ['c', 'q'], None, {}, {}, [], True] | Passed |
| root match | [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False] | [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False] | Passed |
| focused match | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | Passed |
SHA-256 / 0a316ad5e9e6352bcfdb7c763521b949df18dc87683fc27a4a8c9171f57155a4
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
matched=set(d['matches'])&set(d['rows'])
context={a for x in matched for a in d['ancestors'].get(x,[])}
projected=[x for x in d['rows'] if x in matched|context]
opened=sorted(set(d['saved_open'])|context)
selected=d['selected']
focus=d['focus'] if d['focus'] in projected else next((a for a in reversed(d['ancestors'].get(d['focus'],[])) if a in projected),(projected[0] if projected else None))
positions={x:1+sum(d['parents'].get(y)==d['parents'].get(x) for y in projected[:i]) for i,x in enumerate(projected)}
sizes={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in projected) for x in projected}
context_only=[x for x in projected if x not in matched]
empty=not projected
return [projected,opened,selected,focus,positions,sizes,context_only,empty]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 2: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 3: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 4: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])], 5: [('deep match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False]), ('missing match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['b', 'gone'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z', 'a'], False]), ('ancestor match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['a', 'b'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'z': 1, 'a': 1, 'b': 1}, {'z': 1, 'a': 1, 'b': 1}, ['z'], False]), ('no matches', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': [], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [[], ['q'], ['c', 'q'], None, {}, {}, [], True]), ('root match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'c'}, [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False]), ('focused match', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'matches': ['b', 'q'], 'ancestors': {'z': [], 'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a'], 'q': [], 'gone': ['ghost']}, 'parents': {'z': None, 'a': 'z', 'b': 'a', 'c': 'a', 'q': None}, 'saved_open': ['q'], 'selected': ['c', 'q'], 'focus': 'b'}, [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'z': 1, 'a': 1, 'b': 1, 'q': 2}, {'z': 2, 'a': 1, 'b': 1, 'q': 2}, ['z', 'a'], False])]}
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 |
|---|---|---|---|
| deep match | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | Passed |
| missing match | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z', 'a'], False] | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z', 'a'], False] | Passed |
| ancestor match | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z'], False] | [['z', 'a', 'b'], ['a', 'q', 'z'], ['c', 'q'], 'a', {'a': 1, 'b': 1, 'z': 1}, {'a': 1, 'b': 1, 'z': 1}, ['z'], False] | Passed |
| no matches | [[], ['q'], ['c', 'q'], None, {}, {}, [], True] | [[], ['q'], ['c', 'q'], None, {}, {}, [], True] | Passed |
| root match | [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False] | [['q'], ['q'], ['c', 'q'], 'q', {'q': 1}, {'q': 1}, [], False] | Passed |
| focused match | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | [['z', 'a', 'b', 'q'], ['a', 'q', 'z'], ['c', 'q'], 'b', {'a': 1, 'b': 1, 'q': 2, 'z': 1}, {'a': 1, 'b': 1, 'q': 2, 'z': 2}, ['z', 'a'], False] | Passed |
SHA-256 / 3a6f5ad8460155c92c40a3fb6228f2f7ba6c1c40704e56b2d9517fc9edf3139d
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:14.505717+00:00.
Case digest / 066657a37f7b5a52e0519669499d33503b129d99f9bc53bab74776354a009789