{"abstract":"The table detail owner result violates the stipulated table expandable detail rows contract.","category":"Table interactions","checks":6,"contract":"Detail rows have namespaced stable render keys, follow their visible expandable owner, never count as selectable data rows, use measured heights including zero, and contribute to total content height while expansion state output excludes hidden or ineligible rows.","evaluation_group":"s3-table-interactions-detail-rows","failed_approach":"The attempted repair \"'kind':'detail','owner':rows.index(row)\" still loses a required part of the table contract.","family":"s3-table-interactions-detail-rows-detail-owner","id":"FA-37461","implementations":{"attempt":{"sha256":"29d486cc0e7097b3d45953ae50fdfdc785a7c42ab03db5f3d3e13cb7d4c23b0b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, expanded, hidden, can_expand, heights, default_height):\n    out=[]\n    for row in rows:\n        key=row['id']\n        if key in hidden: continue\n        out.append({'key':('data',key),'kind':'data','owner':key,'height':row['height'],'selectable':True})\n        if key not in expanded or key not in can_expand: continue\n        out.append({'key':('detail',key),'kind':'detail','owner':rows.index(row),'height':heights.get(key,default_height),'selectable':False})\n    return {'items':out,'total':sum(x['height'] for x in out),'data_count':sum(x['kind']=='data' for x in out),'expanded': [r['id'] for r in rows if r['id'] in expanded and r['id'] in can_expand and r['id'] not in hidden]}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':1+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 6, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 13, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 2:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':2+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 7, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 14, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 3:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':3+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 8, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 15, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 4:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':4+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 9, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 16, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 5:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':5+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 10, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 17, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\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":"99a2af0d12b868afb3901528a9f03309bc947a3df98bca097fbe07029b882f2b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, expanded, hidden, can_expand, heights, default_height):\n    out=[]\n    for row in rows:\n        key=row['id']\n        if key in hidden: continue\n        out.append({'key':('data',key),'kind':'data','owner':key,'height':row['height'],'selectable':True})\n        if key not in expanded or key not in can_expand: continue\n        out.append({'key':('detail',key),'kind':'detail','owner':None,'height':heights.get(key,default_height),'selectable':False})\n    return {'items':out,'total':sum(x['height'] for x in out),'data_count':sum(x['kind']=='data' for x in out),'expanded': [r['id'] for r in rows if r['id'] in expanded and r['id'] in can_expand and r['id'] not in hidden]}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':1+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 6, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 13, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 2:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':2+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 7, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 14, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 3:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':3+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 8, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 15, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 4:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':4+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 9, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 16, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 5:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':5+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 10, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 17, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\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":"ed4d33fa6741af701d1c722b1ba240aa4ee739df6368b7e1eb9582561240bbc9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, expanded, hidden, can_expand, heights, default_height):\n    out=[]\n    for row in rows:\n        key=row['id']\n        if key in hidden: continue\n        out.append({'key':('data',key),'kind':'data','owner':key,'height':row['height'],'selectable':True})\n        if key not in expanded or key not in can_expand: continue\n        out.append({'key':('detail',key),'kind':'detail','owner':key,'height':heights.get(key,default_height),'selectable':False})\n    return {'items':out,'total':sum(x['height'] for x in out),'data_count':sum(x['kind']=='data' for x in out),'expanded': [r['id'] for r in rows if r['id'] in expanded and r['id'] in can_expand and r['id'] not in hidden]}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':1+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 6, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 13, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 2:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':2+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 7, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 14, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 3:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':3+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 8, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 15, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 4:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':4+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 9, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 16, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\n\nif N == 5:\n    check('expanded detail', solve([{'id':'a','height':3},{'id':'b','height':4}], ['a'], [], ['a','b'], {'a':5+5}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 10, 'selectable': False}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 17, 'data_count': 2, 'expanded': ['a']})\n    check('zero measured detail', solve([{'id':'a','height':3}], ['a'], [], ['a'], {'a':0}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('detail', 'a'), 'kind': 'detail', 'owner': 'a', 'height': 0, 'selectable': False}], 'total': 3, 'data_count': 1, 'expanded': ['a']})\n    check('nonexpandable row', solve([{'id':'a','height':3}], ['a'], [], [], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}], 'total': 3, 'data_count': 1, 'expanded': []})\n    check('hidden expanded owners', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5}], ['a','b'], ['a','b'], ['a','b','c'], {}, 9), {'items': [{'key': ('data', 'c'), 'kind': 'data', 'owner': 'c', 'height': 5, 'selectable': True}], 'total': 5, 'data_count': 1, 'expanded': []})\n    check('collapsed rows', solve([{'id':'a','height':3},{'id':'b','height':4}], [], [], ['a','b'], {}, 9), {'items': [{'key': ('data', 'a'), 'kind': 'data', 'owner': 'a', 'height': 3, 'selectable': True}, {'key': ('data', 'b'), 'kind': 'data', 'owner': 'b', 'height': 4, 'selectable': True}], 'total': 7, 'data_count': 2, 'expanded': []})\n    check('empty', solve([], ['missing'], [], [], {}, 9), {'items': [], 'total': 0, 'data_count': 0, 'expanded': []})\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":"Base row IDs are unique; base/detail heights are nonnegative, including valid measured zero. 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-detail-rows-detail-owner","generated_at":"2026-09-29T14:43:01.432860+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline table UI model isolates table expandable detail rows, including adversarial row/column relationships.","repair":"Apply the complete detail owner rule: 'kind':'detail','owner':key.","root_cause":"The detail owner decision uses \"'kind':'detail','owner':None\" instead of \"'kind':'detail','owner':key\".","sha256":"7ce3794e27ddb303284ce7fbbf230bfeb122bd46cbdad8e9414492a454a5cedc","title":"Table expandable detail rows: detail owner · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.591,"exit_code":1,"observations":[{"actual":{"data_count":2,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":6,"key":["detail","a"],"kind":"detail","owner":0,"selectable":false},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":13},"check":"expanded detail","expected":{"data_count":2,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":6,"key":["detail","a"],"kind":"detail","owner":"a","selectable":false},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":13},"passed":false},{"actual":{"data_count":1,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":0,"key":["detail","a"],"kind":"detail","owner":0,"selectable":false}],"total":3},"check":"zero measured detail","expected":{"data_count":1,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":0,"key":["detail","a"],"kind":"detail","owner":"a","selectable":false}],"total":3},"passed":false},{"actual":{"data_count":1,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true}],"total":3},"check":"nonexpandable row","expected":{"data_count":1,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true}],"total":3},"passed":true},{"actual":{"data_count":1,"expanded":[],"items":[{"height":5,"key":["data","c"],"kind":"data","owner":"c","selectable":true}],"total":5},"check":"hidden expanded owners","expected":{"data_count":1,"expanded":[],"items":[{"height":5,"key":["data","c"],"kind":"data","owner":"c","selectable":true}],"total":5},"passed":true},{"actual":{"data_count":2,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":7},"check":"collapsed rows","expected":{"data_count":2,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":7},"passed":true},{"actual":{"data_count":0,"expanded":[],"items":[],"total":0},"check":"empty","expected":{"data_count":0,"expanded":[],"items":[],"total":0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"expanded detail\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": 0, \"height\": 6, \"selectable\": false}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 13, \"data_count\": 2, \"expanded\": [\"a\"]}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": \"a\", \"height\": 6, \"selectable\": false}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 13, \"data_count\": 2, \"expanded\": [\"a\"]}, \"passed\": false}, {\"check\": \"zero measured detail\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": 0, \"height\": 0, \"selectable\": false}], \"total\": 3, \"data_count\": 1, \"expanded\": [\"a\"]}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": \"a\", \"height\": 0, \"selectable\": false}], \"total\": 3, \"data_count\": 1, \"expanded\": [\"a\"]}, \"passed\": false}, {\"check\": \"nonexpandable row\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}], \"total\": 3, \"data_count\": 1, \"expanded\": []}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}], \"total\": 3, \"data_count\": 1, \"expanded\": []}, \"passed\": true}, {\"check\": \"hidden expanded owners\", \"actual\": {\"items\": [{\"key\": [\"data\", \"c\"], \"kind\": \"data\", \"owner\": \"c\", \"height\": 5, \"selectable\": true}], \"total\": 5, \"data_count\": 1, \"expanded\": []}, \"expected\": {\"items\": [{\"key\": [\"data\", \"c\"], \"kind\": \"data\", \"owner\": \"c\", \"height\": 5, \"selectable\": true}], \"total\": 5, \"data_count\": 1, \"expanded\": []}, \"passed\": true}, {\"check\": \"collapsed rows\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 7, \"data_count\": 2, \"expanded\": []}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 7, \"data_count\": 2, \"expanded\": []}, \"passed\": true}, {\"check\": \"empty\", \"actual\": {\"items\": [], \"total\": 0, \"data_count\": 0, \"expanded\": []}, \"expected\": {\"items\": [], \"total\": 0, \"data_count\": 0, \"expanded\": []}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":47.017,"exit_code":1,"observations":[{"actual":{"data_count":2,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":6,"key":["detail","a"],"kind":"detail","owner":null,"selectable":false},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":13},"check":"expanded detail","expected":{"data_count":2,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":6,"key":["detail","a"],"kind":"detail","owner":"a","selectable":false},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":13},"passed":false},{"actual":{"data_count":1,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":0,"key":["detail","a"],"kind":"detail","owner":null,"selectable":false}],"total":3},"check":"zero measured detail","expected":{"data_count":1,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":0,"key":["detail","a"],"kind":"detail","owner":"a","selectable":false}],"total":3},"passed":false},{"actual":{"data_count":1,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true}],"total":3},"check":"nonexpandable row","expected":{"data_count":1,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true}],"total":3},"passed":true},{"actual":{"data_count":1,"expanded":[],"items":[{"height":5,"key":["data","c"],"kind":"data","owner":"c","selectable":true}],"total":5},"check":"hidden expanded owners","expected":{"data_count":1,"expanded":[],"items":[{"height":5,"key":["data","c"],"kind":"data","owner":"c","selectable":true}],"total":5},"passed":true},{"actual":{"data_count":2,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":7},"check":"collapsed rows","expected":{"data_count":2,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":7},"passed":true},{"actual":{"data_count":0,"expanded":[],"items":[],"total":0},"check":"empty","expected":{"data_count":0,"expanded":[],"items":[],"total":0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"expanded detail\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": null, \"height\": 6, \"selectable\": false}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 13, \"data_count\": 2, \"expanded\": [\"a\"]}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": \"a\", \"height\": 6, \"selectable\": false}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 13, \"data_count\": 2, \"expanded\": [\"a\"]}, \"passed\": false}, {\"check\": \"zero measured detail\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": null, \"height\": 0, \"selectable\": false}], \"total\": 3, \"data_count\": 1, \"expanded\": [\"a\"]}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": \"a\", \"height\": 0, \"selectable\": false}], \"total\": 3, \"data_count\": 1, \"expanded\": [\"a\"]}, \"passed\": false}, {\"check\": \"nonexpandable row\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}], \"total\": 3, \"data_count\": 1, \"expanded\": []}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}], \"total\": 3, \"data_count\": 1, \"expanded\": []}, \"passed\": true}, {\"check\": \"hidden expanded owners\", \"actual\": {\"items\": [{\"key\": [\"data\", \"c\"], \"kind\": \"data\", \"owner\": \"c\", \"height\": 5, \"selectable\": true}], \"total\": 5, \"data_count\": 1, \"expanded\": []}, \"expected\": {\"items\": [{\"key\": [\"data\", \"c\"], \"kind\": \"data\", \"owner\": \"c\", \"height\": 5, \"selectable\": true}], \"total\": 5, \"data_count\": 1, \"expanded\": []}, \"passed\": true}, {\"check\": \"collapsed rows\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 7, \"data_count\": 2, \"expanded\": []}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 7, \"data_count\": 2, \"expanded\": []}, \"passed\": true}, {\"check\": \"empty\", \"actual\": {\"items\": [], \"total\": 0, \"data_count\": 0, \"expanded\": []}, \"expected\": {\"items\": [], \"total\": 0, \"data_count\": 0, \"expanded\": []}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.664,"exit_code":0,"observations":[{"actual":{"data_count":2,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":6,"key":["detail","a"],"kind":"detail","owner":"a","selectable":false},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":13},"check":"expanded detail","expected":{"data_count":2,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":6,"key":["detail","a"],"kind":"detail","owner":"a","selectable":false},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":13},"passed":true},{"actual":{"data_count":1,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":0,"key":["detail","a"],"kind":"detail","owner":"a","selectable":false}],"total":3},"check":"zero measured detail","expected":{"data_count":1,"expanded":["a"],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":0,"key":["detail","a"],"kind":"detail","owner":"a","selectable":false}],"total":3},"passed":true},{"actual":{"data_count":1,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true}],"total":3},"check":"nonexpandable row","expected":{"data_count":1,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true}],"total":3},"passed":true},{"actual":{"data_count":1,"expanded":[],"items":[{"height":5,"key":["data","c"],"kind":"data","owner":"c","selectable":true}],"total":5},"check":"hidden expanded owners","expected":{"data_count":1,"expanded":[],"items":[{"height":5,"key":["data","c"],"kind":"data","owner":"c","selectable":true}],"total":5},"passed":true},{"actual":{"data_count":2,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":7},"check":"collapsed rows","expected":{"data_count":2,"expanded":[],"items":[{"height":3,"key":["data","a"],"kind":"data","owner":"a","selectable":true},{"height":4,"key":["data","b"],"kind":"data","owner":"b","selectable":true}],"total":7},"passed":true},{"actual":{"data_count":0,"expanded":[],"items":[],"total":0},"check":"empty","expected":{"data_count":0,"expanded":[],"items":[],"total":0},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"expanded detail\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": \"a\", \"height\": 6, \"selectable\": false}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 13, \"data_count\": 2, \"expanded\": [\"a\"]}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": \"a\", \"height\": 6, \"selectable\": false}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 13, \"data_count\": 2, \"expanded\": [\"a\"]}, \"passed\": true}, {\"check\": \"zero measured detail\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": \"a\", \"height\": 0, \"selectable\": false}], \"total\": 3, \"data_count\": 1, \"expanded\": [\"a\"]}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"detail\", \"a\"], \"kind\": \"detail\", \"owner\": \"a\", \"height\": 0, \"selectable\": false}], \"total\": 3, \"data_count\": 1, \"expanded\": [\"a\"]}, \"passed\": true}, {\"check\": \"nonexpandable row\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}], \"total\": 3, \"data_count\": 1, \"expanded\": []}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}], \"total\": 3, \"data_count\": 1, \"expanded\": []}, \"passed\": true}, {\"check\": \"hidden expanded owners\", \"actual\": {\"items\": [{\"key\": [\"data\", \"c\"], \"kind\": \"data\", \"owner\": \"c\", \"height\": 5, \"selectable\": true}], \"total\": 5, \"data_count\": 1, \"expanded\": []}, \"expected\": {\"items\": [{\"key\": [\"data\", \"c\"], \"kind\": \"data\", \"owner\": \"c\", \"height\": 5, \"selectable\": true}], \"total\": 5, \"data_count\": 1, \"expanded\": []}, \"passed\": true}, {\"check\": \"collapsed rows\", \"actual\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 7, \"data_count\": 2, \"expanded\": []}, \"expected\": {\"items\": [{\"key\": [\"data\", \"a\"], \"kind\": \"data\", \"owner\": \"a\", \"height\": 3, \"selectable\": true}, {\"key\": [\"data\", \"b\"], \"kind\": \"data\", \"owner\": \"b\", \"height\": 4, \"selectable\": true}], \"total\": 7, \"data_count\": 2, \"expanded\": []}, \"passed\": true}, {\"check\": \"empty\", \"actual\": {\"items\": [], \"total\": 0, \"data_count\": 0, \"expanded\": []}, \"expected\": {\"items\": [], \"total\": 0, \"data_count\": 0, \"expanded\": []}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}