{"abstract":"Full outer join stores right IDs but tests physical positions.","category":"Data systems","checks":7,"contract":"Execute a full outer join of [id,key,value] rows with equality on non-null keys and right.value>=left.value. Track right matches by physical position; failed residuals do not mark a row matched. Emit left-major pairs, then unmatched right rows.","evaluation_group":"s3-data-systems-full-outer-match-flags","failed_approach":"Storing join keys still uses a different domain from physical row positions.","family":"s3-data-systems-full-outer-match-flags-seen-position","id":"FA-45006","implementations":{"attempt":{"sha256":"6cf37807ec77d6df091d587b4be10c701d72644aec54fa496575bc68e6d933eb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        left,right=d\n        seen=set(); out=[]\n        for ident,key,value in left:\n            matched=False\n            for pos,(other,k,v) in enumerate(right):\n                if key is not None and k==key and v>=value:\n                    matched=True\n                    seen.add(k)\n                    out.append([ident,other])\n            if not matched: out.append([ident,None])\n        for pos,(other,k,v) in enumerate(right):\n            if pos not in seen: out.append([None,other])\n        return out\n    except (IndexError, KeyError, ValueError, StopIteration) as exc:\n        return {\"representation_error\": type(exc).__name__}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('residual failure', solve([[[10, 'a', 2]], [[20, 'a', 1]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 1], [11, 'b', 1]], [[20, 'a', 2]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 1]], [[20, None, 1]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 1]], [[20, 'a', 1], [21, 'b', 1]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 1]], [[20, 'a', 1], [20, 'a', 1]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 1]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 1]], []]), [[10, None]])\nelif N == 2:\n    check('residual failure', solve([[[10, 'a', 3]], [[20, 'a', 2]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 2], [11, 'b', 2]], [[20, 'a', 3]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 2]], [[20, None, 2]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 2]], [[20, 'a', 2], [21, 'b', 2]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 2]], [[20, 'a', 2], [20, 'a', 2]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 2]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 2]], []]), [[10, None]])\nelif N == 3:\n    check('residual failure', solve([[[10, 'a', 4]], [[20, 'a', 3]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 3], [11, 'b', 3]], [[20, 'a', 4]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 3]], [[20, None, 3]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 3]], [[20, 'a', 3], [21, 'b', 3]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 3]], [[20, 'a', 3], [20, 'a', 3]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 3]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 3]], []]), [[10, None]])\nelif N == 4:\n    check('residual failure', solve([[[10, 'a', 5]], [[20, 'a', 4]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 4], [11, 'b', 4]], [[20, 'a', 5]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 4]], [[20, None, 4]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 4]], [[20, 'a', 4], [21, 'b', 4]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 4]], [[20, 'a', 4], [20, 'a', 4]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 4]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 4]], []]), [[10, None]])\nelif N == 5:\n    check('residual failure', solve([[[10, 'a', 6]], [[20, 'a', 5]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 5], [11, 'b', 5]], [[20, 'a', 6]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 5]], [[20, None, 5]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 5]], [[20, 'a', 5], [21, 'b', 5]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 5]], [[20, 'a', 5], [20, 'a', 5]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 5]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 5]], []]), [[10, None]])\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":"00123f848e5e5a01027747f72beeab793e397425fd1252dc40c7b441c6c2cbda","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        left,right=d\n        seen=set(); out=[]\n        for ident,key,value in left:\n            matched=False\n            for pos,(other,k,v) in enumerate(right):\n                if key is not None and k==key and v>=value:\n                    matched=True\n                    seen.add(other)\n                    out.append([ident,other])\n            if not matched: out.append([ident,None])\n        for pos,(other,k,v) in enumerate(right):\n            if pos not in seen: out.append([None,other])\n        return out\n    except (IndexError, KeyError, ValueError, StopIteration) as exc:\n        return {\"representation_error\": type(exc).__name__}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('residual failure', solve([[[10, 'a', 2]], [[20, 'a', 1]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 1], [11, 'b', 1]], [[20, 'a', 2]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 1]], [[20, None, 1]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 1]], [[20, 'a', 1], [21, 'b', 1]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 1]], [[20, 'a', 1], [20, 'a', 1]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 1]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 1]], []]), [[10, None]])\nelif N == 2:\n    check('residual failure', solve([[[10, 'a', 3]], [[20, 'a', 2]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 2], [11, 'b', 2]], [[20, 'a', 3]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 2]], [[20, None, 2]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 2]], [[20, 'a', 2], [21, 'b', 2]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 2]], [[20, 'a', 2], [20, 'a', 2]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 2]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 2]], []]), [[10, None]])\nelif N == 3:\n    check('residual failure', solve([[[10, 'a', 4]], [[20, 'a', 3]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 3], [11, 'b', 3]], [[20, 'a', 4]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 3]], [[20, None, 3]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 3]], [[20, 'a', 3], [21, 'b', 3]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 3]], [[20, 'a', 3], [20, 'a', 3]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 3]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 3]], []]), [[10, None]])\nelif N == 4:\n    check('residual failure', solve([[[10, 'a', 5]], [[20, 'a', 4]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 4], [11, 'b', 4]], [[20, 'a', 5]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 4]], [[20, None, 4]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 4]], [[20, 'a', 4], [21, 'b', 4]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 4]], [[20, 'a', 4], [20, 'a', 4]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 4]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 4]], []]), [[10, None]])\nelif N == 5:\n    check('residual failure', solve([[[10, 'a', 6]], [[20, 'a', 5]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 5], [11, 'b', 5]], [[20, 'a', 6]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 5]], [[20, None, 5]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 5]], [[20, 'a', 5], [21, 'b', 5]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 5]], [[20, 'a', 5], [20, 'a', 5]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 5]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 5]], []]), [[10, None]])\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":"27e6a66367b010d8da22d602a6f47bb2c9402b1cce4147048ab6d4d708e02aec","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        left,right=d\n        seen=set(); out=[]\n        for ident,key,value in left:\n            matched=False\n            for pos,(other,k,v) in enumerate(right):\n                if key is not None and k==key and v>=value:\n                    matched=True\n                    seen.add(pos)\n                    out.append([ident,other])\n            if not matched: out.append([ident,None])\n        for pos,(other,k,v) in enumerate(right):\n            if pos not in seen: out.append([None,other])\n        return out\n    except (IndexError, KeyError, ValueError, StopIteration) as exc:\n        return {\"representation_error\": type(exc).__name__}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('residual failure', solve([[[10, 'a', 2]], [[20, 'a', 1]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 1], [11, 'b', 1]], [[20, 'a', 2]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 1]], [[20, None, 1]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 1]], [[20, 'a', 1], [21, 'b', 1]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 1]], [[20, 'a', 1], [20, 'a', 1]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 1]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 1]], []]), [[10, None]])\nelif N == 2:\n    check('residual failure', solve([[[10, 'a', 3]], [[20, 'a', 2]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 2], [11, 'b', 2]], [[20, 'a', 3]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 2]], [[20, None, 2]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 2]], [[20, 'a', 2], [21, 'b', 2]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 2]], [[20, 'a', 2], [20, 'a', 2]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 2]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 2]], []]), [[10, None]])\nelif N == 3:\n    check('residual failure', solve([[[10, 'a', 4]], [[20, 'a', 3]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 3], [11, 'b', 3]], [[20, 'a', 4]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 3]], [[20, None, 3]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 3]], [[20, 'a', 3], [21, 'b', 3]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 3]], [[20, 'a', 3], [20, 'a', 3]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 3]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 3]], []]), [[10, None]])\nelif N == 4:\n    check('residual failure', solve([[[10, 'a', 5]], [[20, 'a', 4]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 4], [11, 'b', 4]], [[20, 'a', 5]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 4]], [[20, None, 4]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 4]], [[20, 'a', 4], [21, 'b', 4]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 4]], [[20, 'a', 4], [20, 'a', 4]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 4]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 4]], []]), [[10, None]])\nelif N == 5:\n    check('residual failure', solve([[[10, 'a', 6]], [[20, 'a', 5]]]), [[10, None], [None, 20]])\n    check('matched then unmatched', solve([[[10, 'a', 5], [11, 'b', 5]], [[20, 'a', 6]]]), [[10, 20], [11, None]])\n    check('null keys', solve([[[10, None, 5]], [[20, None, 5]]]), [[10, None], [None, 20]])\n    check('right unmatched', solve([[[10, 'a', 5]], [[20, 'a', 5], [21, 'b', 5]]]), [[10, 20], [None, 21]])\n    check('right physical duplicates', solve([[[10, 'a', 5]], [[20, 'a', 5], [20, 'a', 5]]]), [[10, 20], [10, 20]])\n    check('empty left', solve([[], [[20, 'a', 5]]]), [[None, 20]])\n    check('empty right', solve([[[10, 'a', 5]], []]), [[10, None]])\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":"Offline stipulated semantics over valid small inputs; no performance, concurrency, or production-engine conformance claim. 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-data-systems-full-outer-match-flags-seen-position","generated_at":"2026-09-29T14:44:17.860695+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A bounded deterministic data engine model makes representation and changelog faults reproducible.","repair":"Preserve the stated physical representation and operation order: Execute a full outer join of [id,key,value] rows with equality on non-null keys and right.value>=left.value. Track right matches by physical position; failed residuals do not mark a row matched. Emit left-major pairs, then unmatched right rows.","root_cause":"full-outer-match-flags: Full outer join stores right IDs but tests physical positions.","sha256":"761948d4a0e3572db906915bd8cb6e0762fbe7a006615c249734062cace64589","title":"Full outer join stores right IDs but tests physical positions · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.756,"exit_code":1,"observations":[{"actual":[[10,null],[null,20]],"check":"residual failure","expected":[[10,null],[null,20]],"passed":true},{"actual":[[10,20],[11,null],[null,20]],"check":"matched then unmatched","expected":[[10,20],[11,null]],"passed":false},{"actual":[[10,null],[null,20]],"check":"null keys","expected":[[10,null],[null,20]],"passed":true},{"actual":[[10,20],[null,20],[null,21]],"check":"right unmatched","expected":[[10,20],[null,21]],"passed":false},{"actual":[[10,20],[10,20],[null,20],[null,20]],"check":"right physical duplicates","expected":[[10,20],[10,20]],"passed":false},{"actual":[[null,20]],"check":"empty left","expected":[[null,20]],"passed":true},{"actual":[[10,null]],"check":"empty right","expected":[[10,null]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"residual failure\", \"actual\": [[10, null], [null, 20]], \"expected\": [[10, null], [null, 20]], \"passed\": true}, {\"check\": \"matched then unmatched\", \"actual\": [[10, 20], [11, null], [null, 20]], \"expected\": [[10, 20], [11, null]], \"passed\": false}, {\"check\": \"null keys\", \"actual\": [[10, null], [null, 20]], \"expected\": [[10, null], [null, 20]], \"passed\": true}, {\"check\": \"right unmatched\", \"actual\": [[10, 20], [null, 20], [null, 21]], \"expected\": [[10, 20], [null, 21]], \"passed\": false}, {\"check\": \"right physical duplicates\", \"actual\": [[10, 20], [10, 20], [null, 20], [null, 20]], \"expected\": [[10, 20], [10, 20]], \"passed\": false}, {\"check\": \"empty left\", \"actual\": [[null, 20]], \"expected\": [[null, 20]], \"passed\": true}, {\"check\": \"empty right\", \"actual\": [[10, null]], \"expected\": [[10, null]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.604,"exit_code":1,"observations":[{"actual":[[10,null],[null,20]],"check":"residual failure","expected":[[10,null],[null,20]],"passed":true},{"actual":[[10,20],[11,null],[null,20]],"check":"matched then unmatched","expected":[[10,20],[11,null]],"passed":false},{"actual":[[10,null],[null,20]],"check":"null keys","expected":[[10,null],[null,20]],"passed":true},{"actual":[[10,20],[null,20],[null,21]],"check":"right unmatched","expected":[[10,20],[null,21]],"passed":false},{"actual":[[10,20],[10,20],[null,20],[null,20]],"check":"right physical duplicates","expected":[[10,20],[10,20]],"passed":false},{"actual":[[null,20]],"check":"empty left","expected":[[null,20]],"passed":true},{"actual":[[10,null]],"check":"empty right","expected":[[10,null]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"residual failure\", \"actual\": [[10, null], [null, 20]], \"expected\": [[10, null], [null, 20]], \"passed\": true}, {\"check\": \"matched then unmatched\", \"actual\": [[10, 20], [11, null], [null, 20]], \"expected\": [[10, 20], [11, null]], \"passed\": false}, {\"check\": \"null keys\", \"actual\": [[10, null], [null, 20]], \"expected\": [[10, null], [null, 20]], \"passed\": true}, {\"check\": \"right unmatched\", \"actual\": [[10, 20], [null, 20], [null, 21]], \"expected\": [[10, 20], [null, 21]], \"passed\": false}, {\"check\": \"right physical duplicates\", \"actual\": [[10, 20], [10, 20], [null, 20], [null, 20]], \"expected\": [[10, 20], [10, 20]], \"passed\": false}, {\"check\": \"empty left\", \"actual\": [[null, 20]], \"expected\": [[null, 20]], \"passed\": true}, {\"check\": \"empty right\", \"actual\": [[10, null]], \"expected\": [[10, null]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.845,"exit_code":0,"observations":[{"actual":[[10,null],[null,20]],"check":"residual failure","expected":[[10,null],[null,20]],"passed":true},{"actual":[[10,20],[11,null]],"check":"matched then unmatched","expected":[[10,20],[11,null]],"passed":true},{"actual":[[10,null],[null,20]],"check":"null keys","expected":[[10,null],[null,20]],"passed":true},{"actual":[[10,20],[null,21]],"check":"right unmatched","expected":[[10,20],[null,21]],"passed":true},{"actual":[[10,20],[10,20]],"check":"right physical duplicates","expected":[[10,20],[10,20]],"passed":true},{"actual":[[null,20]],"check":"empty left","expected":[[null,20]],"passed":true},{"actual":[[10,null]],"check":"empty right","expected":[[10,null]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"residual failure\", \"actual\": [[10, null], [null, 20]], \"expected\": [[10, null], [null, 20]], \"passed\": true}, {\"check\": \"matched then unmatched\", \"actual\": [[10, 20], [11, null]], \"expected\": [[10, 20], [11, null]], \"passed\": true}, {\"check\": \"null keys\", \"actual\": [[10, null], [null, 20]], \"expected\": [[10, null], [null, 20]], \"passed\": true}, {\"check\": \"right unmatched\", \"actual\": [[10, 20], [null, 21]], \"expected\": [[10, 20], [null, 21]], \"passed\": true}, {\"check\": \"right physical duplicates\", \"actual\": [[10, 20], [10, 20]], \"expected\": [[10, 20], [10, 20]], \"passed\": true}, {\"check\": \"empty left\", \"actual\": [[null, 20]], \"expected\": [[null, 20]], \"passed\": true}, {\"check\": \"empty right\", \"actual\": [[10, null]], \"expected\": [[10, null]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}