FA-38886 / Tree accessibility / Open access
Permission-aware tree branch projection: Multiple denied branch roots are incompletely applied · case 01
Multiple denied branch roots are incompletely applied produces the wrong hierarchical widget state in a regression fixture.
ROOT CAUSE
The permission-pruning contract is violated at `denied=set(d['denied'])` by replacing it with `denied=set(d['denied'][:1])`.
VERIFIED REPAIR
Restore `denied=set(d['denied'])` at this fault site while retaining the other tree state decisions.
Unsuccessful approach: The partial repair `denied=set(d['summaries'])` still violates a boundary or preservation case.
Case contract
Denied branches suppress descendants even when descendants grant access. A denied branch itself may remain a nonselectable redacted row if a summary is allowed. Metadata counts exposed siblings only, and active focus never references a redacted row.
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):
denied=set(d['denied'][:1])
blocked={x for x in d['rows'] if any(a in denied for a in d['ancestors'].get(x,[]))}
redacted={x for x in denied if x in d['summaries'] and x not in blocked}
exposed=[x for x in d['rows'] if x not in blocked and (x not in denied or x in redacted)]
selectable=[x for x in exposed if x not in redacted]
selected=[x for x in d['selected'] if x in selectable]
expanded=[x for x in d['expanded'] if x in selectable and x in d['branches']]
labels={x:('Restricted branch' if x in redacted else d['labels'][x]) for x in exposed}
focus=d['focus'] if d['focus'] in selectable else (selectable[0] if selectable else None)
counts={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in exposed) for x in exposed}
return [exposed,selected,expanded,labels,focus,counts]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 's', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['r', 'q', 's', 'v0'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'a', {'r': 4, 'a': 1, 'b': 1, 'c': 1, 'q': 4, 's': 4, 'v0': 4}])], 2: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 's', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 's': 4, 'v0': 4, 'v1': 4}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['r', 'q', 's', 'v0', 'v1'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'a', {'r': 5, 'a': 1, 'b': 1, 'c': 1, 'q': 5, 's': 5, 'v0': 5, 'v1': 5}])], 3: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 's', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'a', {'r': 6, 'a': 1, 'b': 1, 'c': 1, 'q': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6}])], 4: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 's', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'a', {'r': 7, 'a': 1, 'b': 1, 'c': 1, 'q': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7}])], 5: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 's', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'a', {'r': 8, 'a': 1, 'b': 1, 'c': 1, 'q': 8, 's': 8, 'v0': 8, 'v1': 8, 'v2': 8, 'v3': 8, 'v4': 8}])]}
for label, data, expected in cases[N]:
check(label, solve(data), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| redaction | [['r', 'a', 'q', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | Failed |
| visible focus | [['r', 'a', 'q', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 's', {'a': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 's', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | Failed |
| denied descendant | [['r', 'a', 'q', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | Failed |
| no summary | [['r', 'q', 's', 'v0'], ['s'], [], {'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}] | Failed |
| all roots denied | [['q', 's', 'v0'], ['s'], [], {'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'q', {'q': 3, 's': 3, 'v0': 3}] | [[], [], [], {}, None, {}] | Failed |
| permission restored | [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'a': 1, 'b': 1, 'c': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'a': 1, 'b': 1, 'c': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | Passed |
SHA-256 / 6ab5def3c224d9d6a9127a150d54999008f641cd38c2809956cda4cb80e698a2
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
denied=set(d['summaries'])
blocked={x for x in d['rows'] if any(a in denied for a in d['ancestors'].get(x,[]))}
redacted={x for x in denied if x in d['summaries'] and x not in blocked}
exposed=[x for x in d['rows'] if x not in blocked and (x not in denied or x in redacted)]
selectable=[x for x in exposed if x not in redacted]
selected=[x for x in d['selected'] if x in selectable]
expanded=[x for x in d['expanded'] if x in selectable and x in d['branches']]
labels={x:('Restricted branch' if x in redacted else d['labels'][x]) for x in exposed}
focus=d['focus'] if d['focus'] in selectable else (selectable[0] if selectable else None)
counts={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in exposed) for x in exposed}
return [exposed,selected,expanded,labels,focus,counts]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 's', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['r', 'q', 's', 'v0'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'a', {'r': 4, 'a': 1, 'b': 1, 'c': 1, 'q': 4, 's': 4, 'v0': 4}])], 2: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 's', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 's': 4, 'v0': 4, 'v1': 4}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['r', 'q', 's', 'v0', 'v1'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'a', {'r': 5, 'a': 1, 'b': 1, 'c': 1, 'q': 5, 's': 5, 'v0': 5, 'v1': 5}])], 3: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 's', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'a', {'r': 6, 'a': 1, 'b': 1, 'c': 1, 'q': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6}])], 4: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 's', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'a', {'r': 7, 'a': 1, 'b': 1, 'c': 1, 'q': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7}])], 5: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 's', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'a', {'r': 8, 'a': 1, 'b': 1, 'c': 1, 'q': 8, 's': 8, 'v0': 8, 'v1': 8, 'v2': 8, 'v3': 8, 'v4': 8}])]}
for label, data, expected in cases[N]:
check(label, solve(data), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| redaction | [['r', 'a', 'q', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | Failed |
| visible focus | [['r', 'a', 'q', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 's', {'a': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 's', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | Failed |
| denied descendant | [['r', 'a', 'q', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | Failed |
| no summary | [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'a': 1, 'b': 1, 'c': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}] | Failed |
| all roots denied | [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'a': 1, 'b': 1, 'c': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [[], [], [], {}, None, {}] | Failed |
| permission restored | [['r', 'a', 'q', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'a': 1, 'b': 1, 'c': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | Failed |
SHA-256 / ac27a44886fa9cf858f5a9e59bd4f42a66fa7a6fc823325d27871144f2e95e94
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(d):
denied=set(d['denied'])
blocked={x for x in d['rows'] if any(a in denied for a in d['ancestors'].get(x,[]))}
redacted={x for x in denied if x in d['summaries'] and x not in blocked}
exposed=[x for x in d['rows'] if x not in blocked and (x not in denied or x in redacted)]
selectable=[x for x in exposed if x not in redacted]
selected=[x for x in d['selected'] if x in selectable]
expanded=[x for x in d['expanded'] if x in selectable and x in d['branches']]
labels={x:('Restricted branch' if x in redacted else d['labels'][x]) for x in exposed}
focus=d['focus'] if d['focus'] in selectable else (selectable[0] if selectable else None)
counts={x:sum(d['parents'].get(y)==d['parents'].get(x) for y in exposed) for x in exposed}
return [exposed,selected,expanded,labels,focus,counts]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = {1: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 's', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 'a': 1, 's': 3, 'v0': 3}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': ['r', 'q', 's', 'v0'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private'}, 'a', {'r': 4, 'a': 1, 'b': 1, 'c': 1, 'q': 4, 's': 4, 'v0': 4}])], 2: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 's', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 'a': 1, 's': 4, 'v0': 4, 'v1': 4}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'r', {'r': 4, 's': 4, 'v0': 4, 'v1': 4}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': ['r', 'q', 's', 'v0', 'v1'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private'}, 'a', {'r': 5, 'a': 1, 'b': 1, 'c': 1, 'q': 5, 's': 5, 'v0': 5, 'v1': 5}])], 3: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 's', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 'a': 1, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'r', {'r': 5, 's': 5, 'v0': 5, 'v1': 5, 'v2': 5}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private'}, 'a', {'r': 6, 'a': 1, 'b': 1, 'c': 1, 'q': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6}])], 4: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 's', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 'a': 1, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'r', {'r': 6, 's': 6, 'v0': 6, 'v1': 6, 'v2': 6, 'v3': 6}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private'}, 'a', {'r': 7, 'a': 1, 'b': 1, 'c': 1, 'q': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7}])], 5: [('redaction', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('visible focus', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 's'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 's', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('denied descendant', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'b', 'q'], 'summaries': ['a', 'b'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 'a': 'Restricted branch', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 'a': 1, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('no summary', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['a', 'q'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'r', {'r': 7, 's': 7, 'v0': 7, 'v1': 7, 'v2': 7, 'v3': 7, 'v4': 7}]), ('all roots denied', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': ['r', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'summaries': [], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [[], [], [], {}, None, {}]), ('permission restored', {'rows': ['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], 'denied': [], 'summaries': ['a'], 'ancestors': {'a': ['r'], 'b': ['r', 'a'], 'c': ['r', 'a', 'b']}, 'parents': {'r': None, 'a': 'r', 'b': 'a', 'c': 'b', 'q': None, 's': None}, 'selected': ['a', 'c', 's'], 'expanded': ['a', 's'], 'branches': ['r', 'a', 'b'], 'labels': {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'focus': 'a'}, [['r', 'a', 'b', 'c', 'q', 's', 'v0', 'v1', 'v2', 'v3', 'v4'], ['a', 'c', 's'], ['a'], {'r': 'r private', 'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 's': 's private', 'v0': 'v0 private', 'v1': 'v1 private', 'v2': 'v2 private', 'v3': 'v3 private', 'v4': 'v4 private'}, 'a', {'r': 8, 'a': 1, 'b': 1, 'c': 1, 'q': 8, 's': 8, 'v0': 8, 'v1': 8, 'v2': 8, 'v3': 8, 'v4': 8}])]}
for label, data, expected in cases[N]:
check(label, solve(data), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| redaction | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | Passed |
| visible focus | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 's', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 's', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | Passed |
| denied descendant | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | [['r', 'a', 's', 'v0'], ['s'], [], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'a': 1, 'r': 3, 's': 3, 'v0': 3}] | Passed |
| no summary | [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}] | [['r', 's', 'v0'], ['s'], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'r', {'r': 3, 's': 3, 'v0': 3}] | Passed |
| all roots denied | [[], [], [], {}, None, {}] | [[], [], [], {}, None, {}] | Passed |
| permission restored | [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'a': 1, 'b': 1, 'c': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | [['r', 'a', 'b', 'c', 'q', 's', 'v0'], ['a', 'c', 's'], ['a'], {'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'a': 1, 'b': 1, 'c': 1, 'q': 4, 'r': 4, 's': 4, 'v0': 4}] | Passed |
SHA-256 / 3920e22ae047620d1a8c26edb1f4d8fc8b3cd430cc06d4d2853f1369d10e4234
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:15.772787+00:00.
Case digest / e218c03e8fc3e89a331be266697345d9efaf17b1b2e844c3c8e658b88778a366