{"abstract":"Membership maintenance overwrites repeated right-key deltas.","category":"Data systems","checks":8,"contract":"For a fixed left bag [id,key,multiplicity], apply a right-key count delta batch and emit signed left rows only when right membership crosses zero. Null keys never match. Emit [id,signed-left-multiplicity] in left order; duplicate right updates consolidate before crossing detection.","evaluation_group":"s3-data-systems-right-membership-delta","failed_approach":"Reusing the old count for every update loses prior deltas in the same batch.","family":"s3-data-systems-right-membership-delta-right-consolidation","id":"FA-45541","implementations":{"attempt":{"sha256":"60ffdc201d8655f2d04f3ecfcb33cce6c9924e32a8005d1e1cf4b12aaf915c64","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        left,old,delta=d\n        before=dict(old); after=dict(old)\n        for key,weight in delta: after[key]=before.get(key,0)+weight\n        out=[]\n        for ident,key,multiplicity in left:\n            if key is None: continue\n            was=before.get(key,0)>0; now=after.get(key,0)>0\n            if was!=now: out.append([ident,multiplicity*(1 if now else -1)])\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('new right key', solve([[[10, 'a', 1]], [], [['a', 1]]]), [[10, 1]])\n    check('last right removed', solve([[[10, 'a', 1]], [['a', 1]], [['a', -1]]]), [[10, -1]])\n    check('right duplicate remains', solve([[[10, 'a', 1]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 1]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 1]], [['b', 1]], [['a', 1]]]), [[10, 1]])\n    check('null key', solve([[[10, None, 1]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 1]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -1]])\n    check('left multiplicity', solve([[[10, 'a', 2]], [], [['a', 1]]]), [[10, 2]])\nelif N == 2:\n    check('new right key', solve([[[10, 'a', 2]], [], [['a', 1]]]), [[10, 2]])\n    check('last right removed', solve([[[10, 'a', 2]], [['a', 1]], [['a', -1]]]), [[10, -2]])\n    check('right duplicate remains', solve([[[10, 'a', 2]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 2]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 2]], [['b', 1]], [['a', 1]]]), [[10, 2]])\n    check('null key', solve([[[10, None, 2]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 2]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -2]])\n    check('left multiplicity', solve([[[10, 'a', 3]], [], [['a', 1]]]), [[10, 3]])\nelif N == 3:\n    check('new right key', solve([[[10, 'a', 3]], [], [['a', 1]]]), [[10, 3]])\n    check('last right removed', solve([[[10, 'a', 3]], [['a', 1]], [['a', -1]]]), [[10, -3]])\n    check('right duplicate remains', solve([[[10, 'a', 3]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 3]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 3]], [['b', 1]], [['a', 1]]]), [[10, 3]])\n    check('null key', solve([[[10, None, 3]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 3]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -3]])\n    check('left multiplicity', solve([[[10, 'a', 4]], [], [['a', 1]]]), [[10, 4]])\nelif N == 4:\n    check('new right key', solve([[[10, 'a', 4]], [], [['a', 1]]]), [[10, 4]])\n    check('last right removed', solve([[[10, 'a', 4]], [['a', 1]], [['a', -1]]]), [[10, -4]])\n    check('right duplicate remains', solve([[[10, 'a', 4]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 4]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 4]], [['b', 1]], [['a', 1]]]), [[10, 4]])\n    check('null key', solve([[[10, None, 4]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 4]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -4]])\n    check('left multiplicity', solve([[[10, 'a', 5]], [], [['a', 1]]]), [[10, 5]])\nelif N == 5:\n    check('new right key', solve([[[10, 'a', 5]], [], [['a', 1]]]), [[10, 5]])\n    check('last right removed', solve([[[10, 'a', 5]], [['a', 1]], [['a', -1]]]), [[10, -5]])\n    check('right duplicate remains', solve([[[10, 'a', 5]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 5]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 5]], [['b', 1]], [['a', 1]]]), [[10, 5]])\n    check('null key', solve([[[10, None, 5]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 5]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -5]])\n    check('left multiplicity', solve([[[10, 'a', 6]], [], [['a', 1]]]), [[10, 6]])\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":"3455189eab2b91fbb3626716620d81a38ee06c72cf304efd22b1b59ab22fcab7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        left,old,delta=d\n        before=dict(old); after=dict(old)\n        for key,weight in delta: after[key]=weight\n        out=[]\n        for ident,key,multiplicity in left:\n            if key is None: continue\n            was=before.get(key,0)>0; now=after.get(key,0)>0\n            if was!=now: out.append([ident,multiplicity*(1 if now else -1)])\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('new right key', solve([[[10, 'a', 1]], [], [['a', 1]]]), [[10, 1]])\n    check('last right removed', solve([[[10, 'a', 1]], [['a', 1]], [['a', -1]]]), [[10, -1]])\n    check('right duplicate remains', solve([[[10, 'a', 1]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 1]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 1]], [['b', 1]], [['a', 1]]]), [[10, 1]])\n    check('null key', solve([[[10, None, 1]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 1]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -1]])\n    check('left multiplicity', solve([[[10, 'a', 2]], [], [['a', 1]]]), [[10, 2]])\nelif N == 2:\n    check('new right key', solve([[[10, 'a', 2]], [], [['a', 1]]]), [[10, 2]])\n    check('last right removed', solve([[[10, 'a', 2]], [['a', 1]], [['a', -1]]]), [[10, -2]])\n    check('right duplicate remains', solve([[[10, 'a', 2]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 2]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 2]], [['b', 1]], [['a', 1]]]), [[10, 2]])\n    check('null key', solve([[[10, None, 2]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 2]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -2]])\n    check('left multiplicity', solve([[[10, 'a', 3]], [], [['a', 1]]]), [[10, 3]])\nelif N == 3:\n    check('new right key', solve([[[10, 'a', 3]], [], [['a', 1]]]), [[10, 3]])\n    check('last right removed', solve([[[10, 'a', 3]], [['a', 1]], [['a', -1]]]), [[10, -3]])\n    check('right duplicate remains', solve([[[10, 'a', 3]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 3]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 3]], [['b', 1]], [['a', 1]]]), [[10, 3]])\n    check('null key', solve([[[10, None, 3]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 3]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -3]])\n    check('left multiplicity', solve([[[10, 'a', 4]], [], [['a', 1]]]), [[10, 4]])\nelif N == 4:\n    check('new right key', solve([[[10, 'a', 4]], [], [['a', 1]]]), [[10, 4]])\n    check('last right removed', solve([[[10, 'a', 4]], [['a', 1]], [['a', -1]]]), [[10, -4]])\n    check('right duplicate remains', solve([[[10, 'a', 4]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 4]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 4]], [['b', 1]], [['a', 1]]]), [[10, 4]])\n    check('null key', solve([[[10, None, 4]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 4]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -4]])\n    check('left multiplicity', solve([[[10, 'a', 5]], [], [['a', 1]]]), [[10, 5]])\nelif N == 5:\n    check('new right key', solve([[[10, 'a', 5]], [], [['a', 1]]]), [[10, 5]])\n    check('last right removed', solve([[[10, 'a', 5]], [['a', 1]], [['a', -1]]]), [[10, -5]])\n    check('right duplicate remains', solve([[[10, 'a', 5]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 5]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 5]], [['b', 1]], [['a', 1]]]), [[10, 5]])\n    check('null key', solve([[[10, None, 5]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 5]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -5]])\n    check('left multiplicity', solve([[[10, 'a', 6]], [], [['a', 1]]]), [[10, 6]])\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":"b9f613338c00dc76110646dfbe23419e79cc5dc101f4bf3b36e0c469ff2ff866","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(d):\n    try:\n        left,old,delta=d\n        before=dict(old); after=dict(old)\n        for key,weight in delta: after[key]=after.get(key,0)+weight\n        out=[]\n        for ident,key,multiplicity in left:\n            if key is None: continue\n            was=before.get(key,0)>0; now=after.get(key,0)>0\n            if was!=now: out.append([ident,multiplicity*(1 if now else -1)])\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('new right key', solve([[[10, 'a', 1]], [], [['a', 1]]]), [[10, 1]])\n    check('last right removed', solve([[[10, 'a', 1]], [['a', 1]], [['a', -1]]]), [[10, -1]])\n    check('right duplicate remains', solve([[[10, 'a', 1]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 1]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 1]], [['b', 1]], [['a', 1]]]), [[10, 1]])\n    check('null key', solve([[[10, None, 1]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 1]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -1]])\n    check('left multiplicity', solve([[[10, 'a', 2]], [], [['a', 1]]]), [[10, 2]])\nelif N == 2:\n    check('new right key', solve([[[10, 'a', 2]], [], [['a', 1]]]), [[10, 2]])\n    check('last right removed', solve([[[10, 'a', 2]], [['a', 1]], [['a', -1]]]), [[10, -2]])\n    check('right duplicate remains', solve([[[10, 'a', 2]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 2]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 2]], [['b', 1]], [['a', 1]]]), [[10, 2]])\n    check('null key', solve([[[10, None, 2]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 2]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -2]])\n    check('left multiplicity', solve([[[10, 'a', 3]], [], [['a', 1]]]), [[10, 3]])\nelif N == 3:\n    check('new right key', solve([[[10, 'a', 3]], [], [['a', 1]]]), [[10, 3]])\n    check('last right removed', solve([[[10, 'a', 3]], [['a', 1]], [['a', -1]]]), [[10, -3]])\n    check('right duplicate remains', solve([[[10, 'a', 3]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 3]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 3]], [['b', 1]], [['a', 1]]]), [[10, 3]])\n    check('null key', solve([[[10, None, 3]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 3]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -3]])\n    check('left multiplicity', solve([[[10, 'a', 4]], [], [['a', 1]]]), [[10, 4]])\nelif N == 4:\n    check('new right key', solve([[[10, 'a', 4]], [], [['a', 1]]]), [[10, 4]])\n    check('last right removed', solve([[[10, 'a', 4]], [['a', 1]], [['a', -1]]]), [[10, -4]])\n    check('right duplicate remains', solve([[[10, 'a', 4]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 4]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 4]], [['b', 1]], [['a', 1]]]), [[10, 4]])\n    check('null key', solve([[[10, None, 4]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 4]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -4]])\n    check('left multiplicity', solve([[[10, 'a', 5]], [], [['a', 1]]]), [[10, 5]])\nelif N == 5:\n    check('new right key', solve([[[10, 'a', 5]], [], [['a', 1]]]), [[10, 5]])\n    check('last right removed', solve([[[10, 'a', 5]], [['a', 1]], [['a', -1]]]), [[10, -5]])\n    check('right duplicate remains', solve([[[10, 'a', 5]], [['a', 2]], [['a', -1]]]), [])\n    check('right batch cancellation', solve([[[10, 'a', 5]], [], [['a', 1], ['a', -1]]]), [])\n    check('other right key', solve([[[10, 'a', 5]], [['b', 1]], [['a', 1]]]), [[10, 5]])\n    check('null key', solve([[[10, None, 5]], [], [[None, 1]]]), [])\n    check('two removals cross zero', solve([[[10, 'a', 5]], [['a', 2]], [['a', -1], ['a', -1]]]), [[10, -5]])\n    check('left multiplicity', solve([[[10, 'a', 6]], [], [['a', 1]]]), [[10, 6]])\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-right-membership-delta-right-consolidation","generated_at":"2026-09-29T14:44:23.351293+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: For a fixed left bag [id,key,multiplicity], apply a right-key count delta batch and emit signed left rows only when right membership crosses zero. Null keys never match. Emit [id,signed-left-multiplicity] in left order; duplicate right updates consolidate before crossing detection.","root_cause":"right-membership-delta: Membership maintenance overwrites repeated right-key deltas.","sha256":"fe1dd86daa446afae65dfbc50e44c153ea7e74b491aabbde1e80a3dbf8356e44","title":"Membership maintenance overwrites repeated right-key deltas · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.514,"exit_code":1,"observations":[{"actual":[[10,1]],"check":"new right key","expected":[[10,1]],"passed":true},{"actual":[[10,-1]],"check":"last right removed","expected":[[10,-1]],"passed":true},{"actual":[],"check":"right duplicate remains","expected":[],"passed":true},{"actual":[],"check":"right batch cancellation","expected":[],"passed":true},{"actual":[[10,1]],"check":"other right key","expected":[[10,1]],"passed":true},{"actual":[],"check":"null key","expected":[],"passed":true},{"actual":[],"check":"two removals cross zero","expected":[[10,-1]],"passed":false},{"actual":[[10,2]],"check":"left multiplicity","expected":[[10,2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"new right key\", \"actual\": [[10, 1]], \"expected\": [[10, 1]], \"passed\": true}, {\"check\": \"last right removed\", \"actual\": [[10, -1]], \"expected\": [[10, -1]], \"passed\": true}, {\"check\": \"right duplicate remains\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"right batch cancellation\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"other right key\", \"actual\": [[10, 1]], \"expected\": [[10, 1]], \"passed\": true}, {\"check\": \"null key\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"two removals cross zero\", \"actual\": [], \"expected\": [[10, -1]], \"passed\": false}, {\"check\": \"left multiplicity\", \"actual\": [[10, 2]], \"expected\": [[10, 2]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.433,"exit_code":1,"observations":[{"actual":[[10,1]],"check":"new right key","expected":[[10,1]],"passed":true},{"actual":[[10,-1]],"check":"last right removed","expected":[[10,-1]],"passed":true},{"actual":[[10,-1]],"check":"right duplicate remains","expected":[],"passed":false},{"actual":[],"check":"right batch cancellation","expected":[],"passed":true},{"actual":[[10,1]],"check":"other right key","expected":[[10,1]],"passed":true},{"actual":[],"check":"null key","expected":[],"passed":true},{"actual":[[10,-1]],"check":"two removals cross zero","expected":[[10,-1]],"passed":true},{"actual":[[10,2]],"check":"left multiplicity","expected":[[10,2]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"new right key\", \"actual\": [[10, 1]], \"expected\": [[10, 1]], \"passed\": true}, {\"check\": \"last right removed\", \"actual\": [[10, -1]], \"expected\": [[10, -1]], \"passed\": true}, {\"check\": \"right duplicate remains\", \"actual\": [[10, -1]], \"expected\": [], \"passed\": false}, {\"check\": \"right batch cancellation\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"other right key\", \"actual\": [[10, 1]], \"expected\": [[10, 1]], \"passed\": true}, {\"check\": \"null key\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"two removals cross zero\", \"actual\": [[10, -1]], \"expected\": [[10, -1]], \"passed\": true}, {\"check\": \"left multiplicity\", \"actual\": [[10, 2]], \"expected\": [[10, 2]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":50.917,"exit_code":0,"observations":[{"actual":[[10,1]],"check":"new right key","expected":[[10,1]],"passed":true},{"actual":[[10,-1]],"check":"last right removed","expected":[[10,-1]],"passed":true},{"actual":[],"check":"right duplicate remains","expected":[],"passed":true},{"actual":[],"check":"right batch cancellation","expected":[],"passed":true},{"actual":[[10,1]],"check":"other right key","expected":[[10,1]],"passed":true},{"actual":[],"check":"null key","expected":[],"passed":true},{"actual":[[10,-1]],"check":"two removals cross zero","expected":[[10,-1]],"passed":true},{"actual":[[10,2]],"check":"left multiplicity","expected":[[10,2]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"new right key\", \"actual\": [[10, 1]], \"expected\": [[10, 1]], \"passed\": true}, {\"check\": \"last right removed\", \"actual\": [[10, -1]], \"expected\": [[10, -1]], \"passed\": true}, {\"check\": \"right duplicate remains\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"right batch cancellation\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"other right key\", \"actual\": [[10, 1]], \"expected\": [[10, 1]], \"passed\": true}, {\"check\": \"null key\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"two removals cross zero\", \"actual\": [[10, -1]], \"expected\": [[10, -1]], \"passed\": true}, {\"check\": \"left multiplicity\", \"actual\": [[10, 2]], \"expected\": [[10, 2]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}