{"abstract":"Dative donor and acceptor swap during canonicalization.","category":"Molecular graph representation","checks":6,"contract":"Return [kind,a,b]; kind dative preserves donor a and acceptor b, kind covalent sorts numeric endpoint IDs.","evaluation_group":"model-9fe1f25aad8cf95e","failed_approach":"Preserving all endpoint order prevents undirected covalent canonicalization.","family":"z-chemical_graphs-dative-direction","id":"FA-12451","implementations":{"attempt":{"sha256":"da23db69789fa7287101814a28afa3b6dc43d0bfa2f88bcb27ba0c2c789a82cd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, a, b):\n    return [kind,a,b]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('reverse dative', solve('dative', N+2,N), ['dative',N+2,N])\ncheck('forward dative', solve('dative',N,N+2), ['dative',N,N+2])\ncheck('reverse covalent', solve('covalent',N+2,N), ['covalent',N,N+2])\ncheck('forward covalent', solve('covalent',N,N+2), ['covalent',N,N+2])\ncheck('zero donor', solve('dative',0,N), ['dative',0,N])\ncheck('zero covalent endpoint', solve('covalent',N,0), ['covalent',0,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":"baac9aa1cd624eddf3073f7656d0e6e79bd29cdf0f505030f2dda0320f6c958e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, a, b):\n    return [kind,min(a,b),max(a,b)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('reverse dative', solve('dative', N+2,N), ['dative',N+2,N])\ncheck('forward dative', solve('dative',N,N+2), ['dative',N,N+2])\ncheck('reverse covalent', solve('covalent',N+2,N), ['covalent',N,N+2])\ncheck('forward covalent', solve('covalent',N,N+2), ['covalent',N,N+2])\ncheck('zero donor', solve('dative',0,N), ['dative',0,N])\ncheck('zero covalent endpoint', solve('covalent',N,0), ['covalent',0,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":"395fd27856957223a4695bab2cc27c013004c6b6ebaaa31e046d0cd1af569fbd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(kind, a, b):\n    return [kind,a,b] if kind == \"dative\" else [kind,min(a,b),max(a,b)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('reverse dative', solve('dative', N+2,N), ['dative',N+2,N])\ncheck('forward dative', solve('dative',N,N+2), ['dative',N,N+2])\ncheck('reverse covalent', solve('covalent',N+2,N), ['covalent',N,N+2])\ncheck('forward covalent', solve('covalent',N,N+2), ['covalent',N,N+2])\ncheck('zero donor', solve('dative',0,N), ['dative',0,N])\ncheck('zero covalent endpoint', solve('covalent',N,0), ['covalent',0,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":"Toy representation only; no valence inference, chemical sanitization, synthesis, or real molecular identity determination. 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":"z-chemical_graphs-dative-direction","generated_at":"2026-09-29T14:38:56.891864+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Controlled molecular graph interchange model; tests isolate atom or bond representation errors without claiming chemical validity or production toolkit equivalence.","repair":"Implement the explicit toy representation contract: Return [kind,a,b]; kind dative preserves donor a and acceptor b, kind covalent sorts numeric endpoint IDs.","root_cause":"Sorting every bond destroys directed donor-to-acceptor semantics.","sha256":"244adf728e6d4c68d566877ace2688821561ee776a1897b8a9469a154ff790de","title":"Dative donor and acceptor swap during canonicalization · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.533,"exit_code":1,"observations":[{"actual":["dative",3,1],"check":"reverse dative","expected":["dative",3,1],"passed":true},{"actual":["dative",1,3],"check":"forward dative","expected":["dative",1,3],"passed":true},{"actual":["covalent",3,1],"check":"reverse covalent","expected":["covalent",1,3],"passed":false},{"actual":["covalent",1,3],"check":"forward covalent","expected":["covalent",1,3],"passed":true},{"actual":["dative",0,1],"check":"zero donor","expected":["dative",0,1],"passed":true},{"actual":["covalent",1,0],"check":"zero covalent endpoint","expected":["covalent",0,1],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"reverse dative\", \"actual\": [\"dative\", 3, 1], \"expected\": [\"dative\", 3, 1], \"passed\": true}, {\"check\": \"forward dative\", \"actual\": [\"dative\", 1, 3], \"expected\": [\"dative\", 1, 3], \"passed\": true}, {\"check\": \"reverse covalent\", \"actual\": [\"covalent\", 3, 1], \"expected\": [\"covalent\", 1, 3], \"passed\": false}, {\"check\": \"forward covalent\", \"actual\": [\"covalent\", 1, 3], \"expected\": [\"covalent\", 1, 3], \"passed\": true}, {\"check\": \"zero donor\", \"actual\": [\"dative\", 0, 1], \"expected\": [\"dative\", 0, 1], \"passed\": true}, {\"check\": \"zero covalent endpoint\", \"actual\": [\"covalent\", 1, 0], \"expected\": [\"covalent\", 0, 1], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.989,"exit_code":1,"observations":[{"actual":["dative",1,3],"check":"reverse dative","expected":["dative",3,1],"passed":false},{"actual":["dative",1,3],"check":"forward dative","expected":["dative",1,3],"passed":true},{"actual":["covalent",1,3],"check":"reverse covalent","expected":["covalent",1,3],"passed":true},{"actual":["covalent",1,3],"check":"forward covalent","expected":["covalent",1,3],"passed":true},{"actual":["dative",0,1],"check":"zero donor","expected":["dative",0,1],"passed":true},{"actual":["covalent",0,1],"check":"zero covalent endpoint","expected":["covalent",0,1],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"reverse dative\", \"actual\": [\"dative\", 1, 3], \"expected\": [\"dative\", 3, 1], \"passed\": false}, {\"check\": \"forward dative\", \"actual\": [\"dative\", 1, 3], \"expected\": [\"dative\", 1, 3], \"passed\": true}, {\"check\": \"reverse covalent\", \"actual\": [\"covalent\", 1, 3], \"expected\": [\"covalent\", 1, 3], \"passed\": true}, {\"check\": \"forward covalent\", \"actual\": [\"covalent\", 1, 3], \"expected\": [\"covalent\", 1, 3], \"passed\": true}, {\"check\": \"zero donor\", \"actual\": [\"dative\", 0, 1], \"expected\": [\"dative\", 0, 1], \"passed\": true}, {\"check\": \"zero covalent endpoint\", \"actual\": [\"covalent\", 0, 1], \"expected\": [\"covalent\", 0, 1], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.971,"exit_code":0,"observations":[{"actual":["dative",3,1],"check":"reverse dative","expected":["dative",3,1],"passed":true},{"actual":["dative",1,3],"check":"forward dative","expected":["dative",1,3],"passed":true},{"actual":["covalent",1,3],"check":"reverse covalent","expected":["covalent",1,3],"passed":true},{"actual":["covalent",1,3],"check":"forward covalent","expected":["covalent",1,3],"passed":true},{"actual":["dative",0,1],"check":"zero donor","expected":["dative",0,1],"passed":true},{"actual":["covalent",0,1],"check":"zero covalent endpoint","expected":["covalent",0,1],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"reverse dative\", \"actual\": [\"dative\", 3, 1], \"expected\": [\"dative\", 3, 1], \"passed\": true}, {\"check\": \"forward dative\", \"actual\": [\"dative\", 1, 3], \"expected\": [\"dative\", 1, 3], \"passed\": true}, {\"check\": \"reverse covalent\", \"actual\": [\"covalent\", 1, 3], \"expected\": [\"covalent\", 1, 3], \"passed\": true}, {\"check\": \"forward covalent\", \"actual\": [\"covalent\", 1, 3], \"expected\": [\"covalent\", 1, 3], \"passed\": true}, {\"check\": \"zero donor\", \"actual\": [\"dative\", 0, 1], \"expected\": [\"dative\", 0, 1], \"passed\": true}, {\"check\": \"zero covalent endpoint\", \"actual\": [\"covalent\", 0, 1], \"expected\": [\"covalent\", 0, 1], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}