{"abstract":"A zero margin is reported as a win.","category":"Go territory scoring","checks":8,"contract":"Input [size, black_area, komi_tenths] for a board with no dame. White area is size^2 - black_area. Return [margin_tenths, winner] where margin = 10*(black - white) - komi and winner is B, W or draw.","evaluation_group":"w2-go-territory-scoring-black-count","failed_approach":"Moving the equality to the white test still awards the draw.","family":"w2-go-territory-scoring-black-count-draw-detection","id":"FA-83176","implementations":{"attempt":{"sha256":"eb7bc9a2ff6187e3c759495246755c396328e0a38e3f6fe6254568b3e72e42b0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    size, black, komi = x\n    total = size * size\n    margin = 20 * black - 10 * total - komi\n    if margin > 0:\n        return [margin, 'B']\n    if margin <= 0:\n        return [margin, 'W']\n    return [0, 'draw']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[9, 3, 5], [-755, 'W']], [[9, 26, 65], [-355, 'W']], [[9, 53, 75], [175, 'B']], [[9, 74, 0], [670, 'B']], [[9, 64, 0], [470, 'B']], [[9, 12, 65], [-635, 'W']], [[19, 184, 70], [0, 'draw']], [[9, 43, 50], [0, 'draw']]], [[[9, 6, 0], [-690, 'W']], [[9, 3, 5], [-755, 'W']], [[9, 4, 0], [-730, 'W']], [[9, 69, 65], [505, 'B']], [[9, 35, 70], [-180, 'W']], [[9, 21, 75], [-465, 'W']], [[9, 43, 50], [0, 'draw']], [[19, 185, 90], [0, 'draw']]], [[[13, 163, 5], [1565, 'B']], [[13, 105, 5], [405, 'B']], [[13, 111, 5], [525, 'B']], [[13, 13, 5], [-1435, 'W']], [[13, 7, 70], [-1620, 'W']], [[13, 46, 75], [-845, 'W']], [[9, 43, 50], [0, 'draw']], [[9, 43, 50], [0, 'draw']]], [[[13, 167, 0], [1650, 'B']], [[13, 59, 5], [-515, 'W']], [[13, 130, 5], [905, 'B']], [[13, 39, 65], [-975, 'W']], [[13, 76, 65], [-235, 'W']], [[13, 132, 65], [885, 'B']], [[9, 43, 50], [0, 'draw']], [[9, 42, 30], [0, 'draw']]], [[[13, 107, 65], [385, 'B']], [[13, 136, 5], [1025, 'B']], [[13, 137, 0], [1050, 'B']], [[13, 9, 65], [-1575, 'W']], [[13, 114, 65], [525, 'B']], [[19, 309, 0], [2570, 'B']], [[9, 43, 50], [0, 'draw']], [[13, 87, 50], [0, 'draw']]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"black count case %d\" % i, solve(args), expected)\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":"5f91e3d376e9ac725ea00e681523f3d615358a4924b231f31c5e468069aaf3cf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    size, black, komi = x\n    total = size * size\n    margin = 20 * black - 10 * total - komi\n    if margin >= 0:\n        return [margin, 'B']\n    if margin < 0:\n        return [margin, 'W']\n    return [0, 'draw']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[9, 3, 5], [-755, 'W']], [[9, 26, 65], [-355, 'W']], [[9, 53, 75], [175, 'B']], [[9, 74, 0], [670, 'B']], [[9, 64, 0], [470, 'B']], [[9, 12, 65], [-635, 'W']], [[19, 184, 70], [0, 'draw']], [[9, 43, 50], [0, 'draw']]], [[[9, 6, 0], [-690, 'W']], [[9, 3, 5], [-755, 'W']], [[9, 4, 0], [-730, 'W']], [[9, 69, 65], [505, 'B']], [[9, 35, 70], [-180, 'W']], [[9, 21, 75], [-465, 'W']], [[9, 43, 50], [0, 'draw']], [[19, 185, 90], [0, 'draw']]], [[[13, 163, 5], [1565, 'B']], [[13, 105, 5], [405, 'B']], [[13, 111, 5], [525, 'B']], [[13, 13, 5], [-1435, 'W']], [[13, 7, 70], [-1620, 'W']], [[13, 46, 75], [-845, 'W']], [[9, 43, 50], [0, 'draw']], [[9, 43, 50], [0, 'draw']]], [[[13, 167, 0], [1650, 'B']], [[13, 59, 5], [-515, 'W']], [[13, 130, 5], [905, 'B']], [[13, 39, 65], [-975, 'W']], [[13, 76, 65], [-235, 'W']], [[13, 132, 65], [885, 'B']], [[9, 43, 50], [0, 'draw']], [[9, 42, 30], [0, 'draw']]], [[[13, 107, 65], [385, 'B']], [[13, 136, 5], [1025, 'B']], [[13, 137, 0], [1050, 'B']], [[13, 9, 65], [-1575, 'W']], [[13, 114, 65], [525, 'B']], [[19, 309, 0], [2570, 'B']], [[9, 43, 50], [0, 'draw']], [[13, 87, 50], [0, 'draw']]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"black count case %d\" % i, solve(args), expected)\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":"5bd94aebd3e1538e82ad760deaf5140966df6ef6bbeea679b86865d0167270cd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    size, black, komi = x\n    total = size * size\n    margin = 20 * black - 10 * total - komi\n    if margin > 0:\n        return [margin, 'B']\n    if margin < 0:\n        return [margin, 'W']\n    return [0, 'draw']\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[9, 3, 5], [-755, 'W']], [[9, 26, 65], [-355, 'W']], [[9, 53, 75], [175, 'B']], [[9, 74, 0], [670, 'B']], [[9, 64, 0], [470, 'B']], [[9, 12, 65], [-635, 'W']], [[19, 184, 70], [0, 'draw']], [[9, 43, 50], [0, 'draw']]], [[[9, 6, 0], [-690, 'W']], [[9, 3, 5], [-755, 'W']], [[9, 4, 0], [-730, 'W']], [[9, 69, 65], [505, 'B']], [[9, 35, 70], [-180, 'W']], [[9, 21, 75], [-465, 'W']], [[9, 43, 50], [0, 'draw']], [[19, 185, 90], [0, 'draw']]], [[[13, 163, 5], [1565, 'B']], [[13, 105, 5], [405, 'B']], [[13, 111, 5], [525, 'B']], [[13, 13, 5], [-1435, 'W']], [[13, 7, 70], [-1620, 'W']], [[13, 46, 75], [-845, 'W']], [[9, 43, 50], [0, 'draw']], [[9, 43, 50], [0, 'draw']]], [[[13, 167, 0], [1650, 'B']], [[13, 59, 5], [-515, 'W']], [[13, 130, 5], [905, 'B']], [[13, 39, 65], [-975, 'W']], [[13, 76, 65], [-235, 'W']], [[13, 132, 65], [885, 'B']], [[9, 43, 50], [0, 'draw']], [[9, 42, 30], [0, 'draw']]], [[[13, 107, 65], [385, 'B']], [[13, 136, 5], [1025, 'B']], [[13, 137, 0], [1050, 'B']], [[13, 9, 65], [-1575, 'W']], [[13, 114, 65], [525, 'B']], [[19, 309, 0], [2570, 'B']], [[9, 43, 50], [0, 'draw']], [[13, 87, 50], [0, 'draw']]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"black count case %d\" % i, solve(args), expected)\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":"Small rectangular toy boards given as strings of B, W and dot; a bounded teaching model of one scoring or bookkeeping rule, not a complete rules engine or server implementation. 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":"w2-go-territory-scoring-black-count-draw-detection","generated_at":"2026-09-29T14:50:19.237086+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Go servers and scoring tools compute this value automatically; a wrong answer changes a game result.","repair":"Report draw when the margin is zero.","root_cause":"The winner comparison includes equality.","sha256":"519c9b328c494a1479fc14c42c0de99438b62b45fb32744d55b0f1a4127a9cbb","title":"Exact draws are assigned to one player · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.981,"exit_code":1,"observations":[{"actual":[-755,"W"],"check":"black count case 0","expected":[-755,"W"],"passed":true},{"actual":[-355,"W"],"check":"black count case 1","expected":[-355,"W"],"passed":true},{"actual":[175,"B"],"check":"black count case 2","expected":[175,"B"],"passed":true},{"actual":[670,"B"],"check":"black count case 3","expected":[670,"B"],"passed":true},{"actual":[470,"B"],"check":"black count case 4","expected":[470,"B"],"passed":true},{"actual":[-635,"W"],"check":"black count case 5","expected":[-635,"W"],"passed":true},{"actual":[0,"W"],"check":"black count case 6","expected":[0,"draw"],"passed":false},{"actual":[0,"W"],"check":"black count case 7","expected":[0,"draw"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"black count case 0\", \"actual\": [-755, \"W\"], \"expected\": [-755, \"W\"], \"passed\": true}, {\"check\": \"black count case 1\", \"actual\": [-355, \"W\"], \"expected\": [-355, \"W\"], \"passed\": true}, {\"check\": \"black count case 2\", \"actual\": [175, \"B\"], \"expected\": [175, \"B\"], \"passed\": true}, {\"check\": \"black count case 3\", \"actual\": [670, \"B\"], \"expected\": [670, \"B\"], \"passed\": true}, {\"check\": \"black count case 4\", \"actual\": [470, \"B\"], \"expected\": [470, \"B\"], \"passed\": true}, {\"check\": \"black count case 5\", \"actual\": [-635, \"W\"], \"expected\": [-635, \"W\"], \"passed\": true}, {\"check\": \"black count case 6\", \"actual\": [0, \"W\"], \"expected\": [0, \"draw\"], \"passed\": false}, {\"check\": \"black count case 7\", \"actual\": [0, \"W\"], \"expected\": [0, \"draw\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.973,"exit_code":1,"observations":[{"actual":[-755,"W"],"check":"black count case 0","expected":[-755,"W"],"passed":true},{"actual":[-355,"W"],"check":"black count case 1","expected":[-355,"W"],"passed":true},{"actual":[175,"B"],"check":"black count case 2","expected":[175,"B"],"passed":true},{"actual":[670,"B"],"check":"black count case 3","expected":[670,"B"],"passed":true},{"actual":[470,"B"],"check":"black count case 4","expected":[470,"B"],"passed":true},{"actual":[-635,"W"],"check":"black count case 5","expected":[-635,"W"],"passed":true},{"actual":[0,"B"],"check":"black count case 6","expected":[0,"draw"],"passed":false},{"actual":[0,"B"],"check":"black count case 7","expected":[0,"draw"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"black count case 0\", \"actual\": [-755, \"W\"], \"expected\": [-755, \"W\"], \"passed\": true}, {\"check\": \"black count case 1\", \"actual\": [-355, \"W\"], \"expected\": [-355, \"W\"], \"passed\": true}, {\"check\": \"black count case 2\", \"actual\": [175, \"B\"], \"expected\": [175, \"B\"], \"passed\": true}, {\"check\": \"black count case 3\", \"actual\": [670, \"B\"], \"expected\": [670, \"B\"], \"passed\": true}, {\"check\": \"black count case 4\", \"actual\": [470, \"B\"], \"expected\": [470, \"B\"], \"passed\": true}, {\"check\": \"black count case 5\", \"actual\": [-635, \"W\"], \"expected\": [-635, \"W\"], \"passed\": true}, {\"check\": \"black count case 6\", \"actual\": [0, \"B\"], \"expected\": [0, \"draw\"], \"passed\": false}, {\"check\": \"black count case 7\", \"actual\": [0, \"B\"], \"expected\": [0, \"draw\"], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.725,"exit_code":0,"observations":[{"actual":[-755,"W"],"check":"black count case 0","expected":[-755,"W"],"passed":true},{"actual":[-355,"W"],"check":"black count case 1","expected":[-355,"W"],"passed":true},{"actual":[175,"B"],"check":"black count case 2","expected":[175,"B"],"passed":true},{"actual":[670,"B"],"check":"black count case 3","expected":[670,"B"],"passed":true},{"actual":[470,"B"],"check":"black count case 4","expected":[470,"B"],"passed":true},{"actual":[-635,"W"],"check":"black count case 5","expected":[-635,"W"],"passed":true},{"actual":[0,"draw"],"check":"black count case 6","expected":[0,"draw"],"passed":true},{"actual":[0,"draw"],"check":"black count case 7","expected":[0,"draw"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"black count case 0\", \"actual\": [-755, \"W\"], \"expected\": [-755, \"W\"], \"passed\": true}, {\"check\": \"black count case 1\", \"actual\": [-355, \"W\"], \"expected\": [-355, \"W\"], \"passed\": true}, {\"check\": \"black count case 2\", \"actual\": [175, \"B\"], \"expected\": [175, \"B\"], \"passed\": true}, {\"check\": \"black count case 3\", \"actual\": [670, \"B\"], \"expected\": [670, \"B\"], \"passed\": true}, {\"check\": \"black count case 4\", \"actual\": [470, \"B\"], \"expected\": [470, \"B\"], \"passed\": true}, {\"check\": \"black count case 5\", \"actual\": [-635, \"W\"], \"expected\": [-635, \"W\"], \"passed\": true}, {\"check\": \"black count case 6\", \"actual\": [0, \"draw\"], \"expected\": [0, \"draw\"], \"passed\": true}, {\"check\": \"black count case 7\", \"actual\": [0, \"draw\"], \"expected\": [0, \"draw\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}