FAILURE MAP
← Case archive

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.

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

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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