{"abstract":"Clipboard duplicates nested selections or excludes nonroot subtrees produces the wrong hierarchical widget state in a regression fixture.","category":"Tree accessibility","checks":7,"contract":"Copy or cut operates on selected topmost roots only, excluding descendants of a selected root. Roots follow tree order. Cut excludes read-only roots, retains protected selection, and advertises a move only within the same tree generation. Clipboard payload carries selected root paths and descendants once.","evaluation_group":"s3-tree-subtree-clipboard","failed_approach":"The partial repair `not d['ancestors'].get(x)` still violates a boundary or preservation case.","family":"s3-tree_accessibility-subtree-clipboard-02","id":"FA-39046","implementations":{"attempt":{"sha256":"d745a21206667b1b383b717592812e735dcfe9f15c11278dbc3b25f1ef2244c3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    selected=set(d['selected'])&set(d['rows'])\n    roots=[x for x in d['rows'] if x in selected and not d['ancestors'].get(x)]\n    allowed=[x for x in roots if d['mode']=='copy' or x not in d['readonly']]\n    closure=[x for x in d['rows'] if x in allowed or any(a in allowed for a in d['ancestors'].get(x,[]))]\n    paths={x:d['ancestors'].get(x,[])+[x] for x in allowed}\n    cut=allowed if d['mode']=='cut' else []\n    valid=d['clipboard_generation']==d['generation']\n    effect='move' if cut and valid and d['same_tree'] else ('copy' if allowed else 'none')\n    remaining=[x for x in d['selected'] if x not in closure] if effect=='move' else d['selected']\n    focus=allowed[0] if allowed else d['focus']\n    return [allowed,closure,paths,cut,effect,remaining,focus]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {1: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 0, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 2: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 3: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 4: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 5: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])]}\nfor label, data, expected in cases[N]:\n    check(label, solve(data), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"ea2e775824e85cb1a00e775dacc4f56fed40e4af24147a7648240fc24564f867","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    selected=set(d['selected'])&set(d['rows'])\n    roots=[x for x in d['rows'] if x in selected and True]\n    allowed=[x for x in roots if d['mode']=='copy' or x not in d['readonly']]\n    closure=[x for x in d['rows'] if x in allowed or any(a in allowed for a in d['ancestors'].get(x,[]))]\n    paths={x:d['ancestors'].get(x,[])+[x] for x in allowed}\n    cut=allowed if d['mode']=='cut' else []\n    valid=d['clipboard_generation']==d['generation']\n    effect='move' if cut and valid and d['same_tree'] else ('copy' if allowed else 'none')\n    remaining=[x for x in d['selected'] if x not in closure] if effect=='move' else d['selected']\n    focus=allowed[0] if allowed else d['focus']\n    return [allowed,closure,paths,cut,effect,remaining,focus]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {1: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 0, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 2: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 3: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 4: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 5: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])]}\nfor label, data, expected in cases[N]:\n    check(label, solve(data), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"2df50c75efd7213985a426362aebf1743059d180dd34d96a9cd36e24b00569a4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    selected=set(d['selected'])&set(d['rows'])\n    roots=[x for x in d['rows'] if x in selected and not any(a in selected for a in d['ancestors'].get(x,[]))]\n    allowed=[x for x in roots if d['mode']=='copy' or x not in d['readonly']]\n    closure=[x for x in d['rows'] if x in allowed or any(a in allowed for a in d['ancestors'].get(x,[]))]\n    paths={x:d['ancestors'].get(x,[])+[x] for x in allowed}\n    cut=allowed if d['mode']=='cut' else []\n    valid=d['clipboard_generation']==d['generation']\n    effect='move' if cut and valid and d['same_tree'] else ('copy' if allowed else 'none')\n    remaining=[x for x in d['selected'] if x not in closure] if effect=='move' else d['selected']\n    focus=allowed[0] if allowed else d['focus']\n    return [allowed,closure,paths,cut,effect,remaining,focus]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = {1: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 0, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 1, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 2: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 1, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 2, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 3: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 2, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 3, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 4: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 3, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 4, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])], 5: [('cut normalized', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'move', ['q'], 'a']), ('copy protected', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'copy', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, [], 'copy', ['a', 'b', 'q'], 'a']), ('several roots', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': [], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a', 'q'], ['a', 'b', 'c', 'q'], {'a': ['z', 'a'], 'q': ['q']}, ['a', 'q'], 'move', [], 'a']), ('stale cut', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 4, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('cross tree', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['a', 'b', 'q'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': False, 'focus': 'c'}, [['a'], ['a', 'b', 'c'], {'a': ['z', 'a']}, ['a'], 'copy', ['a', 'b', 'q'], 'a']), ('no selection', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': [], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [[], [], {}, [], 'none', [], 'c']), ('descendant alone', {'rows': ['z', 'a', 'b', 'c', 'q', 'v0', 'v1', 'v2', 'v3', 'v4'], 'selected': ['b'], 'ancestors': {'a': ['z'], 'b': ['z', 'a'], 'c': ['z', 'a', 'b']}, 'mode': 'cut', 'readonly': ['q'], 'clipboard_generation': 5, 'generation': 5, 'same_tree': True, 'focus': 'c'}, [['b'], ['b', 'c'], {'b': ['z', 'a', 'b']}, ['b'], 'move', [], 'b'])]}\nfor label, data, expected in cases[N]:\n    check(label, solve(data), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-tree_accessibility-subtree-clipboard-02","generated_at":"2026-09-29T14:43:17.325505+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"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.","repair":"Restore `not any(a in selected for a in d['ancestors'].get(x,[]))` at this fault site while retaining the other tree state decisions.","root_cause":"The subtree-clipboard contract is violated at `not any(a in selected for a in d['ancestors'].get(x,[]))` by replacing it with `True`.","sha256":"45a668654e8b9f9b499796237a0d661aeec3d28820da259b0044f15cccc40122","title":"Hierarchical clipboard root normalization: Clipboard duplicates nested selections or excludes nonroot subtrees · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.759,"exit_code":1,"observations":[{"actual":[[],[],{},[],"none",["a","b","q"],"c"],"check":"cut normalized","expected":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"move",["q"],"a"],"passed":false},{"actual":[["q"],["q"],{"q":["q"]},[],"copy",["a","b","q"],"q"],"check":"copy protected","expected":[["a","q"],["a","b","c","q"],{"a":["z","a"],"q":["q"]},[],"copy",["a","b","q"],"a"],"passed":false},{"actual":[["q"],["q"],{"q":["q"]},["q"],"move",["a","b"],"q"],"check":"several roots","expected":[["a","q"],["a","b","c","q"],{"a":["z","a"],"q":["q"]},["a","q"],"move",[],"a"],"passed":false},{"actual":[[],[],{},[],"none",["a","b","q"],"c"],"check":"stale cut","expected":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"copy",["a","b","q"],"a"],"passed":false},{"actual":[[],[],{},[],"none",["a","b","q"],"c"],"check":"cross tree","expected":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"copy",["a","b","q"],"a"],"passed":false},{"actual":[[],[],{},[],"none",[],"c"],"check":"no selection","expected":[[],[],{},[],"none",[],"c"],"passed":true},{"actual":[[],[],{},[],"none",["b"],"c"],"check":"descendant alone","expected":[["b"],["b","c"],{"b":["z","a","b"]},["b"],"move",[],"b"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"cut normalized\", \"actual\": [[], [], {}, [], \"none\", [\"a\", \"b\", \"q\"], \"c\"], \"expected\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"move\", [\"q\"], \"a\"], \"passed\": false}, {\"check\": \"copy protected\", \"actual\": [[\"q\"], [\"q\"], {\"q\": [\"q\"]}, [], \"copy\", [\"a\", \"b\", \"q\"], \"q\"], \"expected\": [[\"a\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"q\": [\"q\"]}, [], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"passed\": false}, {\"check\": \"several roots\", \"actual\": [[\"q\"], [\"q\"], {\"q\": [\"q\"]}, [\"q\"], \"move\", [\"a\", \"b\"], \"q\"], \"expected\": [[\"a\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"q\": [\"q\"]}, [\"a\", \"q\"], \"move\", [], \"a\"], \"passed\": false}, {\"check\": \"stale cut\", \"actual\": [[], [], {}, [], \"none\", [\"a\", \"b\", \"q\"], \"c\"], \"expected\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"passed\": false}, {\"check\": \"cross tree\", \"actual\": [[], [], {}, [], \"none\", [\"a\", \"b\", \"q\"], \"c\"], \"expected\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"passed\": false}, {\"check\": \"no selection\", \"actual\": [[], [], {}, [], \"none\", [], \"c\"], \"expected\": [[], [], {}, [], \"none\", [], \"c\"], \"passed\": true}, {\"check\": \"descendant alone\", \"actual\": [[], [], {}, [], \"none\", [\"b\"], \"c\"], \"expected\": [[\"b\"], [\"b\", \"c\"], {\"b\": [\"z\", \"a\", \"b\"]}, [\"b\"], \"move\", [], \"b\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.578,"exit_code":1,"observations":[{"actual":[["a","b"],["a","b","c"],{"a":["z","a"],"b":["z","a","b"]},["a","b"],"move",["q"],"a"],"check":"cut normalized","expected":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"move",["q"],"a"],"passed":false},{"actual":[["a","b","q"],["a","b","c","q"],{"a":["z","a"],"b":["z","a","b"],"q":["q"]},[],"copy",["a","b","q"],"a"],"check":"copy protected","expected":[["a","q"],["a","b","c","q"],{"a":["z","a"],"q":["q"]},[],"copy",["a","b","q"],"a"],"passed":false},{"actual":[["a","b","q"],["a","b","c","q"],{"a":["z","a"],"b":["z","a","b"],"q":["q"]},["a","b","q"],"move",[],"a"],"check":"several roots","expected":[["a","q"],["a","b","c","q"],{"a":["z","a"],"q":["q"]},["a","q"],"move",[],"a"],"passed":false},{"actual":[["a","b"],["a","b","c"],{"a":["z","a"],"b":["z","a","b"]},["a","b"],"copy",["a","b","q"],"a"],"check":"stale cut","expected":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"copy",["a","b","q"],"a"],"passed":false},{"actual":[["a","b"],["a","b","c"],{"a":["z","a"],"b":["z","a","b"]},["a","b"],"copy",["a","b","q"],"a"],"check":"cross tree","expected":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"copy",["a","b","q"],"a"],"passed":false},{"actual":[[],[],{},[],"none",[],"c"],"check":"no selection","expected":[[],[],{},[],"none",[],"c"],"passed":true},{"actual":[["b"],["b","c"],{"b":["z","a","b"]},["b"],"move",[],"b"],"check":"descendant alone","expected":[["b"],["b","c"],{"b":["z","a","b"]},["b"],"move",[],"b"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"cut normalized\", \"actual\": [[\"a\", \"b\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"], \"b\": [\"z\", \"a\", \"b\"]}, [\"a\", \"b\"], \"move\", [\"q\"], \"a\"], \"expected\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"move\", [\"q\"], \"a\"], \"passed\": false}, {\"check\": \"copy protected\", \"actual\": [[\"a\", \"b\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"b\": [\"z\", \"a\", \"b\"], \"q\": [\"q\"]}, [], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"expected\": [[\"a\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"q\": [\"q\"]}, [], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"passed\": false}, {\"check\": \"several roots\", \"actual\": [[\"a\", \"b\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"b\": [\"z\", \"a\", \"b\"], \"q\": [\"q\"]}, [\"a\", \"b\", \"q\"], \"move\", [], \"a\"], \"expected\": [[\"a\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"q\": [\"q\"]}, [\"a\", \"q\"], \"move\", [], \"a\"], \"passed\": false}, {\"check\": \"stale cut\", \"actual\": [[\"a\", \"b\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"], \"b\": [\"z\", \"a\", \"b\"]}, [\"a\", \"b\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"expected\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"passed\": false}, {\"check\": \"cross tree\", \"actual\": [[\"a\", \"b\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"], \"b\": [\"z\", \"a\", \"b\"]}, [\"a\", \"b\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"expected\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"passed\": false}, {\"check\": \"no selection\", \"actual\": [[], [], {}, [], \"none\", [], \"c\"], \"expected\": [[], [], {}, [], \"none\", [], \"c\"], \"passed\": true}, {\"check\": \"descendant alone\", \"actual\": [[\"b\"], [\"b\", \"c\"], {\"b\": [\"z\", \"a\", \"b\"]}, [\"b\"], \"move\", [], \"b\"], \"expected\": [[\"b\"], [\"b\", \"c\"], {\"b\": [\"z\", \"a\", \"b\"]}, [\"b\"], \"move\", [], \"b\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.638,"exit_code":0,"observations":[{"actual":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"move",["q"],"a"],"check":"cut normalized","expected":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"move",["q"],"a"],"passed":true},{"actual":[["a","q"],["a","b","c","q"],{"a":["z","a"],"q":["q"]},[],"copy",["a","b","q"],"a"],"check":"copy protected","expected":[["a","q"],["a","b","c","q"],{"a":["z","a"],"q":["q"]},[],"copy",["a","b","q"],"a"],"passed":true},{"actual":[["a","q"],["a","b","c","q"],{"a":["z","a"],"q":["q"]},["a","q"],"move",[],"a"],"check":"several roots","expected":[["a","q"],["a","b","c","q"],{"a":["z","a"],"q":["q"]},["a","q"],"move",[],"a"],"passed":true},{"actual":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"copy",["a","b","q"],"a"],"check":"stale cut","expected":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"copy",["a","b","q"],"a"],"passed":true},{"actual":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"copy",["a","b","q"],"a"],"check":"cross tree","expected":[["a"],["a","b","c"],{"a":["z","a"]},["a"],"copy",["a","b","q"],"a"],"passed":true},{"actual":[[],[],{},[],"none",[],"c"],"check":"no selection","expected":[[],[],{},[],"none",[],"c"],"passed":true},{"actual":[["b"],["b","c"],{"b":["z","a","b"]},["b"],"move",[],"b"],"check":"descendant alone","expected":[["b"],["b","c"],{"b":["z","a","b"]},["b"],"move",[],"b"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"cut normalized\", \"actual\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"move\", [\"q\"], \"a\"], \"expected\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"move\", [\"q\"], \"a\"], \"passed\": true}, {\"check\": \"copy protected\", \"actual\": [[\"a\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"q\": [\"q\"]}, [], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"expected\": [[\"a\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"q\": [\"q\"]}, [], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"passed\": true}, {\"check\": \"several roots\", \"actual\": [[\"a\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"q\": [\"q\"]}, [\"a\", \"q\"], \"move\", [], \"a\"], \"expected\": [[\"a\", \"q\"], [\"a\", \"b\", \"c\", \"q\"], {\"a\": [\"z\", \"a\"], \"q\": [\"q\"]}, [\"a\", \"q\"], \"move\", [], \"a\"], \"passed\": true}, {\"check\": \"stale cut\", \"actual\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"expected\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"passed\": true}, {\"check\": \"cross tree\", \"actual\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"expected\": [[\"a\"], [\"a\", \"b\", \"c\"], {\"a\": [\"z\", \"a\"]}, [\"a\"], \"copy\", [\"a\", \"b\", \"q\"], \"a\"], \"passed\": true}, {\"check\": \"no selection\", \"actual\": [[], [], {}, [], \"none\", [], \"c\"], \"expected\": [[], [], {}, [], \"none\", [], \"c\"], \"passed\": true}, {\"check\": \"descendant alone\", \"actual\": [[\"b\"], [\"b\", \"c\"], {\"b\": [\"z\", \"a\", \"b\"]}, [\"b\"], \"move\", [], \"b\"], \"expected\": [[\"b\"], [\"b\", \"c\"], {\"b\": [\"z\", \"a\", \"b\"]}, [\"b\"], \"move\", [], \"b\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}