{"abstract":"Chains whose only liberty touches two of their stones are not reported.","category":"Go territory scoring","checks":8,"contract":"Input a board. Report every chain with exactly one distinct liberty as [colour, lib_row, lib_col, chain_size], sorted ascending.","contract_signature":"x","evaluation_group":"w2-go-territory-scoring-atari-list","failed_approach":"Keeping the list but accepting up to two entries as atari also reports chains with two distinct liberties.","family":"w2-go-territory-scoring-atari-list-shared-liberty-multiplicity","id":"FA-83081","implementations":{"attempt":{"sha256":"023260cc84ce8b6a078eebad2b2527f22aaacd4890ccc73799f35fae9d50fbda","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board = x\n    n = len(board)\n    m = len(board[0])\n    seen = set()\n    out = []\n    for r in range(n):\n        for c in range(m):\n            col = board[r][c]\n            if col == '.' or (r, c) in seen:\n                continue\n            seen.add((r, c))\n            stack = [(r, c)]\n            size = 0\n            libs = []\n            while stack:\n                i, j = stack.pop()\n                size += 1\n                for p, q in ((i, j - 1), (i - 1, j), (i, j + 1), (i + 1, j)):\n                    if 0 <= p < n and 0 <= q < m:\n                        if board[p][q] == '.':\n                            libs.append((p, q))\n                        elif board[p][q] == col and (p, q) not in seen:\n                            seen.add((p, q))\n                            stack.append((p, q))\n            if 1 <= len(libs) <= 2:\n                p, q = min(libs)\n                out.append([col, p, q, size])\n    out.sort()\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['W....', '.....', '.....', '.....', '....B'], []], [['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], [['B', 4, 1, 1], ['W', 2, 0, 1]]], [['BBBB', 'B..B', 'B..B', 'BBBB'], []], [['WWW', 'W.W', 'WWW'], [['W', 1, 1, 8]]], [['B.W', '...', 'W.B'], []], [['.B...', 'B....', '.....', '....W', '...W.'], []], [['BW.', 'BW.', 'BW.'], []], [['..W', '.W.', 'W..'], []]], [[['.....', '.BBB.', '.B.B.', '.BBB.', '.....'], []], [['WB.B', 'B.B.', '.B..', 'B...'], []], [['..W', '.W.', 'W..'], []], [['B....B', '......', '..WW..', '..WW..', '......', 'B....B'], []], [['B.WW', 'W..W', 'BWWW', 'BWW.'], [['B', 0, 1, 1], ['W', 1, 1, 1]]], [['WW.B', '..B.', '....', '..WW'], []], [['WW..', '.BWB', '...B', 'WBW.'], [['B', 2, 1, 1], ['W', 2, 0, 1]]], [['WWWB', 'W.WB', 'WWWB', 'BBBB'], [['W', 1, 1, 8]]]], [[['WW.', 'WWW', 'WBB'], [['W', 0, 2, 6]]], [['B..BB', 'W.B..', '.W.BB'], [['B', 0, 1, 1]]], [['WW..', '.BWB', '...B', 'WBW.'], [['B', 2, 1, 1], ['W', 2, 0, 1]]], [['...', '...', '..B'], []], [['.....', '.....', 'W....', '.....'], []], [['.B..', '....', 'BW.W', '....', 'W..W'], []], [['WBBB', '.BB.', '.WB.', 'B.B.', 'WB..'], [['W', 1, 0, 1]]], [['W.B', 'WWW', 'W.W', '.WB', 'WBW'], [['B', 0, 1, 1], ['W', 3, 0, 1]]]], [[['WWBB', '.W..', 'WBBB', 'WW.B', 'WBWB'], [['W', 3, 2, 1]]], [['W.B', 'WWW', 'W.W', '.WB', 'WBW'], [['B', 0, 1, 1], ['W', 3, 0, 1]]], [['BBB.', 'W...', 'B.WB', 'WWW.', '.B..'], [['B', 2, 1, 1], ['W', 1, 1, 1]]], [['..WB', '.B.B', '..B.'], []], [['.B.', '..B', 'BB.', 'B.W'], []], [['...', '..B', '...'], []], [['B.B', '..B', '.BB', '.B.', '..B'], []], [['BBBW', 'B.BW', 'BBBW', 'WWW.'], [['B', 1, 1, 8], ['W', 3, 3, 3], ['W', 3, 3, 3]]]], [[['B.B', '..B', '.BB', '.B.', '..B'], []], [['WBW.', '..BB', '.WBB'], [['B', 1, 1, 1], ['W', 0, 3, 1], ['W', 1, 0, 1]]], [['.WW..', '..BW.', '.....'], []], [['BW..', '....', '...B', '.W..'], [['B', 1, 0, 1]]], [['.BBWW', 'WW.W.', 'BB.WW', 'B.W..', '.W.BW'], [['W', 3, 4, 1]]], [['BW.', 'BB.', 'WWB'], [['B', 1, 2, 1], ['B', 1, 2, 3], ['W', 0, 2, 1]]], [['WWW', '..B', '...', '.WW'], []], [['BBB', 'B.B', 'BBB'], [['B', 1, 1, 8]]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"atari 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":"946c64f5e07fd04d7b45d676288f582a19b7601003bb8c3768d0d90b9fab3a01","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board = x\n    n = len(board)\n    m = len(board[0])\n    seen = set()\n    out = []\n    for r in range(n):\n        for c in range(m):\n            col = board[r][c]\n            if col == '.' or (r, c) in seen:\n                continue\n            seen.add((r, c))\n            stack = [(r, c)]\n            size = 0\n            libs = []\n            while stack:\n                i, j = stack.pop()\n                size += 1\n                for p, q in ((i, j - 1), (i - 1, j), (i, j + 1), (i + 1, j)):\n                    if 0 <= p < n and 0 <= q < m:\n                        if board[p][q] == '.':\n                            libs.append((p, q))\n                        elif board[p][q] == col and (p, q) not in seen:\n                            seen.add((p, q))\n                            stack.append((p, q))\n            if len(libs) == 1:\n                p, q = min(libs)\n                out.append([col, p, q, size])\n    out.sort()\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['W....', '.....', '.....', '.....', '....B'], []], [['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], [['B', 4, 1, 1], ['W', 2, 0, 1]]], [['BBBB', 'B..B', 'B..B', 'BBBB'], []], [['WWW', 'W.W', 'WWW'], [['W', 1, 1, 8]]], [['B.W', '...', 'W.B'], []], [['.B...', 'B....', '.....', '....W', '...W.'], []], [['BW.', 'BW.', 'BW.'], []], [['..W', '.W.', 'W..'], []]], [[['.....', '.BBB.', '.B.B.', '.BBB.', '.....'], []], [['WB.B', 'B.B.', '.B..', 'B...'], []], [['..W', '.W.', 'W..'], []], [['B....B', '......', '..WW..', '..WW..', '......', 'B....B'], []], [['B.WW', 'W..W', 'BWWW', 'BWW.'], [['B', 0, 1, 1], ['W', 1, 1, 1]]], [['WW.B', '..B.', '....', '..WW'], []], [['WW..', '.BWB', '...B', 'WBW.'], [['B', 2, 1, 1], ['W', 2, 0, 1]]], [['WWWB', 'W.WB', 'WWWB', 'BBBB'], [['W', 1, 1, 8]]]], [[['WW.', 'WWW', 'WBB'], [['W', 0, 2, 6]]], [['B..BB', 'W.B..', '.W.BB'], [['B', 0, 1, 1]]], [['WW..', '.BWB', '...B', 'WBW.'], [['B', 2, 1, 1], ['W', 2, 0, 1]]], [['...', '...', '..B'], []], [['.....', '.....', 'W....', '.....'], []], [['.B..', '....', 'BW.W', '....', 'W..W'], []], [['WBBB', '.BB.', '.WB.', 'B.B.', 'WB..'], [['W', 1, 0, 1]]], [['W.B', 'WWW', 'W.W', '.WB', 'WBW'], [['B', 0, 1, 1], ['W', 3, 0, 1]]]], [[['WWBB', '.W..', 'WBBB', 'WW.B', 'WBWB'], [['W', 3, 2, 1]]], [['W.B', 'WWW', 'W.W', '.WB', 'WBW'], [['B', 0, 1, 1], ['W', 3, 0, 1]]], [['BBB.', 'W...', 'B.WB', 'WWW.', '.B..'], [['B', 2, 1, 1], ['W', 1, 1, 1]]], [['..WB', '.B.B', '..B.'], []], [['.B.', '..B', 'BB.', 'B.W'], []], [['...', '..B', '...'], []], [['B.B', '..B', '.BB', '.B.', '..B'], []], [['BBBW', 'B.BW', 'BBBW', 'WWW.'], [['B', 1, 1, 8], ['W', 3, 3, 3], ['W', 3, 3, 3]]]], [[['B.B', '..B', '.BB', '.B.', '..B'], []], [['WBW.', '..BB', '.WBB'], [['B', 1, 1, 1], ['W', 0, 3, 1], ['W', 1, 0, 1]]], [['.WW..', '..BW.', '.....'], []], [['BW..', '....', '...B', '.W..'], [['B', 1, 0, 1]]], [['.BBWW', 'WW.W.', 'BB.WW', 'B.W..', '.W.BW'], [['W', 3, 4, 1]]], [['BW.', 'BB.', 'WWB'], [['B', 1, 2, 1], ['B', 1, 2, 3], ['W', 0, 2, 1]]], [['WWW', '..B', '...', '.WW'], []], [['BBB', 'B.B', 'BBB'], [['B', 1, 1, 8]]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"atari 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-atari-list-shared-liberty-multiplicity","generated_at":"2026-09-29T14:50:18.160802+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.","root_cause":"Liberties are collected in a list, so a point adjacent to two chain stones counts twice.","sha256":"566d78038c4c14b2a3715410dbd808cf472922921e85fca1aa5bd79d80dc731d","title":"A liberty shared by two stones of a chain hides the atari · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":48.427,"exit_code":1,"observations":[{"actual":[["B",3,4,1],["W",0,1,1]],"check":"atari case 0","expected":[],"passed":false},{"actual":[["B",2,3,1],["B",3,2,1],["B",4,1,1],["W",0,2,1],["W",1,1,1],["W",2,0,1]],"check":"atari case 1","expected":[["B",4,1,1],["W",2,0,1]],"passed":false},{"actual":[],"check":"atari case 2","expected":[],"passed":true},{"actual":[],"check":"atari case 3","expected":[["W",1,1,8]],"passed":false},{"actual":[["B",0,1,1],["B",1,2,1],["W",0,1,1],["W",1,0,1]],"check":"atari case 4","expected":[],"passed":false},{"actual":[],"check":"atari case 5","expected":[],"passed":true},{"actual":[],"check":"atari case 6","expected":[],"passed":true},{"actual":[["W",0,1,1],["W",1,0,1]],"check":"atari case 7","expected":[],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"atari case 0\", \"actual\": [[\"B\", 3, 4, 1], [\"W\", 0, 1, 1]], \"expected\": [], \"passed\": false}, {\"check\": \"atari case 1\", \"actual\": [[\"B\", 2, 3, 1], [\"B\", 3, 2, 1], [\"B\", 4, 1, 1], [\"W\", 0, 2, 1], [\"W\", 1, 1, 1], [\"W\", 2, 0, 1]], \"expected\": [[\"B\", 4, 1, 1], [\"W\", 2, 0, 1]], \"passed\": false}, {\"check\": \"atari case 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"atari case 3\", \"actual\": [], \"expected\": [[\"W\", 1, 1, 8]], \"passed\": false}, {\"check\": \"atari case 4\", \"actual\": [[\"B\", 0, 1, 1], [\"B\", 1, 2, 1], [\"W\", 0, 1, 1], [\"W\", 1, 0, 1]], \"expected\": [], \"passed\": false}, {\"check\": \"atari case 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"atari case 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"atari case 7\", \"actual\": [[\"W\", 0, 1, 1], [\"W\", 1, 0, 1]], \"expected\": [], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":58.339,"exit_code":1,"observations":[{"actual":[],"check":"atari case 0","expected":[],"passed":true},{"actual":[["B",4,1,1],["W",2,0,1]],"check":"atari case 1","expected":[["B",4,1,1],["W",2,0,1]],"passed":true},{"actual":[],"check":"atari case 2","expected":[],"passed":true},{"actual":[],"check":"atari case 3","expected":[["W",1,1,8]],"passed":false},{"actual":[],"check":"atari case 4","expected":[],"passed":true},{"actual":[],"check":"atari case 5","expected":[],"passed":true},{"actual":[],"check":"atari case 6","expected":[],"passed":true},{"actual":[],"check":"atari case 7","expected":[],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"atari case 0\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"atari case 1\", \"actual\": [[\"B\", 4, 1, 1], [\"W\", 2, 0, 1]], \"expected\": [[\"B\", 4, 1, 1], [\"W\", 2, 0, 1]], \"passed\": true}, {\"check\": \"atari case 2\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"atari case 3\", \"actual\": [], \"expected\": [[\"W\", 1, 1, 8]], \"passed\": false}, {\"check\": \"atari case 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"atari case 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"atari case 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"atari case 7\", \"actual\": [], \"expected\": [], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}