FAILURE MAP
← Case archive

FA-37866 / Table interactions / Open access

Table grouped row projection: empty group unchecked · case 01

The table empty group unchecked result violates the stipulated table grouped row projection contract.

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

ROOT CAUSE

The empty group unchecked decision uses 'len(picked)==len(children)' instead of 'bool(children) and len(picked)==len(children)'.

VERIFIED REPAIR

Apply the complete empty group unchecked rule: bool(children) and len(picked)==len(children).

Unsuccessful approach: The attempted repair 'bool(picked)' still loses a required part of the table contract.

Case contract

Table group headers retain stable namespaced group keys distinct from labels, count visible members, derive tri-state selection over visible children, honor empty/collapsed group policies, and reset row striping within each group.

Why this case matters

An offline table UI model isolates table grouped row projection, including adversarial row/column relationships.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(groups, collapsed, hidden, selected, show_empty):
    out=[]
    for g in groups:
        children=[r for r in g['rows'] if r['id'] not in hidden]
        if not children and not show_empty: continue
        key=g['key']
        picked=[r for r in children if r['id'] in selected]
        out.append({'kind':'group','key':('group',key),'label':g['label'],'count':len(children),'checked':len(picked)==len(children),'mixed':0<len(picked)<len(children)})
        if key in collapsed: continue
        out += [{'kind':'row','key':('row',r['id']),'group':key,'row':r,'stripe':i%2} for i,r in enumerate(children)]
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':1},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 1}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 2:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':2},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 2}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 3:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':3},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 3}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 4:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':4},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 4}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 5:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':5},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 5}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

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
partial selected group[{'checked': False, 'count': 2, 'key': ['group', 'g1'], 'kind': 'group', 'label': 'Group', 'mixed': True}, {'group': 'g1', 'key': ['row', 'a'], 'kind': 'row', 'row': {'id': 'a', 'v': 1}, 'stripe': 0}, {'group': 'g1', 'key': ['row', 'b'], 'kind': 'row', 'row': {'id': 'b'}, 'stripe': 1}, {'checked': True, 'count': 2, 'key': ['group', 'g2'], 'kind': 'group', 'label': 'Group', 'mixed': False}, {'group': 'g2', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}, {'group': 'g2', 'key': ['row', 'd'], 'kind': 'row', 'row': {'id': 'd'}, 'stripe': 1}][{'checked': False, 'count': 2, 'key': ['group', 'g1'], 'kind': 'group', 'label': 'Group', 'mixed': True}, {'group': 'g1', 'key': ['row', 'a'], 'kind': 'row', 'row': {'id': 'a', 'v': 1}, 'stripe': 0}, {'group': 'g1', 'key': ['row', 'b'], 'kind': 'row', 'row': {'id': 'b'}, 'stripe': 1}, {'checked': True, 'count': 2, 'key': ['group', 'g2'], 'kind': 'group', 'label': 'Group', 'mixed': False}, {'group': 'g2', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}, {'group': 'g2', 'key': ['row', 'd'], 'kind': 'row', 'row': {'id': 'd'}, 'stripe': 1}]Passed
collapsed group[{'checked': True, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'Label', 'mixed': False}][{'checked': True, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'Label', 'mixed': False}]Passed
hidden members[{'checked': False, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'G', 'mixed': False}, {'group': 'g', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}][{'checked': False, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'G', 'mixed': False}, {'group': 'g', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}]Passed
empty shown[{'checked': True, 'count': 0, 'key': ['group', 'g'], 'kind': 'group', 'label': '', 'mixed': False}][{'checked': False, 'count': 0, 'key': ['group', 'g'], 'kind': 'group', 'label': '', 'mixed': False}]Failed
empty removed[][]Passed
no groups[][]Passed

