FAILURE MAP
← Case archive

FA-38856 / Tree accessibility / Open access

Permission-aware tree branch projection: Redacted branch enters selectable row set · case 01

Redacted branch enters selectable row set produces the wrong hierarchical widget state in a regression fixture.

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

ROOT CAUSE

The permission-pruning contract is violated at `selectable=[x for x in exposed if x not in redacted]` by replacing it with `selectable=exposed`.

VERIFIED REPAIR

Restore `selectable=[x for x in exposed if x not in redacted]` at this fault site while retaining the other tree state decisions.

Unsuccessful approach: The partial repair `selectable=[x for x in exposed if x in redacted]` 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'])
    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=exposed
    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 fixtureActualExpectedOutcome
redaction[['r', 'a', 's', 'v0'], ['a', 's'], ['a'], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'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}]Failed
visible focus[['r', 'a', 's', 'v0'], ['a', 's'], ['a'], {'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}]Failed
denied descendant[['r', 'a', 's', 'v0'], ['a', 's'], ['a'], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'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}]Failed
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 / ec3fb2ce821c2fd325125633f58c204dc439e2ee8f57d4072a2e71f3186669cf

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['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 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 fixtureActualExpectedOutcome
redaction[['r', 'a', 's', 'v0'], ['a'], ['a'], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'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}]Failed
visible focus[['r', 'a', 's', 'v0'], ['a'], ['a'], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'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}]Failed
denied descendant[['r', 'a', 's', 'v0'], ['a'], ['a'], {'a': 'Restricted branch', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, 'a', {'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}]Failed
no summary[['r', 's', 'v0'], [], [], {'r': 'r private', 's': 's private', 'v0': 'v0 private'}, None, {'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}]Failed
all roots denied[[], [], [], {}, None, {}][[], [], [], {}, None, {}]Passed
permission restored[['r', 'a', 'b', 'c', 'q', 's', 'v0'], [], [], {'a': 'a private', 'b': 'b private', 'c': 'c private', 'q': 'q private', 'r': 'r private', 's': 's private', 'v0': 'v0 private'}, None, {'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}]Failed

SHA-256 / f6256e65e449bf9889da353822f42b9d832ff57555431fcb2565fe214475a697

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 fixtureActualExpectedOutcome
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.449711+00:00.

Case digest / 165b2d682323c196044a453e12e6791db355ed93be2e0221fd2d714470b17d52