{"abstract":"Small-board games are scored against the 19x19 total.","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":"Counting (size-1)^2 squares instead of intersections still undercounts the board.","family":"w2-go-territory-scoring-black-count-board-point-total","id":"FA-83166","implementations":{"attempt":{"sha256":"ab7fe76d9f2540e47a5c16c19b269daf88f7340e6933c4d74cda81530a4003f3","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 - 1) * (size - 1)\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, 13, 65], [-615, 'W']], [[9, 72, 5], [625, 'B']], [[9, 53, 75], [175, 'B']], [[9, 74, 0], [670, 'B']], [[9, 64, 0], [470, 'B']], [[9, 12, 65], [-635, 'W']], [[9, 27, 75], [-345, 'W']], [[9, 6, 0], [-690, 'W']]], [[[9, 80, 70], [720, 'B']], [[9, 64, 0], [470, 'B']], [[9, 4, 0], [-730, 'W']], [[9, 69, 65], [505, 'B']], [[9, 35, 70], [-180, 'W']], [[9, 21, 75], [-465, 'W']], [[13, 30, 70], [-1160, 'W']], [[13, 163, 5], [1565, 'B']]], [[[9, 72, 5], [625, 'B']], [[9, 4, 0], [-730, 'W']], [[13, 111, 5], [525, 'B']], [[13, 13, 5], [-1435, 'W']], [[13, 7, 70], [-1620, 'W']], [[13, 46, 75], [-845, 'W']], [[13, 56, 75], [-645, 'W']], [[13, 167, 0], [1650, 'B']]], [[[9, 53, 75], [175, 'B']], [[13, 163, 5], [1565, 'B']], [[13, 130, 5], [905, 'B']], [[13, 39, 65], [-975, 'W']], [[13, 76, 65], [-235, 'W']], [[13, 132, 65], [885, 'B']], [[13, 27, 75], [-1225, 'W']], [[13, 107, 65], [385, 'B']]], [[[9, 12, 65], [-635, 'W']], [[13, 46, 75], [-845, 'W']], [[13, 137, 0], [1050, 'B']], [[13, 9, 65], [-1575, 'W']], [[13, 114, 65], [525, 'B']], [[19, 309, 0], [2570, 'B']], [[19, 303, 75], [2375, 'B']], [[19, 77, 5], [-2075, 'W']]]]\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":"61f667ae698af9a5fc075f9f5d9e6611e41c630fd8d23d505ea68e19278d7110","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 = 361\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, 13, 65], [-615, 'W']], [[9, 72, 5], [625, 'B']], [[9, 53, 75], [175, 'B']], [[9, 74, 0], [670, 'B']], [[9, 64, 0], [470, 'B']], [[9, 12, 65], [-635, 'W']], [[9, 27, 75], [-345, 'W']], [[9, 6, 0], [-690, 'W']]], [[[9, 80, 70], [720, 'B']], [[9, 64, 0], [470, 'B']], [[9, 4, 0], [-730, 'W']], [[9, 69, 65], [505, 'B']], [[9, 35, 70], [-180, 'W']], [[9, 21, 75], [-465, 'W']], [[13, 30, 70], [-1160, 'W']], [[13, 163, 5], [1565, 'B']]], [[[9, 72, 5], [625, 'B']], [[9, 4, 0], [-730, 'W']], [[13, 111, 5], [525, 'B']], [[13, 13, 5], [-1435, 'W']], [[13, 7, 70], [-1620, 'W']], [[13, 46, 75], [-845, 'W']], [[13, 56, 75], [-645, 'W']], [[13, 167, 0], [1650, 'B']]], [[[9, 53, 75], [175, 'B']], [[13, 163, 5], [1565, 'B']], [[13, 130, 5], [905, 'B']], [[13, 39, 65], [-975, 'W']], [[13, 76, 65], [-235, 'W']], [[13, 132, 65], [885, 'B']], [[13, 27, 75], [-1225, 'W']], [[13, 107, 65], [385, 'B']]], [[[9, 12, 65], [-635, 'W']], [[13, 46, 75], [-845, 'W']], [[13, 137, 0], [1050, 'B']], [[13, 9, 65], [-1575, 'W']], [[13, 114, 65], [525, 'B']], [[19, 309, 0], [2570, 'B']], [[19, 303, 75], [2375, 'B']], [[19, 77, 5], [-2075, 'W']]]]\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":"5a06f9022103eab7d7f235a8de4a34840cb4c6e1f104f98a55708b29a70983fe","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, 13, 65], [-615, 'W']], [[9, 72, 5], [625, 'B']], [[9, 53, 75], [175, 'B']], [[9, 74, 0], [670, 'B']], [[9, 64, 0], [470, 'B']], [[9, 12, 65], [-635, 'W']], [[9, 27, 75], [-345, 'W']], [[9, 6, 0], [-690, 'W']]], [[[9, 80, 70], [720, 'B']], [[9, 64, 0], [470, 'B']], [[9, 4, 0], [-730, 'W']], [[9, 69, 65], [505, 'B']], [[9, 35, 70], [-180, 'W']], [[9, 21, 75], [-465, 'W']], [[13, 30, 70], [-1160, 'W']], [[13, 163, 5], [1565, 'B']]], [[[9, 72, 5], [625, 'B']], [[9, 4, 0], [-730, 'W']], [[13, 111, 5], [525, 'B']], [[13, 13, 5], [-1435, 'W']], [[13, 7, 70], [-1620, 'W']], [[13, 46, 75], [-845, 'W']], [[13, 56, 75], [-645, 'W']], [[13, 167, 0], [1650, 'B']]], [[[9, 53, 75], [175, 'B']], [[13, 163, 5], [1565, 'B']], [[13, 130, 5], [905, 'B']], [[13, 39, 65], [-975, 'W']], [[13, 76, 65], [-235, 'W']], [[13, 132, 65], [885, 'B']], [[13, 27, 75], [-1225, 'W']], [[13, 107, 65], [385, 'B']]], [[[9, 12, 65], [-635, 'W']], [[13, 46, 75], [-845, 'W']], [[13, 137, 0], [1050, 'B']], [[13, 9, 65], [-1575, 'W']], [[13, 114, 65], [525, 'B']], [[19, 309, 0], [2570, 'B']], [[19, 303, 75], [2375, 'B']], [[19, 77, 5], [-2075, 'W']]]]\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-board-point-total","generated_at":"2026-09-29T14:50:19.070690+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":"Use size*size intersections.","root_cause":"The total point count is hard-coded.","sha256":"371b692dffa38729f088b79989603e63a643341c6104f48b1fb895c55f4bf38f","title":"Black-only counting assumes 361 points on every board · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.342,"exit_code":1,"observations":[{"actual":[-445,"W"],"check":"black count case 0","expected":[-615,"W"],"passed":false},{"actual":[795,"B"],"check":"black count case 1","expected":[625,"B"],"passed":false},{"actual":[345,"B"],"check":"black count case 2","expected":[175,"B"],"passed":false},{"actual":[840,"B"],"check":"black count case 3","expected":[670,"B"],"passed":false},{"actual":[640,"B"],"check":"black count case 4","expected":[470,"B"],"passed":false},{"actual":[-465,"W"],"check":"black count case 5","expected":[-635,"W"],"passed":false},{"actual":[-175,"W"],"check":"black count case 6","expected":[-345,"W"],"passed":false},{"actual":[-520,"W"],"check":"black count case 7","expected":[-690,"W"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"black count case 0\", \"actual\": [-445, \"W\"], \"expected\": [-615, \"W\"], \"passed\": false}, {\"check\": \"black count case 1\", \"actual\": [795, \"B\"], \"expected\": [625, \"B\"], \"passed\": false}, {\"check\": \"black count case 2\", \"actual\": [345, \"B\"], \"expected\": [175, \"B\"], \"passed\": false}, {\"check\": \"black count case 3\", \"actual\": [840, \"B\"], \"expected\": [670, \"B\"], \"passed\": false}, {\"check\": \"black count case 4\", \"actual\": [640, \"B\"], \"expected\": [470, \"B\"], \"passed\": false}, {\"check\": \"black count case 5\", \"actual\": [-465, \"W\"], \"expected\": [-635, \"W\"], \"passed\": false}, {\"check\": \"black count case 6\", \"actual\": [-175, \"W\"], \"expected\": [-345, \"W\"], \"passed\": false}, {\"check\": \"black count case 7\", \"actual\": [-520, \"W\"], \"expected\": [-690, \"W\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.346,"exit_code":1,"observations":[{"actual":[-3415,"W"],"check":"black count case 0","expected":[-615,"W"],"passed":false},{"actual":[-2175,"W"],"check":"black count case 1","expected":[625,"B"],"passed":false},{"actual":[-2625,"W"],"check":"black count case 2","expected":[175,"B"],"passed":false},{"actual":[-2130,"W"],"check":"black count case 3","expected":[670,"B"],"passed":false},{"actual":[-2330,"W"],"check":"black count case 4","expected":[470,"B"],"passed":false},{"actual":[-3435,"W"],"check":"black count case 5","expected":[-635,"W"],"passed":false},{"actual":[-3145,"W"],"check":"black count case 6","expected":[-345,"W"],"passed":false},{"actual":[-3490,"W"],"check":"black count case 7","expected":[-690,"W"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"black count case 0\", \"actual\": [-3415, \"W\"], \"expected\": [-615, \"W\"], \"passed\": false}, {\"check\": \"black count case 1\", \"actual\": [-2175, \"W\"], \"expected\": [625, \"B\"], \"passed\": false}, {\"check\": \"black count case 2\", \"actual\": [-2625, \"W\"], \"expected\": [175, \"B\"], \"passed\": false}, {\"check\": \"black count case 3\", \"actual\": [-2130, \"W\"], \"expected\": [670, \"B\"], \"passed\": false}, {\"check\": \"black count case 4\", \"actual\": [-2330, \"W\"], \"expected\": [470, \"B\"], \"passed\": false}, {\"check\": \"black count case 5\", \"actual\": [-3435, \"W\"], \"expected\": [-635, \"W\"], \"passed\": false}, {\"check\": \"black count case 6\", \"actual\": [-3145, \"W\"], \"expected\": [-345, \"W\"], \"passed\": false}, {\"check\": \"black count case 7\", \"actual\": [-3490, \"W\"], \"expected\": [-690, \"W\"], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.714,"exit_code":0,"observations":[{"actual":[-615,"W"],"check":"black count case 0","expected":[-615,"W"],"passed":true},{"actual":[625,"B"],"check":"black count case 1","expected":[625,"B"],"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":[-345,"W"],"check":"black count case 6","expected":[-345,"W"],"passed":true},{"actual":[-690,"W"],"check":"black count case 7","expected":[-690,"W"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"black count case 0\", \"actual\": [-615, \"W\"], \"expected\": [-615, \"W\"], \"passed\": true}, {\"check\": \"black count case 1\", \"actual\": [625, \"B\"], \"expected\": [625, \"B\"], \"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\": [-345, \"W\"], \"expected\": [-345, \"W\"], \"passed\": true}, {\"check\": \"black count case 7\", \"actual\": [-690, \"W\"], \"expected\": [-690, \"W\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}