SHA-256 / 2dc58c55c2e09ee4471c07edf9d58ad816dad4f94be09680837a34f82a69fc39

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(groups, collapsed, hidden, selected, show_empty):
    out=[]
    for g in groups:
        children=[r for r in g['rows'] if r['id'] not in hidden]
        if not children and not show_empty: continue
        key=g['key']
        picked=[r for r in children if r['id'] in selected]
        out.append({'kind':'group','key':('group',key),'label':g['label'],'count':len(children),'checked':bool(picked),'mixed':0<len(picked)<len(children)})
        if key in collapsed: continue
        out += [{'kind':'row','key':('row',r['id']),'group':key,'row':r,'stripe':i%2} for i,r in enumerate(children)]
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':1},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 1}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 2:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':2},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 2}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 3:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':3},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 3}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 4:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':4},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 4}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 5:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':5},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 5}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

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
partial selected group[{'checked': True, 'count': 2, 'key': ['group', 'g1'], 'kind': 'group', 'label': 'Group', 'mixed': True}, {'group': 'g1', 'key': ['row', 'a'], 'kind': 'row', 'row': {'id': 'a', 'v': 1}, 'stripe': 0}, {'group': 'g1', 'key': ['row', 'b'], 'kind': 'row', 'row': {'id': 'b'}, 'stripe': 1}, {'checked': True, 'count': 2, 'key': ['group', 'g2'], 'kind': 'group', 'label': 'Group', 'mixed': False}, {'group': 'g2', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}, {'group': 'g2', 'key': ['row', 'd'], 'kind': 'row', 'row': {'id': 'd'}, 'stripe': 1}][{'checked': False, 'count': 2, 'key': ['group', 'g1'], 'kind': 'group', 'label': 'Group', 'mixed': True}, {'group': 'g1', 'key': ['row', 'a'], 'kind': 'row', 'row': {'id': 'a', 'v': 1}, 'stripe': 0}, {'group': 'g1', 'key': ['row', 'b'], 'kind': 'row', 'row': {'id': 'b'}, 'stripe': 1}, {'checked': True, 'count': 2, 'key': ['group', 'g2'], 'kind': 'group', 'label': 'Group', 'mixed': False}, {'group': 'g2', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}, {'group': 'g2', 'key': ['row', 'd'], 'kind': 'row', 'row': {'id': 'd'}, 'stripe': 1}]Failed
collapsed group[{'checked': True, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'Label', 'mixed': False}][{'checked': True, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'Label', 'mixed': False}]Passed
hidden members[{'checked': False, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'G', 'mixed': False}, {'group': 'g', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}][{'checked': False, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'G', 'mixed': False}, {'group': 'g', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}]Passed
empty shown[{'checked': False, 'count': 0, 'key': ['group', 'g'], 'kind': 'group', 'label': '', 'mixed': False}][{'checked': False, 'count': 0, 'key': ['group', 'g'], 'kind': 'group', 'label': '', 'mixed': False}]Passed
empty removed[][]Passed
no groups[][]Passed

SHA-256 / 97424c914d7e2b9600ad06a26e31d5c48384523e90baa8c8ad803432233b8f85

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(groups, collapsed, hidden, selected, show_empty):
    out=[]
    for g in groups:
        children=[r for r in g['rows'] if r['id'] not in hidden]
        if not children and not show_empty: continue
        key=g['key']
        picked=[r for r in children if r['id'] in selected]
        out.append({'kind':'group','key':('group',key),'label':g['label'],'count':len(children),'checked':bool(children) and len(picked)==len(children),'mixed':0<len(picked)<len(children)})
        if key in collapsed: continue
        out += [{'kind':'row','key':('row',r['id']),'group':key,'row':r,'stripe':i%2} for i,r in enumerate(children)]
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':1},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 1}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 2:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':2},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 2}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 3:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':3},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 3}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 4:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':4},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 4}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

