FA-38956 / Tree accessibility / Open access
Tree expansion undo journal: Undo clears expansion forced by another interaction · case 01
Undo clears expansion forced by another interaction produces the wrong hierarchical widget state in a regression fixture.
ROOT CAUSE
The expansion-undo contract is violated at `set(d['filter_open'])|set(d['load_open'])` by replacing it with `set(d['filter_open'])`.
VERIFIED REPAIR
Restore `set(d['filter_open'])|set(d['load_open'])` at this fault site while retaining the other tree state decisions.
Unsuccessful approach: The partial repair `set(d['load_open'])` still violates a boundary or preservation case.
Case contract
Undo restores the prior expansion set only for surviving branches. Non-undoable loading and filter expansions remain separate. Journal entries belong to a tree generation; stale generations are discarded. Focus restored from journal must be visible under restored expansion.
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):
valid=bool(d['journal']) and d['journal'][-1]['generation']==d['generation']
entry=d['journal'][-1] if valid else None
restored=set(entry['before'])&set(d['branches']) if valid else set(d['open'])
forced=set(d['filter_open'])
effective=restored|forced
journal=d['journal'][:-1] if d['journal'] else []
redo=d['redo']+[entry] if valid else d['redo']
visible=[x for x in d['rows'] if all(a in effective for a in d['ancestors'].get(x,[]))]
candidate=entry['focus'] if valid else d['focus']
focus=candidate if candidate in visible else (visible[0] if visible else None)
return [sorted(restored),sorted(effective),journal,redo,visible,focus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('undo latest', {'generation': 1, 'journal': [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 1, 'journal': [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 0, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 1, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 1, 'journal': [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 1, 'journal': [{'generation': 1, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 1, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 1, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 2: [('undo latest', {'generation': 2, 'journal': [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 2, 'journal': [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 1, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 2, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 2, 'journal': [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 2, 'journal': [{'generation': 2, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 2, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 2, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 3: [('undo latest', {'generation': 3, 'journal': [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 3, 'journal': [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 2, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 3, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 3, 'journal': [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 3, 'journal': [{'generation': 3, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 3, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 3, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 4: [('undo latest', {'generation': 4, 'journal': [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 4, 'journal': [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 3, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 4, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 4, 'journal': [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 4, 'journal': [{'generation': 4, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 4, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 4, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 5: [('undo latest', {'generation': 5, 'journal': [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 5, 'journal': [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 4, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 5, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 5, 'journal': [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 5, 'journal': [{'generation': 5, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 5, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 5, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])]}
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 |
|---|---|---|---|
| undo latest | [['a', 'r'], ['a', 'q', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q', 's'], 'b'] | [['a', 'r'], ['a', 'q', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q', 's'], 'b'] | Passed |
| stale latest | [['q'], ['q'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}], ['r', 'q', 's'], 's'] | [['q'], ['a', 'q'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}], ['r', 'q', 's'], 's'] | Failed |
| no journal | [['q'], ['q'], [], [{'old': True}], ['r', 'q', 's'], 's'] | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's'] | Failed |
| no forced | [['a', 'r'], ['a', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q'], 'b'] | [['a', 'r'], ['a', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q'], 'b'] | Passed |
| hidden journal focus | [[], [], [], [{'old': True}, {'after': ['r'], 'before': [], 'focus': 'b', 'generation': 1}], ['r', 'q'], 'r'] | [[], [], [], [{'old': True}, {'after': ['r'], 'before': [], 'focus': 'b', 'generation': 1}], ['r', 'q'], 'r'] | Passed |
| outside focus | [['q'], ['q'], [], [{'old': True}], ['r', 'q', 's'], 'q'] | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'] | Failed |
SHA-256 / 65fcae472930f41df55cfa0219948c595e4abe0aa39b1b43bba411c223717355
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
valid=bool(d['journal']) and d['journal'][-1]['generation']==d['generation']
entry=d['journal'][-1] if valid else None
restored=set(entry['before'])&set(d['branches']) if valid else set(d['open'])
forced=set(d['load_open'])
effective=restored|forced
journal=d['journal'][:-1] if d['journal'] else []
redo=d['redo']+[entry] if valid else d['redo']
visible=[x for x in d['rows'] if all(a in effective for a in d['ancestors'].get(x,[]))]
candidate=entry['focus'] if valid else d['focus']
focus=candidate if candidate in visible else (visible[0] if visible else None)
return [sorted(restored),sorted(effective),journal,redo,visible,focus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('undo latest', {'generation': 1, 'journal': [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 1, 'journal': [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 0, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 1, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 1, 'journal': [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 1, 'journal': [{'generation': 1, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 1, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 1, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 2: [('undo latest', {'generation': 2, 'journal': [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 2, 'journal': [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 1, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 2, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 2, 'journal': [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 2, 'journal': [{'generation': 2, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 2, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 2, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 3: [('undo latest', {'generation': 3, 'journal': [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 3, 'journal': [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 2, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 3, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 3, 'journal': [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 3, 'journal': [{'generation': 3, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 3, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 3, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 4: [('undo latest', {'generation': 4, 'journal': [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 4, 'journal': [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 3, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 4, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 4, 'journal': [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 4, 'journal': [{'generation': 4, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 4, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 4, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 5: [('undo latest', {'generation': 5, 'journal': [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 5, 'journal': [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 4, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 5, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 5, 'journal': [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 5, 'journal': [{'generation': 5, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 5, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 5, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])]}
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 |
|---|---|---|---|
| undo latest | [['a', 'r'], ['a', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q'], 'b'] | [['a', 'r'], ['a', 'q', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q', 's'], 'b'] | Failed |
| stale latest | [['q'], ['a', 'q'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}], ['r', 'q', 's'], 's'] | [['q'], ['a', 'q'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}], ['r', 'q', 's'], 's'] | Passed |
| no journal | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's'] | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's'] | Passed |
| no forced | [['a', 'r'], ['a', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q'], 'b'] | [['a', 'r'], ['a', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q'], 'b'] | Passed |
| hidden journal focus | [[], [], [], [{'old': True}, {'after': ['r'], 'before': [], 'focus': 'b', 'generation': 1}], ['r', 'q'], 'r'] | [[], [], [], [{'old': True}, {'after': ['r'], 'before': [], 'focus': 'b', 'generation': 1}], ['r', 'q'], 'r'] | Passed |
| outside focus | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'] | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'] | Passed |
SHA-256 / b809df264ed154aa105d23e5748d915af3fe1625a25280ec4b38e4bc1c2a1fc9
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
valid=bool(d['journal']) and d['journal'][-1]['generation']==d['generation']
entry=d['journal'][-1] if valid else None
restored=set(entry['before'])&set(d['branches']) if valid else set(d['open'])
forced=set(d['filter_open'])|set(d['load_open'])
effective=restored|forced
journal=d['journal'][:-1] if d['journal'] else []
redo=d['redo']+[entry] if valid else d['redo']
visible=[x for x in d['rows'] if all(a in effective for a in d['ancestors'].get(x,[]))]
candidate=entry['focus'] if valid else d['focus']
focus=candidate if candidate in visible else (visible[0] if visible else None)
return [sorted(restored),sorted(effective),journal,redo,visible,focus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('undo latest', {'generation': 1, 'journal': [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 1, 'journal': [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 0, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 1, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 1, 'journal': [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 1, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 1, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 1, 'journal': [{'generation': 1, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 1, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 1, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 2: [('undo latest', {'generation': 2, 'journal': [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 2, 'journal': [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 1, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 2, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 2, 'journal': [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 2, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 2, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 2, 'journal': [{'generation': 2, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 2, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 2, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 3: [('undo latest', {'generation': 3, 'journal': [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 3, 'journal': [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 2, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 3, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 3, 'journal': [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 3, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 3, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 3, 'journal': [{'generation': 3, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 3, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 3, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 4: [('undo latest', {'generation': 4, 'journal': [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 4, 'journal': [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 3, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 4, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 4, 'journal': [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 4, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 4, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 4, 'journal': [{'generation': 4, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 4, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 4, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])], 5: [('undo latest', {'generation': 5, 'journal': [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'q', 'r'], [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q', 's'], 'b']), ('stale latest', {'generation': 5, 'journal': [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 4, 'before': ['a'], 'after': [], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}], ['r', 'q', 's'], 's']), ('no journal', {'generation': 5, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's']), ('no forced', {'generation': 5, 'journal': [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [['a', 'r'], ['a', 'r'], [{'generation': 5, 'before': ['r'], 'after': ['a'], 'focus': 'r'}], [{'old': True}, {'generation': 5, 'before': ['r', 'a', 'gone'], 'after': ['r'], 'focus': 'b'}], ['r', 'a', 'b', 'q'], 'b']), ('hidden journal focus', {'generation': 5, 'journal': [{'generation': 5, 'before': [], 'after': ['r'], 'focus': 'b'}], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': [], 'load_open': [], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 's'}, [[], [], [], [{'old': True}, {'generation': 5, 'before': [], 'after': ['r'], 'focus': 'b'}], ['r', 'q'], 'r']), ('outside focus', {'generation': 5, 'journal': [], 'branches': ['r', 'a', 'q'], 'open': ['q'], 'filter_open': ['q'], 'load_open': ['a'], 'redo': [{'old': True}], 'rows': ['r', 'a', 'b', 'q', 's'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 's': ['q']}, 'focus': 'q'}, [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'])]}
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 |
|---|---|---|---|
| undo latest | [['a', 'r'], ['a', 'q', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q', 's'], 'b'] | [['a', 'r'], ['a', 'q', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q', 's'], 'b'] | Passed |
| stale latest | [['q'], ['a', 'q'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}], ['r', 'q', 's'], 's'] | [['q'], ['a', 'q'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}], ['r', 'q', 's'], 's'] | Passed |
| no journal | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's'] | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 's'] | Passed |
| no forced | [['a', 'r'], ['a', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q'], 'b'] | [['a', 'r'], ['a', 'r'], [{'after': ['a'], 'before': ['r'], 'focus': 'r', 'generation': 1}], [{'old': True}, {'after': ['r'], 'before': ['r', 'a', 'gone'], 'focus': 'b', 'generation': 1}], ['r', 'a', 'b', 'q'], 'b'] | Passed |
| hidden journal focus | [[], [], [], [{'old': True}, {'after': ['r'], 'before': [], 'focus': 'b', 'generation': 1}], ['r', 'q'], 'r'] | [[], [], [], [{'old': True}, {'after': ['r'], 'before': [], 'focus': 'b', 'generation': 1}], ['r', 'q'], 'r'] | Passed |
| outside focus | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'] | [['q'], ['a', 'q'], [], [{'old': True}], ['r', 'q', 's'], 'q'] | Passed |
SHA-256 / 1bdd690eef5fa6189c059d0d65ce5bd54746f87e82100223d5f9f94a7d99e4bf
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:16.476348+00:00.
Case digest / d769fadfdb3ba3204b4ac91c7c5487dc082d19cc5aec226607e8ffcd3cc4c307