FAILURE MAP
← Case archive

FA-82986 / Go territory scoring / Open access

Column one past the board edge or row zero is accepted · case 01

Vertices outside the board are converted to coordinates.

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

ROOT CAUSE

The column bound uses > instead of >=.

VERIFIED REPAIR

Reject col >= size and rows outside 1..size.

Unsuccessful approach: Dropping the num < 1 test turns row 0 into a row index equal to size.

Case contract

Input [size, text]. Case-insensitive, surrounding blanks ignored; "pass" -> "pass". Column letters A..Z skipping I; row numbers count from 1 at the bottom. Return [row_from_top, col] 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
    t = text.strip().upper()
    if t == 'PASS':
        return 'pass'
    if len(t) < 2 or not t[1:].isdigit():
        return 'invalid'
    letters = 'ABCDEFGHJKLMNOPQRSTUVWXYZ'
    if t[0] not in letters:
        return 'invalid'
    col = letters.index(t[0])
    num = int(t[1:])
    if col > size or num < 1 or num > size:
        return 'invalid'
    return [size - num, col]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[9, 'H8'], [1, 7]], [[9, 'pass'], 'pass'], [[9, 'PASS'], 'pass'], [[9, ' Pass'], 'pass'], [[9, 'Z1'], 'invalid'], [[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[19, 'A0'], 'invalid']], [[[9, 'A10'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'O3'], 'invalid'], [[9, 'Q16'], 'invalid'], [[9, 'X'], 'invalid'], [[9, ''], 'invalid'], [[13, 'O3'], 'invalid'], [[25, 'A0'], 'invalid']], [[[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'N13'], 'invalid'], [[9, 'M9'], 'invalid'], [[13, 'D4'], [9, 3]], [[13, 'd4'], [9, 3]], [[13, ' D4 '], [9, 3]], [[13, 'A1'], [12, 0]]], [[[13, 'A1'], [12, 0]], [[13, 'T19'], 'invalid'], [[13, 'J10'], [3, 8]], [[13, 'I5'], 'invalid'], [[13, 'H8'], [5, 7]], [[13, 'pass'], 'pass'], [[13, 'A0'], 'invalid'], [[13, 'O3'], 'invalid']], [[[9, 'K1'], 'invalid'], [[13, 'Z1'], 'invalid'], [[13, 'A0'], 'invalid'], [[13, 'A13'], [0, 0]], [[13, 'A14'], 'invalid'], [[13, 'K1'], [12, 9]], [[13, 'O3'], 'invalid'], [[19, 'A0'], 'invalid']]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("vertex 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
vertex case 0[1, 7][1, 7]Passed
vertex case 1passpassPassed
vertex case 2passpassPassed
vertex case 3passpassPassed
vertex case 4invalidinvalidPassed
vertex case 5invalidinvalidPassed
vertex case 6[8, 9]invalidFailed
vertex case 7invalidinvalidPassed

SHA-256 / 17ecb1d002f42834f666a57be5056d99547c819319d989c691926c8297117dc4

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
    t = text.strip().upper()
    if t == 'PASS':
        return 'pass'
    if len(t) < 2 or not t[1:].isdigit():
        return 'invalid'
    letters = 'ABCDEFGHJKLMNOPQRSTUVWXYZ'
    if t[0] not in letters:
        return 'invalid'
    col = letters.index(t[0])
    num = int(t[1:])
    if col >= size or num > size:
        return 'invalid'
    return [size - num, col]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[9, 'H8'], [1, 7]], [[9, 'pass'], 'pass'], [[9, 'PASS'], 'pass'], [[9, ' Pass'], 'pass'], [[9, 'Z1'], 'invalid'], [[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[19, 'A0'], 'invalid']], [[[9, 'A10'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'O3'], 'invalid'], [[9, 'Q16'], 'invalid'], [[9, 'X'], 'invalid'], [[9, ''], 'invalid'], [[13, 'O3'], 'invalid'], [[25, 'A0'], 'invalid']], [[[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'N13'], 'invalid'], [[9, 'M9'], 'invalid'], [[13, 'D4'], [9, 3]], [[13, 'd4'], [9, 3]], [[13, ' D4 '], [9, 3]], [[13, 'A1'], [12, 0]]], [[[13, 'A1'], [12, 0]], [[13, 'T19'], 'invalid'], [[13, 'J10'], [3, 8]], [[13, 'I5'], 'invalid'], [[13, 'H8'], [5, 7]], [[13, 'pass'], 'pass'], [[13, 'A0'], 'invalid'], [[13, 'O3'], 'invalid']], [[[9, 'K1'], 'invalid'], [[13, 'Z1'], 'invalid'], [[13, 'A0'], 'invalid'], [[13, 'A13'], [0, 0]], [[13, 'A14'], 'invalid'], [[13, 'K1'], [12, 9]], [[13, 'O3'], 'invalid'], [[19, 'A0'], 'invalid']]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("vertex 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
vertex case 0[1, 7][1, 7]Passed
vertex case 1passpassPassed
vertex case 2passpassPassed
vertex case 3passpassPassed
vertex case 4invalidinvalidPassed
vertex case 5[9, 0]invalidFailed
vertex case 6invalidinvalidPassed
vertex case 7[19, 0]invalidFailed

SHA-256 / 22bb2d770680d41c0b9ec3c4d373b6ac06bedb1ab23962c67341870a5fd98921

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
    t = text.strip().upper()
    if t == 'PASS':
        return 'pass'
    if len(t) < 2 or not t[1:].isdigit():
        return 'invalid'
    letters = 'ABCDEFGHJKLMNOPQRSTUVWXYZ'
    if t[0] not in letters:
        return 'invalid'
    col = letters.index(t[0])
    num = int(t[1:])
    if col >= size or num < 1 or num > size:
        return 'invalid'
    return [size - num, col]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[9, 'H8'], [1, 7]], [[9, 'pass'], 'pass'], [[9, 'PASS'], 'pass'], [[9, ' Pass'], 'pass'], [[9, 'Z1'], 'invalid'], [[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[19, 'A0'], 'invalid']], [[[9, 'A10'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'O3'], 'invalid'], [[9, 'Q16'], 'invalid'], [[9, 'X'], 'invalid'], [[9, ''], 'invalid'], [[13, 'O3'], 'invalid'], [[25, 'A0'], 'invalid']], [[[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'N13'], 'invalid'], [[9, 'M9'], 'invalid'], [[13, 'D4'], [9, 3]], [[13, 'd4'], [9, 3]], [[13, ' D4 '], [9, 3]], [[13, 'A1'], [12, 0]]], [[[13, 'A1'], [12, 0]], [[13, 'T19'], 'invalid'], [[13, 'J10'], [3, 8]], [[13, 'I5'], 'invalid'], [[13, 'H8'], [5, 7]], [[13, 'pass'], 'pass'], [[13, 'A0'], 'invalid'], [[13, 'O3'], 'invalid']], [[[9, 'K1'], 'invalid'], [[13, 'Z1'], 'invalid'], [[13, 'A0'], 'invalid'], [[13, 'A13'], [0, 0]], [[13, 'A14'], 'invalid'], [[13, 'K1'], [12, 9]], [[13, 'O3'], 'invalid'], [[19, 'A0'], 'invalid']]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("vertex 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
vertex case 0[1, 7][1, 7]Passed
vertex case 1passpassPassed
vertex case 2passpassPassed
vertex case 3passpassPassed
vertex case 4invalidinvalidPassed
vertex case 5invalidinvalidPassed
vertex case 6invalidinvalidPassed
vertex case 7invalidinvalidPassed

SHA-256 / f0e8e0c9ed5b3ba5a36297acab0d030ce6420f20ed5629be7f5a433c5c22d46e

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.229138+00:00.

Case digest / 975e2d9d4b96b4e6d8b961b2ac01ff3515183848d45c3b0f9678119f57ce631e