if N == 5:
    check('partial selected group', solve([{'key':'g1','label':'Group','rows':[{'id':'a','v':5},{'id':'b'}]},{'key':'g2','label':'Group','rows':[{'id':'c'},{'id':'d'}]}], [], [], ['a','c','d'], False), [{'kind': 'group', 'key': ('group', 'g1'), 'label': 'Group', 'count': 2, 'checked': False, 'mixed': True}, {'kind': 'row', 'key': ('row', 'a'), 'group': 'g1', 'row': {'id': 'a', 'v': 5}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'b'), 'group': 'g1', 'row': {'id': 'b'}, 'stripe': 1}, {'kind': 'group', 'key': ('group', 'g2'), 'label': 'Group', 'count': 2, 'checked': True, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g2', 'row': {'id': 'c'}, 'stripe': 0}, {'kind': 'row', 'key': ('row', 'd'), 'group': 'g2', 'row': {'id': 'd'}, 'stripe': 1}])
    check('collapsed group', solve([{'key':'g','label':'Label','rows':[{'id':'a'}]}], ['g'], [], ['a'], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'Label', 'count': 1, 'checked': True, 'mixed': False}])
    check('hidden members', solve([{'key':'g','label':'G','rows':[{'id':'a'},{'id':'b'},{'id':'c'}]}], [], ['a','b'], [], False), [{'kind': 'group', 'key': ('group', 'g'), 'label': 'G', 'count': 1, 'checked': False, 'mixed': False}, {'kind': 'row', 'key': ('row', 'c'), 'group': 'g', 'row': {'id': 'c'}, 'stripe': 0}])
    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])
    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])
    check('no groups', solve([], [], [], [], False), [])

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
partial selected group[{'checked': False, 'count': 2, 'key': ['group', 'g1'], 'kind': 'group', 'label': 'Group', 'mixed': True}, {'group': 'g1', 'key': ['row', 'a'], 'kind': 'row', 'row': {'id': 'a', 'v': 1}, 'stripe': 0}, {'group': 'g1', 'key': ['row', 'b'], 'kind': 'row', 'row': {'id': 'b'}, 'stripe': 1}, {'checked': True, 'count': 2, 'key': ['group', 'g2'], 'kind': 'group', 'label': 'Group', 'mixed': False}, {'group': 'g2', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}, {'group': 'g2', 'key': ['row', 'd'], 'kind': 'row', 'row': {'id': 'd'}, 'stripe': 1}][{'checked': False, 'count': 2, 'key': ['group', 'g1'], 'kind': 'group', 'label': 'Group', 'mixed': True}, {'group': 'g1', 'key': ['row', 'a'], 'kind': 'row', 'row': {'id': 'a', 'v': 1}, 'stripe': 0}, {'group': 'g1', 'key': ['row', 'b'], 'kind': 'row', 'row': {'id': 'b'}, 'stripe': 1}, {'checked': True, 'count': 2, 'key': ['group', 'g2'], 'kind': 'group', 'label': 'Group', 'mixed': False}, {'group': 'g2', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}, {'group': 'g2', 'key': ['row', 'd'], 'kind': 'row', 'row': {'id': 'd'}, 'stripe': 1}]Passed
collapsed group[{'checked': True, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'Label', 'mixed': False}][{'checked': True, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'Label', 'mixed': False}]Passed
hidden members[{'checked': False, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'G', 'mixed': False}, {'group': 'g', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}][{'checked': False, 'count': 1, 'key': ['group', 'g'], 'kind': 'group', 'label': 'G', 'mixed': False}, {'group': 'g', 'key': ['row', 'c'], 'kind': 'row', 'row': {'id': 'c'}, 'stripe': 0}]Passed
empty shown[{'checked': False, 'count': 0, 'key': ['group', 'g'], 'kind': 'group', 'label': '', 'mixed': False}][{'checked': False, 'count': 0, 'key': ['group', 'g'], 'kind': 'group', 'label': '', 'mixed': False}]Passed
empty removed[][]Passed
no groups[][]Passed

SHA-256 / 0efa1b8931fc2ac0fda3ec681533f2cc051b10309dbe939c5dc57ce50f3f342d

Verification & scope

Group keys and member row IDs are stable and unique; group label strings may be equal or empty. Deterministic offline table UI model; no browser, DOM, framework, or standards conformance is claimed. 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:05.427313+00:00.

Case digest / 222ea15d5cdd7ac457ff5c8cb77db303475cf118c7e3c81ddecc2f122d081521