{"abstract":"The table detail height composition result violates the stipulated table row height measurement cache contract.","category":"Table interactions","checks":7,"contract":"Measured row heights are keyed by stable row ID plus row-data generation and column-width fingerprint. Invalid measurements use an estimate, minimum applies before detail height, positions are ordered prefixes, and stale row measurements are pruned.","evaluation_group":"s3-table-interactions-row-measurement","failed_approach":"The attempted repair '+max(details.values(),default=0)' still loses a required part of the table contract.","family":"s3-table-interactions-row-measurement-detail-height-composition","id":"FA-37516","implementations":{"attempt":{"sha256":"2e57f24db2c797d4db9010bfc2c5d9b79ede431b3f8f64b5aa70bfe4b28a2bd9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, measurements, generation, width_key, minimum, estimate, details):\n    heights={}\n    for r in rows:\n        k=r['id']; m=measurements.get(k)\n        valid=m is not None and m['generation']==generation and m['width_key']==width_key\n        h=m['height'] if valid else estimate\n        heights[k]=max(minimum,h)+max(details.values(),default=0)\n    ids=[r['id'] for r in rows]\n    offsets={k:sum(heights[x] for x in ids[:i]) for i,k in enumerate(ids)}\n    return {'heights':heights,'offsets':offsets,'total':sum(heights.values()),'remeasure':[r['id'] for r in rows if r['id'] not in measurements or measurements[r['id']]['generation']!=generation or measurements[r['id']]['width_key']!=width_key],'retained':{k:v for k,v in measurements.items() if k in ids}}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 7, 'b': 8}, 'offsets': {'a': 0, 'b': 7}, 'total': 15, 'remeasure': [], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 2:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':2+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 8, 'b': 8}, 'offsets': {'a': 0, 'b': 8}, 'total': 16, 'remeasure': [], 'retained': {'a': {'height': 5, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 3:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':3+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 9, 'b': 8}, 'offsets': {'a': 0, 'b': 9}, 'total': 17, 'remeasure': [], 'retained': {'a': {'height': 6, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 4:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':4+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 10, 'b': 8}, 'offsets': {'a': 0, 'b': 10}, 'total': 18, 'remeasure': [], 'retained': {'a': {'height': 7, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 5:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':5+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 11, 'b': 8}, 'offsets': {'a': 0, 'b': 11}, 'total': 19, 'remeasure': [], 'retained': {'a': {'height': 8, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\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":"7c901beab1f13cc9be55f8b63f21290ec97b88517514400ff8aa4c7e6fcdcfb7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, measurements, generation, width_key, minimum, estimate, details):\n    heights={}\n    for r in rows:\n        k=r['id']; m=measurements.get(k)\n        valid=m is not None and m['generation']==generation and m['width_key']==width_key\n        h=m['height'] if valid else estimate\n        heights[k]=max(minimum,h)\n    ids=[r['id'] for r in rows]\n    offsets={k:sum(heights[x] for x in ids[:i]) for i,k in enumerate(ids)}\n    return {'heights':heights,'offsets':offsets,'total':sum(heights.values()),'remeasure':[r['id'] for r in rows if r['id'] not in measurements or measurements[r['id']]['generation']!=generation or measurements[r['id']]['width_key']!=width_key],'retained':{k:v for k,v in measurements.items() if k in ids}}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 7, 'b': 8}, 'offsets': {'a': 0, 'b': 7}, 'total': 15, 'remeasure': [], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 2:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':2+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 8, 'b': 8}, 'offsets': {'a': 0, 'b': 8}, 'total': 16, 'remeasure': [], 'retained': {'a': {'height': 5, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 3:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':3+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 9, 'b': 8}, 'offsets': {'a': 0, 'b': 9}, 'total': 17, 'remeasure': [], 'retained': {'a': {'height': 6, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 4:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':4+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 10, 'b': 8}, 'offsets': {'a': 0, 'b': 10}, 'total': 18, 'remeasure': [], 'retained': {'a': {'height': 7, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 5:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':5+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 11, 'b': 8}, 'offsets': {'a': 0, 'b': 11}, 'total': 19, 'remeasure': [], 'retained': {'a': {'height': 8, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\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":"e623acf945a82ebb3d87f3f64730a332051aee3b5ac066715f3a12bbb5de8524","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, measurements, generation, width_key, minimum, estimate, details):\n    heights={}\n    for r in rows:\n        k=r['id']; m=measurements.get(k)\n        valid=m is not None and m['generation']==generation and m['width_key']==width_key\n        h=m['height'] if valid else estimate\n        heights[k]=max(minimum,h)+details.get(k,0)\n    ids=[r['id'] for r in rows]\n    offsets={k:sum(heights[x] for x in ids[:i]) for i,k in enumerate(ids)}\n    return {'heights':heights,'offsets':offsets,'total':sum(heights.values()),'remeasure':[r['id'] for r in rows if r['id'] not in measurements or measurements[r['id']]['generation']!=generation or measurements[r['id']]['width_key']!=width_key],'retained':{k:v for k,v in measurements.items() if k in ids}}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 7, 'b': 8}, 'offsets': {'a': 0, 'b': 7}, 'total': 15, 'remeasure': [], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 2:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':2+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 8, 'b': 8}, 'offsets': {'a': 0, 'b': 8}, 'total': 16, 'remeasure': [], 'retained': {'a': {'height': 5, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 3:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':3+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 9, 'b': 8}, 'offsets': {'a': 0, 'b': 9}, 'total': 17, 'remeasure': [], 'retained': {'a': {'height': 6, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 4:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':4+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 10, 'b': 8}, 'offsets': {'a': 0, 'b': 10}, 'total': 18, 'remeasure': [], 'retained': {'a': {'height': 7, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\n\nif N == 5:\n    check('fresh variable rows', solve([{'id':'a'},{'id':'b'}], {'a':{'height':5+3,'generation':2,'width_key':'w'},'b':{'height':8,'generation':2,'width_key':'w'}}, 2, 'w', 2, 10, {'a':3}), {'heights': {'a': 11, 'b': 8}, 'offsets': {'a': 0, 'b': 11}, 'total': 19, 'remeasure': [], 'retained': {'a': {'height': 8, 'generation': 2, 'width_key': 'w'}, 'b': {'height': 8, 'generation': 2, 'width_key': 'w'}}})\n    check('stale generation', solve([{'id':'a'}], {'a':{'height':4,'generation':1,'width_key':'w'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 1, 'width_key': 'w'}}})\n    check('changed widths', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':'old'}}, 2, 'w', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 'old'}}})\n    check('typed width key', solve([{'id':'a'}], {'a':{'height':4,'generation':2,'width_key':1}}, 2, '1', 2, 10, {}), {'heights': {'a': 10}, 'offsets': {'a': 0}, 'total': 10, 'remeasure': ['a'], 'retained': {'a': {'height': 4, 'generation': 2, 'width_key': 1}}})\n    check('zero and stale id', solve([{'id':'a'}], {'a':{'height':0,'generation':2,'width_key':'w'},'gone':{'height':7,'generation':2,'width_key':'w'}}, 2, 'w', 0, 10, {}), {'heights': {'a': 0}, 'offsets': {'a': 0}, 'total': 0, 'remeasure': [], 'retained': {'a': {'height': 0, 'generation': 2, 'width_key': 'w'}}})\n    check('minimum clamp', solve([{'id':'a'},{'id':'b'}], {'a':{'height':1,'generation':2,'width_key':'w'}}, 2, 'w', 3, 10, {'b':2}), {'heights': {'a': 3, 'b': 12}, 'offsets': {'a': 0, 'b': 3}, 'total': 15, 'remeasure': ['b'], 'retained': {'a': {'height': 1, 'generation': 2, 'width_key': 'w'}}})\n    check('empty', solve([], {}, 2, 'w', 3, 10, {}), {'heights': {}, 'offsets': {}, 'total': 0, 'remeasure': [], 'retained': {}})\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":"Row IDs are unique; estimates and minimum/detail heights are nonnegative; width fingerprints are scalar. 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-row-measurement-detail-height-composition","generated_at":"2026-09-29T14:43:01.969801+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline table UI model isolates table row height measurement cache, including adversarial row/column relationships.","repair":"Apply the complete detail height composition rule: +details.get(k,0).","root_cause":"The detail height composition decision uses '' instead of '+details.get(k,0)'.","sha256":"6fbb6c7b345bbe2713f29d92716a07a5e6b6a4ba898df9fd6898c808b4dbec82","title":"Table row height measurement cache: detail height composition · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.764,"exit_code":1,"observations":[{"actual":{"heights":{"a":7,"b":11},"offsets":{"a":0,"b":7},"remeasure":[],"retained":{"a":{"generation":2,"height":4,"width_key":"w"},"b":{"generation":2,"height":8,"width_key":"w"}},"total":18},"check":"fresh variable rows","expected":{"heights":{"a":7,"b":8},"offsets":{"a":0,"b":7},"remeasure":[],"retained":{"a":{"generation":2,"height":4,"width_key":"w"},"b":{"generation":2,"height":8,"width_key":"w"}},"total":15},"passed":false},{"actual":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":1,"height":4,"width_key":"w"}},"total":10},"check":"stale generation","expected":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":1,"height":4,"width_key":"w"}},"total":10},"passed":true},{"actual":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":"old"}},"total":10},"check":"changed widths","expected":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":"old"}},"total":10},"passed":true},{"actual":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":1}},"total":10},"check":"typed width key","expected":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":1}},"total":10},"passed":true},{"actual":{"heights":{"a":0},"offsets":{"a":0},"remeasure":[],"retained":{"a":{"generation":2,"height":0,"width_key":"w"}},"total":0},"check":"zero and stale id","expected":{"heights":{"a":0},"offsets":{"a":0},"remeasure":[],"retained":{"a":{"generation":2,"height":0,"width_key":"w"}},"total":0},"passed":true},{"actual":{"heights":{"a":5,"b":12},"offsets":{"a":0,"b":5},"remeasure":["b"],"retained":{"a":{"generation":2,"height":1,"width_key":"w"}},"total":17},"check":"minimum clamp","expected":{"heights":{"a":3,"b":12},"offsets":{"a":0,"b":3},"remeasure":["b"],"retained":{"a":{"generation":2,"height":1,"width_key":"w"}},"total":15},"passed":false},{"actual":{"heights":{},"offsets":{},"remeasure":[],"retained":{},"total":0},"check":"empty","expected":{"heights":{},"offsets":{},"remeasure":[],"retained":{},"total":0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fresh variable rows\", \"actual\": {\"heights\": {\"a\": 7, \"b\": 11}, \"offsets\": {\"a\": 0, \"b\": 7}, \"total\": 18, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"w\"}, \"b\": {\"height\": 8, \"generation\": 2, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 7, \"b\": 8}, \"offsets\": {\"a\": 0, \"b\": 7}, \"total\": 15, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"w\"}, \"b\": {\"height\": 8, \"generation\": 2, \"width_key\": \"w\"}}}, \"passed\": false}, {\"check\": \"stale generation\", \"actual\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 1, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 1, \"width_key\": \"w\"}}}, \"passed\": true}, {\"check\": \"changed widths\", \"actual\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"old\"}}}, \"expected\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"old\"}}}, \"passed\": true}, {\"check\": \"typed width key\", \"actual\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": 1}}}, \"expected\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": 1}}}, \"passed\": true}, {\"check\": \"zero and stale id\", \"actual\": {\"heights\": {\"a\": 0}, \"offsets\": {\"a\": 0}, \"total\": 0, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 0, \"generation\": 2, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 0}, \"offsets\": {\"a\": 0}, \"total\": 0, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 0, \"generation\": 2, \"width_key\": \"w\"}}}, \"passed\": true}, {\"check\": \"minimum clamp\", \"actual\": {\"heights\": {\"a\": 5, \"b\": 12}, \"offsets\": {\"a\": 0, \"b\": 5}, \"total\": 17, \"remeasure\": [\"b\"], \"retained\": {\"a\": {\"height\": 1, \"generation\": 2, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 3, \"b\": 12}, \"offsets\": {\"a\": 0, \"b\": 3}, \"total\": 15, \"remeasure\": [\"b\"], \"retained\": {\"a\": {\"height\": 1, \"generation\": 2, \"width_key\": \"w\"}}}, \"passed\": false}, {\"check\": \"empty\", \"actual\": {\"heights\": {}, \"offsets\": {}, \"total\": 0, \"remeasure\": [], \"retained\": {}}, \"expected\": {\"heights\": {}, \"offsets\": {}, \"total\": 0, \"remeasure\": [], \"retained\": {}}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.13,"exit_code":1,"observations":[{"actual":{"heights":{"a":4,"b":8},"offsets":{"a":0,"b":4},"remeasure":[],"retained":{"a":{"generation":2,"height":4,"width_key":"w"},"b":{"generation":2,"height":8,"width_key":"w"}},"total":12},"check":"fresh variable rows","expected":{"heights":{"a":7,"b":8},"offsets":{"a":0,"b":7},"remeasure":[],"retained":{"a":{"generation":2,"height":4,"width_key":"w"},"b":{"generation":2,"height":8,"width_key":"w"}},"total":15},"passed":false},{"actual":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":1,"height":4,"width_key":"w"}},"total":10},"check":"stale generation","expected":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":1,"height":4,"width_key":"w"}},"total":10},"passed":true},{"actual":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":"old"}},"total":10},"check":"changed widths","expected":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":"old"}},"total":10},"passed":true},{"actual":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":1}},"total":10},"check":"typed width key","expected":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":1}},"total":10},"passed":true},{"actual":{"heights":{"a":0},"offsets":{"a":0},"remeasure":[],"retained":{"a":{"generation":2,"height":0,"width_key":"w"}},"total":0},"check":"zero and stale id","expected":{"heights":{"a":0},"offsets":{"a":0},"remeasure":[],"retained":{"a":{"generation":2,"height":0,"width_key":"w"}},"total":0},"passed":true},{"actual":{"heights":{"a":3,"b":10},"offsets":{"a":0,"b":3},"remeasure":["b"],"retained":{"a":{"generation":2,"height":1,"width_key":"w"}},"total":13},"check":"minimum clamp","expected":{"heights":{"a":3,"b":12},"offsets":{"a":0,"b":3},"remeasure":["b"],"retained":{"a":{"generation":2,"height":1,"width_key":"w"}},"total":15},"passed":false},{"actual":{"heights":{},"offsets":{},"remeasure":[],"retained":{},"total":0},"check":"empty","expected":{"heights":{},"offsets":{},"remeasure":[],"retained":{},"total":0},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fresh variable rows\", \"actual\": {\"heights\": {\"a\": 4, \"b\": 8}, \"offsets\": {\"a\": 0, \"b\": 4}, \"total\": 12, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"w\"}, \"b\": {\"height\": 8, \"generation\": 2, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 7, \"b\": 8}, \"offsets\": {\"a\": 0, \"b\": 7}, \"total\": 15, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"w\"}, \"b\": {\"height\": 8, \"generation\": 2, \"width_key\": \"w\"}}}, \"passed\": false}, {\"check\": \"stale generation\", \"actual\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 1, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 1, \"width_key\": \"w\"}}}, \"passed\": true}, {\"check\": \"changed widths\", \"actual\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"old\"}}}, \"expected\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"old\"}}}, \"passed\": true}, {\"check\": \"typed width key\", \"actual\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": 1}}}, \"expected\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": 1}}}, \"passed\": true}, {\"check\": \"zero and stale id\", \"actual\": {\"heights\": {\"a\": 0}, \"offsets\": {\"a\": 0}, \"total\": 0, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 0, \"generation\": 2, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 0}, \"offsets\": {\"a\": 0}, \"total\": 0, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 0, \"generation\": 2, \"width_key\": \"w\"}}}, \"passed\": true}, {\"check\": \"minimum clamp\", \"actual\": {\"heights\": {\"a\": 3, \"b\": 10}, \"offsets\": {\"a\": 0, \"b\": 3}, \"total\": 13, \"remeasure\": [\"b\"], \"retained\": {\"a\": {\"height\": 1, \"generation\": 2, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 3, \"b\": 12}, \"offsets\": {\"a\": 0, \"b\": 3}, \"total\": 15, \"remeasure\": [\"b\"], \"retained\": {\"a\": {\"height\": 1, \"generation\": 2, \"width_key\": \"w\"}}}, \"passed\": false}, {\"check\": \"empty\", \"actual\": {\"heights\": {}, \"offsets\": {}, \"total\": 0, \"remeasure\": [], \"retained\": {}}, \"expected\": {\"heights\": {}, \"offsets\": {}, \"total\": 0, \"remeasure\": [], \"retained\": {}}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.414,"exit_code":0,"observations":[{"actual":{"heights":{"a":7,"b":8},"offsets":{"a":0,"b":7},"remeasure":[],"retained":{"a":{"generation":2,"height":4,"width_key":"w"},"b":{"generation":2,"height":8,"width_key":"w"}},"total":15},"check":"fresh variable rows","expected":{"heights":{"a":7,"b":8},"offsets":{"a":0,"b":7},"remeasure":[],"retained":{"a":{"generation":2,"height":4,"width_key":"w"},"b":{"generation":2,"height":8,"width_key":"w"}},"total":15},"passed":true},{"actual":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":1,"height":4,"width_key":"w"}},"total":10},"check":"stale generation","expected":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":1,"height":4,"width_key":"w"}},"total":10},"passed":true},{"actual":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":"old"}},"total":10},"check":"changed widths","expected":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":"old"}},"total":10},"passed":true},{"actual":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":1}},"total":10},"check":"typed width key","expected":{"heights":{"a":10},"offsets":{"a":0},"remeasure":["a"],"retained":{"a":{"generation":2,"height":4,"width_key":1}},"total":10},"passed":true},{"actual":{"heights":{"a":0},"offsets":{"a":0},"remeasure":[],"retained":{"a":{"generation":2,"height":0,"width_key":"w"}},"total":0},"check":"zero and stale id","expected":{"heights":{"a":0},"offsets":{"a":0},"remeasure":[],"retained":{"a":{"generation":2,"height":0,"width_key":"w"}},"total":0},"passed":true},{"actual":{"heights":{"a":3,"b":12},"offsets":{"a":0,"b":3},"remeasure":["b"],"retained":{"a":{"generation":2,"height":1,"width_key":"w"}},"total":15},"check":"minimum clamp","expected":{"heights":{"a":3,"b":12},"offsets":{"a":0,"b":3},"remeasure":["b"],"retained":{"a":{"generation":2,"height":1,"width_key":"w"}},"total":15},"passed":true},{"actual":{"heights":{},"offsets":{},"remeasure":[],"retained":{},"total":0},"check":"empty","expected":{"heights":{},"offsets":{},"remeasure":[],"retained":{},"total":0},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fresh variable rows\", \"actual\": {\"heights\": {\"a\": 7, \"b\": 8}, \"offsets\": {\"a\": 0, \"b\": 7}, \"total\": 15, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"w\"}, \"b\": {\"height\": 8, \"generation\": 2, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 7, \"b\": 8}, \"offsets\": {\"a\": 0, \"b\": 7}, \"total\": 15, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"w\"}, \"b\": {\"height\": 8, \"generation\": 2, \"width_key\": \"w\"}}}, \"passed\": true}, {\"check\": \"stale generation\", \"actual\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 1, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 1, \"width_key\": \"w\"}}}, \"passed\": true}, {\"check\": \"changed widths\", \"actual\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"old\"}}}, \"expected\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": \"old\"}}}, \"passed\": true}, {\"check\": \"typed width key\", \"actual\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": 1}}}, \"expected\": {\"heights\": {\"a\": 10}, \"offsets\": {\"a\": 0}, \"total\": 10, \"remeasure\": [\"a\"], \"retained\": {\"a\": {\"height\": 4, \"generation\": 2, \"width_key\": 1}}}, \"passed\": true}, {\"check\": \"zero and stale id\", \"actual\": {\"heights\": {\"a\": 0}, \"offsets\": {\"a\": 0}, \"total\": 0, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 0, \"generation\": 2, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 0}, \"offsets\": {\"a\": 0}, \"total\": 0, \"remeasure\": [], \"retained\": {\"a\": {\"height\": 0, \"generation\": 2, \"width_key\": \"w\"}}}, \"passed\": true}, {\"check\": \"minimum clamp\", \"actual\": {\"heights\": {\"a\": 3, \"b\": 12}, \"offsets\": {\"a\": 0, \"b\": 3}, \"total\": 15, \"remeasure\": [\"b\"], \"retained\": {\"a\": {\"height\": 1, \"generation\": 2, \"width_key\": \"w\"}}}, \"expected\": {\"heights\": {\"a\": 3, \"b\": 12}, \"offsets\": {\"a\": 0, \"b\": 3}, \"total\": 15, \"remeasure\": [\"b\"], \"retained\": {\"a\": {\"height\": 1, \"generation\": 2, \"width_key\": \"w\"}}}, \"passed\": true}, {\"check\": \"empty\", \"actual\": {\"heights\": {}, \"offsets\": {}, \"total\": 0, \"remeasure\": [], \"retained\": {}}, \"expected\": {\"heights\": {}, \"offsets\": {}, \"total\": 0, \"remeasure\": [], \"retained\": {}}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}