{"abstract":"The table null cell copy result violates the stipulated table clipboard serialization contract.","category":"Table interactions","checks":7,"contract":"Serialize selected rows in current table order and copyable visible columns in schema order. Optional labels precede records, display/raw selection is explicit, None is empty while zero is retained, TSV-special cells use doubled quotes, and records use CRLF without a trailing separator.","evaluation_group":"s3-table-interactions-clipboard-copy","failed_approach":"The attempted repair \"'' if not v else str(v)\" still loses a required part of the table contract.","family":"s3-table-interactions-clipboard-copy-null-cell-copy","id":"FA-37251","implementations":{"attempt":{"sha256":"0b57eb3b355ebdcf244682bda6482baf68a8976c7d34fa6fe69da897838b9dc3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, columns, selected, hidden, include_headers, raw):\n    cols=[c for c in columns if c['id'] not in hidden and c.get('copy',True)]\n    rr=[r for r in rows if r['id'] in selected]\n    def text(v):\n        s='' if not v else str(v)\n        return '\"'+s.replace('\"','\"\"')+'\"' if any(x in s for x in ('\\t','\\n','\"')) else s\n    lines=[]\n    if include_headers: lines.append('\\t'.join(text(c['label']) for c in cols))\n    for r in rr:\n        values=[r.get(c['id']) if raw else r.get('_display',{}).get(c['id'],r.get(c['id'])) for c in cols]\n        lines.append('\\t'.join(text(v) for v in values))\n    return '\\r\\n'.join(lines)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('display selected rows', solve([{'id':'r1','a':1,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 2:\n    check('display selected rows', solve([{'id':'r1','a':2,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 3:\n    check('display selected rows', solve([{'id':'r1','a':3,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 4:\n    check('display selected rows', solve([{'id':'r1','a':4,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 5:\n    check('display selected rows', solve([{'id':'r1','a':5,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\ncheck('variant formatted clipboard value', solve([{'id':'r','a':N,'_display':{'a':'value'+str(N)}}], [{'id':'a','label':'A'}], ['r'], [], False, False), 'value'+str(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":"3ede8c1891741a903122d5680264882d9a95448e14a1b939e4c00534676971b8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, columns, selected, hidden, include_headers, raw):\n    cols=[c for c in columns if c['id'] not in hidden and c.get('copy',True)]\n    rr=[r for r in rows if r['id'] in selected]\n    def text(v):\n        s=str(v)\n        return '\"'+s.replace('\"','\"\"')+'\"' if any(x in s for x in ('\\t','\\n','\"')) else s\n    lines=[]\n    if include_headers: lines.append('\\t'.join(text(c['label']) for c in cols))\n    for r in rr:\n        values=[r.get(c['id']) if raw else r.get('_display',{}).get(c['id'],r.get(c['id'])) for c in cols]\n        lines.append('\\t'.join(text(v) for v in values))\n    return '\\r\\n'.join(lines)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('display selected rows', solve([{'id':'r1','a':1,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 2:\n    check('display selected rows', solve([{'id':'r1','a':2,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 3:\n    check('display selected rows', solve([{'id':'r1','a':3,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 4:\n    check('display selected rows', solve([{'id':'r1','a':4,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 5:\n    check('display selected rows', solve([{'id':'r1','a':5,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\ncheck('variant formatted clipboard value', solve([{'id':'r','a':N,'_display':{'a':'value'+str(N)}}], [{'id':'a','label':'A'}], ['r'], [], False, False), 'value'+str(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":"5981d927f7a37deb30551e3ed5974458bafc184a19eac1992fa8851d4eda7107","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, columns, selected, hidden, include_headers, raw):\n    cols=[c for c in columns if c['id'] not in hidden and c.get('copy',True)]\n    rr=[r for r in rows if r['id'] in selected]\n    def text(v):\n        s='' if v is None else str(v)\n        return '\"'+s.replace('\"','\"\"')+'\"' if any(x in s for x in ('\\t','\\n','\"')) else s\n    lines=[]\n    if include_headers: lines.append('\\t'.join(text(c['label']) for c in cols))\n    for r in rr:\n        values=[r.get(c['id']) if raw else r.get('_display',{}).get(c['id'],r.get(c['id'])) for c in cols]\n        lines.append('\\t'.join(text(v) for v in values))\n    return '\\r\\n'.join(lines)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('display selected rows', solve([{'id':'r1','a':1,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 2:\n    check('display selected rows', solve([{'id':'r1','a':2,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 3:\n    check('display selected rows', solve([{'id':'r1','a':3,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 4:\n    check('display selected rows', solve([{'id':'r1','a':4,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\nif N == 5:\n    check('display selected rows', solve([{'id':'r1','a':5,'b':0,'_display':{'a':'shown'}},{'id':'r2','a':None,'b':'x'}], [{'id':'a','label':'Alpha'},{'id':'b','label':'Beta'}], ['r2','r1'], [], True, False), 'Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx')\n    check('quoted cells', solve([{'id':'r','a':'x\"y','b':'line\\nnext','c':'x\\ty'}], [{'id':'a','label':'A'},{'id':'b','label':'B'},{'id':'c','label':'C'}], ['r'], [], False, True), '\"x\"\"y\"\\t\"line\\nnext\"\\t\"x\\ty\"')\n    check('hidden private', solve([{'id':'r','a':1,'b':2,'c':3}], [{'id':'a','label':'A'},{'id':'b','label':'B','copy':False},{'id':'c','label':'C'}], ['r'], ['a'], False, True), '3')\n    check('raw mode', solve([{'id':'r','a':2,'b':None,'_display':{'a':'two'}}], [{'id':'a','label':'A'},{'id':'b','label':'B'}], ['r'], [], False, True), '2\\t')\n    check('header-only', solve([], [{'id':'a','label':'Alpha'}], [], [], True, True), 'Alpha')\n    check('no selection', solve([{'id':'r','a':1}], [{'id':'a','label':'A'}], [], [], False, False), '')\n\ncheck('variant formatted clipboard value', solve([{'id':'r','a':N,'_display':{'a':'value'+str(N)}}], [{'id':'a','label':'A'}], ['r'], [], False, False), 'value'+str(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":"Source row/column IDs are unique. Cell strings exclude lone carriage returns; quoting models tabs, LF, and double quotes only. 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-clipboard-copy-null-cell-copy","generated_at":"2026-09-29T14:42:59.419719+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline table UI model isolates table clipboard serialization, including adversarial row/column relationships.","repair":"Apply the complete null cell copy rule: '' if v is None else str(v).","root_cause":"The null cell copy decision uses 'str(v)' instead of \"'' if v is None else str(v)\".","sha256":"bc1e66adfb85acb9b4190c8c995ff0bb5dce1dec1e09ccb301f46e641f09193c","title":"Table clipboard serialization: null cell copy · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.012,"exit_code":1,"observations":[{"actual":"Alpha\tBeta\r\nshown\t\r\n\tx","check":"display selected rows","expected":"Alpha\tBeta\r\nshown\t0\r\n\tx","passed":false},{"actual":"\"x\"\"y\"\t\"line\nnext\"\t\"x\ty\"","check":"quoted cells","expected":"\"x\"\"y\"\t\"line\nnext\"\t\"x\ty\"","passed":true},{"actual":"3","check":"hidden private","expected":"3","passed":true},{"actual":"2\t","check":"raw mode","expected":"2\t","passed":true},{"actual":"Alpha","check":"header-only","expected":"Alpha","passed":true},{"actual":"","check":"no selection","expected":"","passed":true},{"actual":"value1","check":"variant formatted clipboard value","expected":"value1","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"display selected rows\", \"actual\": \"Alpha\\tBeta\\r\\nshown\\t\\r\\n\\tx\", \"expected\": \"Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx\", \"passed\": false}, {\"check\": \"quoted cells\", \"actual\": \"\\\"x\\\"\\\"y\\\"\\t\\\"line\\nnext\\\"\\t\\\"x\\ty\\\"\", \"expected\": \"\\\"x\\\"\\\"y\\\"\\t\\\"line\\nnext\\\"\\t\\\"x\\ty\\\"\", \"passed\": true}, {\"check\": \"hidden private\", \"actual\": \"3\", \"expected\": \"3\", \"passed\": true}, {\"check\": \"raw mode\", \"actual\": \"2\\t\", \"expected\": \"2\\t\", \"passed\": true}, {\"check\": \"header-only\", \"actual\": \"Alpha\", \"expected\": \"Alpha\", \"passed\": true}, {\"check\": \"no selection\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"variant formatted clipboard value\", \"actual\": \"value1\", \"expected\": \"value1\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.068,"exit_code":1,"observations":[{"actual":"Alpha\tBeta\r\nshown\t0\r\nNone\tx","check":"display selected rows","expected":"Alpha\tBeta\r\nshown\t0\r\n\tx","passed":false},{"actual":"\"x\"\"y\"\t\"line\nnext\"\t\"x\ty\"","check":"quoted cells","expected":"\"x\"\"y\"\t\"line\nnext\"\t\"x\ty\"","passed":true},{"actual":"3","check":"hidden private","expected":"3","passed":true},{"actual":"2\tNone","check":"raw mode","expected":"2\t","passed":false},{"actual":"Alpha","check":"header-only","expected":"Alpha","passed":true},{"actual":"","check":"no selection","expected":"","passed":true},{"actual":"value1","check":"variant formatted clipboard value","expected":"value1","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"display selected rows\", \"actual\": \"Alpha\\tBeta\\r\\nshown\\t0\\r\\nNone\\tx\", \"expected\": \"Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx\", \"passed\": false}, {\"check\": \"quoted cells\", \"actual\": \"\\\"x\\\"\\\"y\\\"\\t\\\"line\\nnext\\\"\\t\\\"x\\ty\\\"\", \"expected\": \"\\\"x\\\"\\\"y\\\"\\t\\\"line\\nnext\\\"\\t\\\"x\\ty\\\"\", \"passed\": true}, {\"check\": \"hidden private\", \"actual\": \"3\", \"expected\": \"3\", \"passed\": true}, {\"check\": \"raw mode\", \"actual\": \"2\\tNone\", \"expected\": \"2\\t\", \"passed\": false}, {\"check\": \"header-only\", \"actual\": \"Alpha\", \"expected\": \"Alpha\", \"passed\": true}, {\"check\": \"no selection\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"variant formatted clipboard value\", \"actual\": \"value1\", \"expected\": \"value1\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.664,"exit_code":0,"observations":[{"actual":"Alpha\tBeta\r\nshown\t0\r\n\tx","check":"display selected rows","expected":"Alpha\tBeta\r\nshown\t0\r\n\tx","passed":true},{"actual":"\"x\"\"y\"\t\"line\nnext\"\t\"x\ty\"","check":"quoted cells","expected":"\"x\"\"y\"\t\"line\nnext\"\t\"x\ty\"","passed":true},{"actual":"3","check":"hidden private","expected":"3","passed":true},{"actual":"2\t","check":"raw mode","expected":"2\t","passed":true},{"actual":"Alpha","check":"header-only","expected":"Alpha","passed":true},{"actual":"","check":"no selection","expected":"","passed":true},{"actual":"value1","check":"variant formatted clipboard value","expected":"value1","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"display selected rows\", \"actual\": \"Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx\", \"expected\": \"Alpha\\tBeta\\r\\nshown\\t0\\r\\n\\tx\", \"passed\": true}, {\"check\": \"quoted cells\", \"actual\": \"\\\"x\\\"\\\"y\\\"\\t\\\"line\\nnext\\\"\\t\\\"x\\ty\\\"\", \"expected\": \"\\\"x\\\"\\\"y\\\"\\t\\\"line\\nnext\\\"\\t\\\"x\\ty\\\"\", \"passed\": true}, {\"check\": \"hidden private\", \"actual\": \"3\", \"expected\": \"3\", \"passed\": true}, {\"check\": \"raw mode\", \"actual\": \"2\\t\", \"expected\": \"2\\t\", \"passed\": true}, {\"check\": \"header-only\", \"actual\": \"Alpha\", \"expected\": \"Alpha\", \"passed\": true}, {\"check\": \"no selection\", \"actual\": \"\", \"expected\": \"\", \"passed\": true}, {\"check\": \"variant formatted clipboard value\", \"actual\": \"value1\", \"expected\": \"value1\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}