{"abstract":"The table group row key result violates the stipulated table grouped row projection contract.","category":"Table interactions","checks":6,"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.","evaluation_group":"s3-table-interactions-grouped-rows","failed_approach":"The attempted repair \"('row',key,i)\" still loses a required part of the table contract.","family":"s3-table-interactions-grouped-rows-group-row-key","id":"FA-37881","implementations":{"attempt":{"sha256":"0781251319ff93b77a21fdf4af532fda8cf22921ca84ba258e2742dff537780e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(groups, collapsed, hidden, selected, show_empty):\n    out=[]\n    for g in groups:\n        children=[r for r in g['rows'] if r['id'] not in hidden]\n        if not children and not show_empty: continue\n        key=g['key']\n        picked=[r for r in children if r['id'] in selected]\n        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)})\n        if key in collapsed: continue\n        out += [{'kind':'row','key':('row',key,i),'group':key,'row':r,'stripe':i%2} for i,r in enumerate(children)]\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 2:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 3:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 4:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 5:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"608a3304adf940dfae85a72ccf6218a22221ca087a40344afb391e6d1908b886","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(groups, collapsed, hidden, selected, show_empty):\n    out=[]\n    for g in groups:\n        children=[r for r in g['rows'] if r['id'] not in hidden]\n        if not children and not show_empty: continue\n        key=g['key']\n        picked=[r for r in children if r['id'] in selected]\n        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)})\n        if key in collapsed: continue\n        out += [{'kind':'row','key':('row',i),'group':key,'row':r,'stripe':i%2} for i,r in enumerate(children)]\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 2:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 3:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 4:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 5:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"0efa1b8931fc2ac0fda3ec681533f2cc051b10309dbe939c5dc57ce50f3f342d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(groups, collapsed, hidden, selected, show_empty):\n    out=[]\n    for g in groups:\n        children=[r for r in g['rows'] if r['id'] not in hidden]\n        if not children and not show_empty: continue\n        key=g['key']\n        picked=[r for r in children if r['id'] in selected]\n        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)})\n        if key in collapsed: continue\n        out += [{'kind':'row','key':('row',r['id']),'group':key,'row':r,'stripe':i%2} for i,r in enumerate(children)]\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 2:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 3:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 4:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nif N == 5:\n    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}])\n    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}])\n    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}])\n    check('empty shown', solve([{'key':'g','label':'','rows':[]}], [], [], [], True), [{'kind': 'group', 'key': ('group', 'g'), 'label': '', 'count': 0, 'checked': False, 'mixed': False}])\n    check('empty removed', solve([{'key':'g','label':'G','rows':[]}], [], [], [], False), [])\n    check('no groups', solve([], [], [], [], False), [])\n\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"s3-table-interactions-grouped-rows-group-row-key","generated_at":"2026-09-29T14:43:05.601665+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline table UI model isolates table grouped row projection, including adversarial row/column relationships.","repair":"Apply the complete group row key rule: ('row',r['id']).","root_cause":"The group row key decision uses \"('row',i)\" instead of \"('row',r['id'])\".","sha256":"73553f1e04395055f541f57433f96ac52cdff3c4d2ed71caf160ccbaf7f6762a","title":"Table grouped row projection: group row key · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.439,"exit_code":1,"observations":[{"actual":[{"checked":false,"count":2,"key":["group","g1"],"kind":"group","label":"Group","mixed":true},{"group":"g1","key":["row","g1",0],"kind":"row","row":{"id":"a","v":1},"stripe":0},{"group":"g1","key":["row","g1",1],"kind":"row","row":{"id":"b"},"stripe":1},{"checked":true,"count":2,"key":["group","g2"],"kind":"group","label":"Group","mixed":false},{"group":"g2","key":["row","g2",0],"kind":"row","row":{"id":"c"},"stripe":0},{"group":"g2","key":["row","g2",1],"kind":"row","row":{"id":"d"},"stripe":1}],"check":"partial selected group","expected":[{"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":false},{"actual":[{"checked":true,"count":1,"key":["group","g"],"kind":"group","label":"Label","mixed":false}],"check":"collapsed group","expected":[{"checked":true,"count":1,"key":["group","g"],"kind":"group","label":"Label","mixed":false}],"passed":true},{"actual":[{"checked":false,"count":1,"key":["group","g"],"kind":"group","label":"G","mixed":false},{"group":"g","key":["row","g",0],"kind":"row","row":{"id":"c"},"stripe":0}],"check":"hidden members","expected":[{"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":false},{"actual":[{"checked":false,"count":0,"key":["group","g"],"kind":"group","label":"","mixed":false}],"check":"empty shown","expected":[{"checked":false,"count":0,"key":["group","g"],"kind":"group","label":"","mixed":false}],"passed":true},{"actual":[],"check":"empty removed","expected":[],"passed":true},{"actual":[],"check":"no groups","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"partial selected group\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g1\"], \"label\": \"Group\", \"count\": 2, \"checked\": false, \"mixed\": true}, {\"kind\": \"row\", \"key\": [\"row\", \"g1\", 0], \"group\": \"g1\", \"row\": {\"id\": \"a\", \"v\": 1}, \"stripe\": 0}, {\"kind\": \"row\", \"key\": [\"row\", \"g1\", 1], \"group\": \"g1\", \"row\": {\"id\": \"b\"}, \"stripe\": 1}, {\"kind\": \"group\", \"key\": [\"group\", \"g2\"], \"label\": \"Group\", \"count\": 2, \"checked\": true, \"mixed\": false}, {\"kind\": \"row\", \"key\": [\"row\", \"g2\", 0], \"group\": \"g2\", \"row\": {\"id\": \"c\"}, \"stripe\": 0}, {\"kind\": \"row\", \"key\": [\"row\", \"g2\", 1], \"group\": \"g2\", \"row\": {\"id\": \"d\"}, \"stripe\": 1}], \"expected\": [{\"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}], \"passed\": false}, {\"check\": \"collapsed group\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"Label\", \"count\": 1, \"checked\": true, \"mixed\": false}], \"expected\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"Label\", \"count\": 1, \"checked\": true, \"mixed\": false}], \"passed\": true}, {\"check\": \"hidden members\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"G\", \"count\": 1, \"checked\": false, \"mixed\": false}, {\"kind\": \"row\", \"key\": [\"row\", \"g\", 0], \"group\": \"g\", \"row\": {\"id\": \"c\"}, \"stripe\": 0}], \"expected\": [{\"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}], \"passed\": false}, {\"check\": \"empty shown\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"\", \"count\": 0, \"checked\": false, \"mixed\": false}], \"expected\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"\", \"count\": 0, \"checked\": false, \"mixed\": false}], \"passed\": true}, {\"check\": \"empty removed\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"no groups\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.647,"exit_code":1,"observations":[{"actual":[{"checked":false,"count":2,"key":["group","g1"],"kind":"group","label":"Group","mixed":true},{"group":"g1","key":["row",0],"kind":"row","row":{"id":"a","v":1},"stripe":0},{"group":"g1","key":["row",1],"kind":"row","row":{"id":"b"},"stripe":1},{"checked":true,"count":2,"key":["group","g2"],"kind":"group","label":"Group","mixed":false},{"group":"g2","key":["row",0],"kind":"row","row":{"id":"c"},"stripe":0},{"group":"g2","key":["row",1],"kind":"row","row":{"id":"d"},"stripe":1}],"check":"partial selected group","expected":[{"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":false},{"actual":[{"checked":true,"count":1,"key":["group","g"],"kind":"group","label":"Label","mixed":false}],"check":"collapsed group","expected":[{"checked":true,"count":1,"key":["group","g"],"kind":"group","label":"Label","mixed":false}],"passed":true},{"actual":[{"checked":false,"count":1,"key":["group","g"],"kind":"group","label":"G","mixed":false},{"group":"g","key":["row",0],"kind":"row","row":{"id":"c"},"stripe":0}],"check":"hidden members","expected":[{"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":false},{"actual":[{"checked":false,"count":0,"key":["group","g"],"kind":"group","label":"","mixed":false}],"check":"empty shown","expected":[{"checked":false,"count":0,"key":["group","g"],"kind":"group","label":"","mixed":false}],"passed":true},{"actual":[],"check":"empty removed","expected":[],"passed":true},{"actual":[],"check":"no groups","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"partial selected group\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g1\"], \"label\": \"Group\", \"count\": 2, \"checked\": false, \"mixed\": true}, {\"kind\": \"row\", \"key\": [\"row\", 0], \"group\": \"g1\", \"row\": {\"id\": \"a\", \"v\": 1}, \"stripe\": 0}, {\"kind\": \"row\", \"key\": [\"row\", 1], \"group\": \"g1\", \"row\": {\"id\": \"b\"}, \"stripe\": 1}, {\"kind\": \"group\", \"key\": [\"group\", \"g2\"], \"label\": \"Group\", \"count\": 2, \"checked\": true, \"mixed\": false}, {\"kind\": \"row\", \"key\": [\"row\", 0], \"group\": \"g2\", \"row\": {\"id\": \"c\"}, \"stripe\": 0}, {\"kind\": \"row\", \"key\": [\"row\", 1], \"group\": \"g2\", \"row\": {\"id\": \"d\"}, \"stripe\": 1}], \"expected\": [{\"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}], \"passed\": false}, {\"check\": \"collapsed group\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"Label\", \"count\": 1, \"checked\": true, \"mixed\": false}], \"expected\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"Label\", \"count\": 1, \"checked\": true, \"mixed\": false}], \"passed\": true}, {\"check\": \"hidden members\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"G\", \"count\": 1, \"checked\": false, \"mixed\": false}, {\"kind\": \"row\", \"key\": [\"row\", 0], \"group\": \"g\", \"row\": {\"id\": \"c\"}, \"stripe\": 0}], \"expected\": [{\"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}], \"passed\": false}, {\"check\": \"empty shown\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"\", \"count\": 0, \"checked\": false, \"mixed\": false}], \"expected\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"\", \"count\": 0, \"checked\": false, \"mixed\": false}], \"passed\": true}, {\"check\": \"empty removed\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"no groups\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.94,"exit_code":0,"observations":[{"actual":[{"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}],"check":"partial selected group","expected":[{"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":true},{"actual":[{"checked":true,"count":1,"key":["group","g"],"kind":"group","label":"Label","mixed":false}],"check":"collapsed group","expected":[{"checked":true,"count":1,"key":["group","g"],"kind":"group","label":"Label","mixed":false}],"passed":true},{"actual":[{"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}],"check":"hidden members","expected":[{"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":true},{"actual":[{"checked":false,"count":0,"key":["group","g"],"kind":"group","label":"","mixed":false}],"check":"empty shown","expected":[{"checked":false,"count":0,"key":["group","g"],"kind":"group","label":"","mixed":false}],"passed":true},{"actual":[],"check":"empty removed","expected":[],"passed":true},{"actual":[],"check":"no groups","expected":[],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"partial selected group\", \"actual\": [{\"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}], \"expected\": [{\"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}], \"passed\": true}, {\"check\": \"collapsed group\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"Label\", \"count\": 1, \"checked\": true, \"mixed\": false}], \"expected\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"Label\", \"count\": 1, \"checked\": true, \"mixed\": false}], \"passed\": true}, {\"check\": \"hidden members\", \"actual\": [{\"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}], \"expected\": [{\"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}], \"passed\": true}, {\"check\": \"empty shown\", \"actual\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"\", \"count\": 0, \"checked\": false, \"mixed\": false}], \"expected\": [{\"kind\": \"group\", \"key\": [\"group\", \"g\"], \"label\": \"\", \"count\": 0, \"checked\": false, \"mixed\": false}], \"passed\": true}, {\"check\": \"empty removed\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"no groups\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}