FAILURE MAP
← Case archive

FA-83001 / Go territory scoring / Open access

Upper-case or out-of-range letters decode to negative coordinates · case 01

Points like "Aa" produce negative rows or columns.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The range check omits the lower bound.

VERIFIED REPAIR

Require 0 <= col < size and 0 <= row < size.

Unsuccessful approach: Using <= size admits a coordinate one past the board edge.

Case 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".

Why this case matters

Go servers and scoring tools compute this value automatically; a wrong answer changes a game result.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    size, text = x
    if text == '':
        return 'pass'
    if text == 'tt' and size <= 19:
        return 'pass'
    if len(text) != 2:
        return 'invalid'
    col = ord(text[0]) - ord('a')
    row = ord(text[1]) - ord('a')
    if not (col < size and row < size):
        return 'invalid'
    return [row, col]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[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]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("sgf point case %d" % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
sgf point case 0invalidinvalidPassed
sgf point case 1[0, -32]invalidFailed
sgf point case 2[-32, 0]invalidFailed
sgf point case 3invalidinvalidPassed
sgf point case 4invalidinvalidPassed
sgf point case 5[0, 8][0, 8]Passed
sgf point case 6[8, 0][8, 0]Passed
sgf point case 7invalidinvalidPassed

SHA-256 / 813b069a608a55ccdee057e022bfb64d48ef6ba0809e345ca0060cf45d3437fd

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    size, text = x
    if text == '':
        return 'pass'
    if text == 'tt' and size <= 19:
        return 'pass'
    if len(text) != 2:
        return 'invalid'
    col = ord(text[0]) - ord('a')
    row = ord(text[1]) - ord('a')
    if not (0 <= col <= size and 0 <= row <= size):
        return 'invalid'
    return [row, col]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[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]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("sgf point case %d" % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
sgf point case 0[9, 9]invalidFailed
sgf point case 1invalidinvalidPassed
sgf point case 2invalidinvalidPassed
sgf point case 3invalidinvalidPassed
sgf point case 4invalidinvalidPassed
sgf point case 5[0, 8][0, 8]Passed
sgf point case 6[8, 0][8, 0]Passed
sgf point case 7[0, 21]invalidFailed

SHA-256 / 4dd52f8393fa88ec7907d46dbf9a3d1de644604b30ed51f745bd29c4071b8227

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    size, text = x
    if text == '':
        return 'pass'
    if text == 'tt' and size <= 19:
        return 'pass'
    if len(text) != 2:
        return 'invalid'
    col = ord(text[0]) - ord('a')
    row = ord(text[1]) - ord('a')
    if not (0 <= col < size and 0 <= row < size):
        return 'invalid'
    return [row, col]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[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]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("sgf point case %d" % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
sgf point case 0invalidinvalidPassed
sgf point case 1invalidinvalidPassed
sgf point case 2invalidinvalidPassed
sgf point case 3invalidinvalidPassed
sgf point case 4invalidinvalidPassed
sgf point case 5[0, 8][0, 8]Passed
sgf point case 6[8, 0][8, 0]Passed
sgf point case 7invalidinvalidPassed

SHA-256 / 7e22ff78ac8de477fc51352892c22bcf6aab6f14c0607b12b5c3f8ff6d44edab

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:50:17.273437+00:00.

Case digest / a84fd2a338ee2b712b4e74bc8e6f208348f2b2c5567ea461df05e05ffb45b159