{"abstract":"Points like \"Aa\" produce negative rows or columns.","category":"Go territory scoring","checks":8,"contract":"Input [size, text]. \"\" is a pass; \"tt\" is also a pass on boards up to 19x19. Otherwise exactly two lower-case letters: first = column, second = row, both from the top-left. Return [row, col], \"pass\" or \"invalid\".","evaluation_group":"w2-go-territory-scoring-sgf-point","failed_approach":"Using <= size admits a coordinate one past the board edge.","family":"w2-go-territory-scoring-sgf-point-lower-bound-of-letters","id":"FA-83001","implementations":{"attempt":{"sha256":"4dd52f8393fa88ec7907d46dbf9a3d1de644604b30ed51f745bd29c4071b8227","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    size, text = x\n    if text == '':\n        return 'pass'\n    if text == 'tt' and size <= 19:\n        return 'pass'\n    if len(text) != 2:\n        return 'invalid'\n    col = ord(text[0]) - ord('a')\n    row = ord(text[1]) - ord('a')\n    if not (0 <= col <= size and 0 <= row <= size):\n        return 'invalid'\n    return [row, col]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[9, 'jj'], 'invalid'], [[9, 'Aa'], 'invalid'], [[9, 'aA'], 'invalid'], [[9, 'u'], 'invalid'], [[9, 'abc'], 'invalid'], [[9, 'ia'], [0, 8]], [[9, 'ai'], [8, 0]], [[21, 'va'], 'invalid']], [[[9, 'ta'], 'invalid'], [[9, 'at'], 'invalid'], [[9, 'pd'], 'invalid'], [[9, 'dp'], 'invalid'], [[9, 'ia'], [0, 8]], [[9, 'ja'], 'invalid'], [[13, 'aA'], 'invalid'], [[19, 'ta'], 'invalid']], [[[9, 'jj'], 'invalid'], [[13, 'aa'], [0, 0]], [[13, 'ss'], 'invalid'], [[13, 'tt'], 'pass'], [[13, ''], 'pass'], [[13, 'ab'], [1, 0]], [[13, 'ba'], [0, 1]], [[21, 'Aa'], 'invalid']], [[[13, 'jj'], [9, 9]], [[13, 'Aa'], 'invalid'], [[13, 'aA'], 'invalid'], [[13, 'u'], 'invalid'], [[13, 'abc'], 'invalid'], [[13, 'ia'], [0, 8]], [[19, 'ta'], 'invalid'], [[25, 'aA'], 'invalid']], [[[13, 'Aa'], 'invalid'], [[13, 'at'], 'invalid'], [[13, 'pd'], 'invalid'], [[13, 'dp'], 'invalid'], [[13, 'ma'], [0, 12]], [[13, 'na'], 'invalid'], [[13, 'am'], [12, 0]], [[19, 'dd'], [3, 3]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"sgf point 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":"813b069a608a55ccdee057e022bfb64d48ef6ba0809e345ca0060cf45d3437fd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    size, text = x\n    if text == '':\n        return 'pass'\n    if text == 'tt' and size <= 19:\n        return 'pass'\n    if len(text) != 2:\n        return 'invalid'\n    col = ord(text[0]) - ord('a')\n    row = ord(text[1]) - ord('a')\n    if not (col < size and row < size):\n        return 'invalid'\n    return [row, col]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[9, 'jj'], 'invalid'], [[9, 'Aa'], 'invalid'], [[9, 'aA'], 'invalid'], [[9, 'u'], 'invalid'], [[9, 'abc'], 'invalid'], [[9, 'ia'], [0, 8]], [[9, 'ai'], [8, 0]], [[21, 'va'], 'invalid']], [[[9, 'ta'], 'invalid'], [[9, 'at'], 'invalid'], [[9, 'pd'], 'invalid'], [[9, 'dp'], 'invalid'], [[9, 'ia'], [0, 8]], [[9, 'ja'], 'invalid'], [[13, 'aA'], 'invalid'], [[19, 'ta'], 'invalid']], [[[9, 'jj'], 'invalid'], [[13, 'aa'], [0, 0]], [[13, 'ss'], 'invalid'], [[13, 'tt'], 'pass'], [[13, ''], 'pass'], [[13, 'ab'], [1, 0]], [[13, 'ba'], [0, 1]], [[21, 'Aa'], 'invalid']], [[[13, 'jj'], [9, 9]], [[13, 'Aa'], 'invalid'], [[13, 'aA'], 'invalid'], [[13, 'u'], 'invalid'], [[13, 'abc'], 'invalid'], [[13, 'ia'], [0, 8]], [[19, 'ta'], 'invalid'], [[25, 'aA'], 'invalid']], [[[13, 'Aa'], 'invalid'], [[13, 'at'], 'invalid'], [[13, 'pd'], 'invalid'], [[13, 'dp'], 'invalid'], [[13, 'ma'], [0, 12]], [[13, 'na'], 'invalid'], [[13, 'am'], [12, 0]], [[19, 'dd'], [3, 3]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"sgf point 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":"7e22ff78ac8de477fc51352892c22bcf6aab6f14c0607b12b5c3f8ff6d44edab","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    size, text = x\n    if text == '':\n        return 'pass'\n    if text == 'tt' and size <= 19:\n        return 'pass'\n    if len(text) != 2:\n        return 'invalid'\n    col = ord(text[0]) - ord('a')\n    row = ord(text[1]) - ord('a')\n    if not (0 <= col < size and 0 <= row < size):\n        return 'invalid'\n    return [row, col]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[9, 'jj'], 'invalid'], [[9, 'Aa'], 'invalid'], [[9, 'aA'], 'invalid'], [[9, 'u'], 'invalid'], [[9, 'abc'], 'invalid'], [[9, 'ia'], [0, 8]], [[9, 'ai'], [8, 0]], [[21, 'va'], 'invalid']], [[[9, 'ta'], 'invalid'], [[9, 'at'], 'invalid'], [[9, 'pd'], 'invalid'], [[9, 'dp'], 'invalid'], [[9, 'ia'], [0, 8]], [[9, 'ja'], 'invalid'], [[13, 'aA'], 'invalid'], [[19, 'ta'], 'invalid']], [[[9, 'jj'], 'invalid'], [[13, 'aa'], [0, 0]], [[13, 'ss'], 'invalid'], [[13, 'tt'], 'pass'], [[13, ''], 'pass'], [[13, 'ab'], [1, 0]], [[13, 'ba'], [0, 1]], [[21, 'Aa'], 'invalid']], [[[13, 'jj'], [9, 9]], [[13, 'Aa'], 'invalid'], [[13, 'aA'], 'invalid'], [[13, 'u'], 'invalid'], [[13, 'abc'], 'invalid'], [[13, 'ia'], [0, 8]], [[19, 'ta'], 'invalid'], [[25, 'aA'], 'invalid']], [[[13, 'Aa'], 'invalid'], [[13, 'at'], 'invalid'], [[13, 'pd'], 'invalid'], [[13, 'dp'], 'invalid'], [[13, 'ma'], [0, 12]], [[13, 'na'], 'invalid'], [[13, 'am'], [12, 0]], [[19, 'dd'], [3, 3]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"sgf point 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-sgf-point-lower-bound-of-letters","generated_at":"2026-09-29T14:50:17.273437+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":"Require 0 <= col < size and 0 <= row < size.","root_cause":"The range check omits the lower bound.","sha256":"a84fd2a338ee2b712b4e74bc8e6f208348f2b2c5567ea461df05e05ffb45b159","title":"Upper-case or out-of-range letters decode to negative coordinates · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.352,"exit_code":1,"observations":[{"actual":[9,9],"check":"sgf point case 0","expected":"invalid","passed":false},{"actual":"invalid","check":"sgf point case 1","expected":"invalid","passed":true},{"actual":"invalid","check":"sgf point case 2","expected":"invalid","passed":true},{"actual":"invalid","check":"sgf point case 3","expected":"invalid","passed":true},{"actual":"invalid","check":"sgf point case 4","expected":"invalid","passed":true},{"actual":[0,8],"check":"sgf point case 5","expected":[0,8],"passed":true},{"actual":[8,0],"check":"sgf point case 6","expected":[8,0],"passed":true},{"actual":[0,21],"check":"sgf point case 7","expected":"invalid","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"sgf point case 0\", \"actual\": [9, 9], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"sgf point case 1\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 2\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 4\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 5\", \"actual\": [0, 8], \"expected\": [0, 8], \"passed\": true}, {\"check\": \"sgf point case 6\", \"actual\": [8, 0], \"expected\": [8, 0], \"passed\": true}, {\"check\": \"sgf point case 7\", \"actual\": [0, 21], \"expected\": \"invalid\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.303,"exit_code":1,"observations":[{"actual":"invalid","check":"sgf point case 0","expected":"invalid","passed":true},{"actual":[0,-32],"check":"sgf point case 1","expected":"invalid","passed":false},{"actual":[-32,0],"check":"sgf point case 2","expected":"invalid","passed":false},{"actual":"invalid","check":"sgf point case 3","expected":"invalid","passed":true},{"actual":"invalid","check":"sgf point case 4","expected":"invalid","passed":true},{"actual":[0,8],"check":"sgf point case 5","expected":[0,8],"passed":true},{"actual":[8,0],"check":"sgf point case 6","expected":[8,0],"passed":true},{"actual":"invalid","check":"sgf point case 7","expected":"invalid","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"sgf point case 0\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 1\", \"actual\": [0, -32], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"sgf point case 2\", \"actual\": [-32, 0], \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"sgf point case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 4\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 5\", \"actual\": [0, 8], \"expected\": [0, 8], \"passed\": true}, {\"check\": \"sgf point case 6\", \"actual\": [8, 0], \"expected\": [8, 0], \"passed\": true}, {\"check\": \"sgf point case 7\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.988,"exit_code":0,"observations":[{"actual":"invalid","check":"sgf point case 0","expected":"invalid","passed":true},{"actual":"invalid","check":"sgf point case 1","expected":"invalid","passed":true},{"actual":"invalid","check":"sgf point case 2","expected":"invalid","passed":true},{"actual":"invalid","check":"sgf point case 3","expected":"invalid","passed":true},{"actual":"invalid","check":"sgf point case 4","expected":"invalid","passed":true},{"actual":[0,8],"check":"sgf point case 5","expected":[0,8],"passed":true},{"actual":[8,0],"check":"sgf point case 6","expected":[8,0],"passed":true},{"actual":"invalid","check":"sgf point case 7","expected":"invalid","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"sgf point case 0\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 1\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 2\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 4\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"sgf point case 5\", \"actual\": [0, 8], \"expected\": [0, 8], \"passed\": true}, {\"check\": \"sgf point case 6\", \"actual\": [8, 0], \"expected\": [8, 0], \"passed\": true}, {\"check\": \"sgf point case 7\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}