FAILURE MAP
← Case archive

FA-82931 / Go territory scoring / Open access

Superko reports the most recent repeat instead of the first · case 01

The reported conflicting move number points at a later repetition.

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

ROOT CAUSE

History is scanned newest first.

VERIFIED REPAIR

Scan history oldest first and return the first match.

Unsuccessful approach: Enumerating the reversed history returns indices counted from the end of the game.

Case contract

Input [history, candidate_board, player_to_move_after, mode]; history is a list of [board, player_to_move]. Positional mode forbids any earlier board equal to the candidate; situational mode additionally requires the same player to move. Return the earliest matching history index or "legal".

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):
    history, cand, mover, mode = x
    key = tuple(cand)
    for idx, (past, to_move) in reversed(list(enumerate(history))):
        if tuple(past) != key:
            continue
        if mode == 'situational' and to_move != mover:
            continue
        return idx
    return 'legal'
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[['..W', '..W', '..W'], 'B'], [['..W', '..W', '..W'], 'B'], [['..B', 'BBB', '..B'], 'B']], ['..W', '..W', '..W'], 'B', 'positional'], 0], [[[[['B.', '..'], 'W'], [['.B', 'WB'], 'W'], [['WW', 'BW'], 'W']], ['.B', 'WB'], 'B', 'situational'], 'legal'], [[[[['.W', 'W.'], 'W'], [['BW', 'W.'], 'B'], [['.B', '..'], 'B'], [['.B', '.B'], 'B'], [['B.', 'WB'], 'W'], [['.B', '..'], 'W']], ['.B', '..'], 'W', 'situational'], 5], [[[[['W.', '.B'], 'B'], [['WB', 'WB'], 'W'], [['WB', 'WB'], 'W'], [['.B', 'BB'], 'B']], ['WB', 'WB'], 'W', 'situational'], 1], [[[[['BW', 'W.'], 'B'], [['W.', 'BB'], 'B']], ['BW', 'W.'], 'B', 'positional'], 0], [[[[['..', 'W.'], 'B'], [['.W', '..'], 'B'], [['B.', 'BW'], 'W']], ['..', 'W.'], 'B', 'positional'], 0], [[[[['...', '...', '.B.'], 'B'], [['.B.', '.BW', 'B.W'], 'B'], [['BW.', 'W.W', '.W.'], 'B']], ['B.W', '..B', 'W.W'], 'W', 'positional'], 'legal'], [[[[['.W', 'WB'], 'B'], [['.W', '.W'], 'W'], [['.W', '.W'], 'B'], [['BB', '.B'], 'B'], [['.W', '.W'], 'B'], [['..', '..'], 'B']], ['.W', '.W'], 'B', 'situational'], 2]], [[[[[['.W', 'WB'], 'B'], [['.W', '.W'], 'W'], [['.W', '.W'], 'B'], [['BB', '.B'], 'B'], [['.W', '.W'], 'B'], [['..', '..'], 'B']], ['.W', '.W'], 'B', 'situational'], 2], [[[[['.BW', '.BB', '..B'], 'B']], ['.BW', '.BB', '..B'], 'W', 'situational'], 'legal'], [[[[['B.', 'W.'], 'W'], [['..', '.B'], 'B'], [['W.', 'BW'], 'B'], [['BB', 'B.'], 'B']], ['..', '.B'], 'B', 'positional'], 1], [[[[['WB.', 'WB.', '.BB'], 'B'], [['BW.', 'B..', '.WB'], 'B'], [['..B', '..W', '...'], 'W'], [['..B', '..B', 'W..'], 'W']], ['BW.', 'B..', '.WB'], 'W', 'situational'], 'legal'], [[[[['...', 'BW.', 'BBW'], 'B'], [['.W.', '..B', 'BBW'], 'B'], [['W.B', '.W.', '...'], 'B'], [['.WB', '.BW', '..W'], 'W'], [['...', 'W.B', 'W.B'], 'B']], ['.WW', '.W.', 'BW.'], 'B', 'positional'], 'legal'], [[[[['WW', 'W.'], 'W'], [['.W', '.W'], 'W'], [['..', 'B.'], 'B'], [['.W', '.W'], 'B'], [['W.', '..'], 'W'], [['..', 'WB'], 'W']], ['.W', '.W'], 'W', 'situational'], 1], [[[[['B.B', '.W.', 'WWB'], 'B'], [['..B', 'WB.', '.B.'], 'W'], [['.B.', 'W..', '.W.'], 'B'], [['.WW', '..B', 'BWW'], 'B'], [['.B.', '.B.', 'W.W'], 'B'], [['..B', 'WB.', '.B.'], 'W'], [['B.B', '.B.', '.BB'], 'B']], ['..B', 'WB.', '.B.'], 'W', 'situational'], 1], [[[[['.B', 'B.'], 'B'], [['.B', 'B.'], 'B'], [['BW', '..'], 'B'], [['.B', 'B.'], 'B'], [['.B', 'BB'], 'B']], ['.B', 'B.'], 'B', 'situational'], 0]], [[[[[['B.B', 'B.B', '.BW'], 'W']], ['B.B', 'B.B', '.BW'], 'W', 'situational'], 0], [[[[['WW.', '...', '..B'], 'B']], ['WW.', '...', '..B'], 'W', 'positional'], 0], [[[[['.BW', '...', '.W.'], 'B'], [['W..', '.B.', 'BBB'], 'B'], [['WWW', 'WBB', '.WW'], 'B'], [['BW.', '.W.', '.B.'], 'W'], [['BBW', 'WW.', '...'], 'B'], [['WWW', 'WBB', '.WW'], 'B'], [['B..', '...', 'B.B'], 'B']], ['WWW', 'WBB', '.WW'], 'B', 'positional'], 2], [[[[['..W', '.BW', 'W.W'], 'W'], [['W..', '.W.', '.W.'], 'W'], [['WWW', 'W.W', '...'], 'B'], [['WBB', 'WWB', 'B..'], 'W'], [['BB.', '.WB', '..B'], 'W'], [['W.W', 'B.B', '.B.'], 'B']], ['BBW', 'B..', 'B.W'], 'W', 'situational'], 'legal'], [[[[['B.B', 'WB.', '...'], 'W'], [['.W.', 'BWW', 'W..'], 'B']], ['B.B', 'WB.', '...'], 'B', 'situational'], 'legal'], [[[[['..', 'B.'], 'W'], [['.B', 'WB'], 'B'], [['..', '.W'], 'B'], [['..', '.W'], 'W'], [['.B', 'B.'], 'B']], ['..', '.W'], 'W', 'situational'], 3], [[[[['.B', 'B.'], 'B'], [['.B', 'B.'], 'B'], [['BW', '..'], 'B'], [['.B', 'B.'], 'B'], [['.B', 'BB'], 'B']], ['.B', 'B.'], 'B', 'situational'], 0], [[[[['..W', 'BBW', '.W.'], 'B'], [['..B', 'WBW', 'BW.'], 'W'], [['.B.', '..B', 'B..'], 'W']], ['..W', 'BBW', '.W.'], 'B', 'situational'], 0]], [[[[[['W.B', 'B..', '.BB'], 'W'], [['.BB', 'WB.', 'BB.'], 'W']], ['.BB', 'WB.', 'BB.'], 'B', 'situational'], 'legal'], [[[[['W.', '..'], 'B'], [['..', 'B.'], 'W'], [['.B', '.B'], 'B'], [['B.', 'BW'], 'W'], [['BB', '..'], 'W']], ['..', 'WW'], 'B', 'situational'], 'legal'], [[[[['WWW', '..B', 'B..'], 'B'], [['..W', 'W.B', '.B.'], 'B'], [['..B', '...', '.B.'], 'W']], ['..W', '..W', 'B.W'], 'W', 'positional'], 'legal'], [[[[['.B', 'B.'], 'B'], [['.B', 'B.'], 'B'], [['BW', '..'], 'B'], [['.B', 'B.'], 'B'], [['.B', 'BB'], 'B']], ['.B', 'B.'], 'B', 'situational'], 0], [[[[['W.', '.W'], 'B'], [['B.', '..'], 'B'], [['WB', '..'], 'B'], [['BW', '.W'], 'W']], ['BW', '.W'], 'B', 'positional'], 3], [[[[['B.W', 'W.W', 'B.W'], 'W'], [['BWB', '.BW', 'B..'], 'W'], [['..W', 'B..', 'B..'], 'B'], [['WWW', 'B.B', 'WW.'], 'W'], [['.BB', '.WB', '..B'], 'B']], ['BBB', '.W.', 'W.W'], 'B', 'positional'], 'legal'], [[[[['.W', '.B'], 'B'], [['.B', '..'], 'W'], [['.B', '..'], 'W'], [['BB', '.B'], 'B']], ['.B', '..'], 'W', 'positional'], 1], [[[[['B.', '..'], 'B'], [['.W', 'B.'], 'B'], [['WW', 'BB'], 'B'], [['..', '..'], 'B'], [['.W', '.W'], 'W'], [['WW', 'BB'], 'W'], [['..', '..'], 'B']], ['WW', 'BB'], 'W', 'positional'], 2]], [[[[[['W.B', 'WBW', '..W'], 'W'], [['B.B', 'BB.', 'WBW'], 'B'], [['.BW', '.W.', 'W..'], 'B'], [['BW.', '..W', '.WB'], 'B'], [['.WW', '..B', 'WWB'], 'W'], [['..W', '...', 'W.B'], 'W'], [['.WW', '..B', 'WWB'], 'W'], [['..B', 'BB.', 'BBB'], 'B']], ['.WW', '..B', 'WWB'], 'W', 'positional'], 4], [[[[['...', '...', '...'], 'W'], [['...', '...', '...'], 'B'], [['BBB', '...', '.B.'], 'B']], ['...', '...', '...'], 'B', 'positional'], 0], [[[[['.B', 'B.'], 'W'], [['B.', 'W.'], 'W']], ['.B', 'B.'], 'B', 'situational'], 'legal'], [[[[['.W.', 'W..', 'B.W'], 'W'], [['WW.', '.W.', '...'], 'B'], [['.BB', '..W', 'WBW'], 'B'], [['.W.', 'BW.', 'BB.'], 'W']], ['WWW', '..W', 'WW.'], 'B', 'positional'], 'legal'], [[[[['..W', 'BBW', '.W.'], 'B'], [['..B', 'WBW', 'BW.'], 'W'], [['.B.', '..B', 'B..'], 'W']], ['..W', 'BBW', '.W.'], 'B', 'situational'], 0], [[[[['BW.', 'W.B', '...'], 'B'], [['W.B', '.B.', 'WWB'], 'W'], [['W..', '.BB', '..W'], 'W'], [['.W.', 'BWW', '...'], 'B'], [['...', '.B.', 'B..'], 'W']], ['BW.', 'W.B', '...'], 'B', 'situational'], 0], [[[[['...', '..B', 'WB.'], 'W'], [['...', '..B', 'WB.'], 'W'], [['...', '.B.', '.B.'], 'B']], ['...', '..B', 'WB.'], 'W', 'positional'], 0], [[[[['..', 'W.'], 'B'], [['..', '..'], 'B'], [['..', '.B'], 'B'], [['.B', '.B'], 'B'], [['W.', 'BW'], 'W'], [['..', 'W.'], 'B'], [['..', 'B.'], 'B']], ['..', 'W.'], 'B', 'positional'], 0]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("superko 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
superko case 010Failed
superko case 1legallegalPassed
superko case 255Passed
superko case 321Failed
superko case 400Passed
superko case 500Passed
superko case 6legallegalPassed
superko case 742Failed

SHA-256 / 66ba84d3ab73783f2215890ffcd5e43af8c9d662614b45c4e7e03f26c481e442

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    history, cand, mover, mode = x
    key = tuple(cand)
    for idx, (past, to_move) in enumerate(reversed(history)):
        if tuple(past) != key:
            continue
        if mode == 'situational' and to_move != mover:
            continue
        return idx
    return 'legal'
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[['..W', '..W', '..W'], 'B'], [['..W', '..W', '..W'], 'B'], [['..B', 'BBB', '..B'], 'B']], ['..W', '..W', '..W'], 'B', 'positional'], 0], [[[[['B.', '..'], 'W'], [['.B', 'WB'], 'W'], [['WW', 'BW'], 'W']], ['.B', 'WB'], 'B', 'situational'], 'legal'], [[[[['.W', 'W.'], 'W'], [['BW', 'W.'], 'B'], [['.B', '..'], 'B'], [['.B', '.B'], 'B'], [['B.', 'WB'], 'W'], [['.B', '..'], 'W']], ['.B', '..'], 'W', 'situational'], 5], [[[[['W.', '.B'], 'B'], [['WB', 'WB'], 'W'], [['WB', 'WB'], 'W'], [['.B', 'BB'], 'B']], ['WB', 'WB'], 'W', 'situational'], 1], [[[[['BW', 'W.'], 'B'], [['W.', 'BB'], 'B']], ['BW', 'W.'], 'B', 'positional'], 0], [[[[['..', 'W.'], 'B'], [['.W', '..'], 'B'], [['B.', 'BW'], 'W']], ['..', 'W.'], 'B', 'positional'], 0], [[[[['...', '...', '.B.'], 'B'], [['.B.', '.BW', 'B.W'], 'B'], [['BW.', 'W.W', '.W.'], 'B']], ['B.W', '..B', 'W.W'], 'W', 'positional'], 'legal'], [[[[['.W', 'WB'], 'B'], [['.W', '.W'], 'W'], [['.W', '.W'], 'B'], [['BB', '.B'], 'B'], [['.W', '.W'], 'B'], [['..', '..'], 'B']], ['.W', '.W'], 'B', 'situational'], 2]], [[[[[['.W', 'WB'], 'B'], [['.W', '.W'], 'W'], [['.W', '.W'], 'B'], [['BB', '.B'], 'B'], [['.W', '.W'], 'B'], [['..', '..'], 'B']], ['.W', '.W'], 'B', 'situational'], 2], [[[[['.BW', '.BB', '..B'], 'B']], ['.BW', '.BB', '..B'], 'W', 'situational'], 'legal'], [[[[['B.', 'W.'], 'W'], [['..', '.B'], 'B'], [['W.', 'BW'], 'B'], [['BB', 'B.'], 'B']], ['..', '.B'], 'B', 'positional'], 1], [[[[['WB.', 'WB.', '.BB'], 'B'], [['BW.', 'B..', '.WB'], 'B'], [['..B', '..W', '...'], 'W'], [['..B', '..B', 'W..'], 'W']], ['BW.', 'B..', '.WB'], 'W', 'situational'], 'legal'], [[[[['...', 'BW.', 'BBW'], 'B'], [['.W.', '..B', 'BBW'], 'B'], [['W.B', '.W.', '...'], 'B'], [['.WB', '.BW', '..W'], 'W'], [['...', 'W.B', 'W.B'], 'B']], ['.WW', '.W.', 'BW.'], 'B', 'positional'], 'legal'], [[[[['WW', 'W.'], 'W'], [['.W', '.W'], 'W'], [['..', 'B.'], 'B'], [['.W', '.W'], 'B'], [['W.', '..'], 'W'], [['..', 'WB'], 'W']], ['.W', '.W'], 'W', 'situational'], 1], [[[[['B.B', '.W.', 'WWB'], 'B'], [['..B', 'WB.', '.B.'], 'W'], [['.B.', 'W..', '.W.'], 'B'], [['.WW', '..B', 'BWW'], 'B'], [['.B.', '.B.', 'W.W'], 'B'], [['..B', 'WB.', '.B.'], 'W'], [['B.B', '.B.', '.BB'], 'B']], ['..B', 'WB.', '.B.'], 'W', 'situational'], 1], [[[[['.B', 'B.'], 'B'], [['.B', 'B.'], 'B'], [['BW', '..'], 'B'], [['.B', 'B.'], 'B'], [['.B', 'BB'], 'B']], ['.B', 'B.'], 'B', 'situational'], 0]], [[[[[['B.B', 'B.B', '.BW'], 'W']], ['B.B', 'B.B', '.BW'], 'W', 'situational'], 0], [[[[['WW.', '...', '..B'], 'B']], ['WW.', '...', '..B'], 'W', 'positional'], 0], [[[[['.BW', '...', '.W.'], 'B'], [['W..', '.B.', 'BBB'], 'B'], [['WWW', 'WBB', '.WW'], 'B'], [['BW.', '.W.', '.B.'], 'W'], [['BBW', 'WW.', '...'], 'B'], [['WWW', 'WBB', '.WW'], 'B'], [['B..', '...', 'B.B'], 'B']], ['WWW', 'WBB', '.WW'], 'B', 'positional'], 2], [[[[['..W', '.BW', 'W.W'], 'W'], [['W..', '.W.', '.W.'], 'W'], [['WWW', 'W.W', '...'], 'B'], [['WBB', 'WWB', 'B..'], 'W'], [['BB.', '.WB', '..B'], 'W'], [['W.W', 'B.B', '.B.'], 'B']], ['BBW', 'B..', 'B.W'], 'W', 'situational'], 'legal'], [[[[['B.B', 'WB.', '...'], 'W'], [['.W.', 'BWW', 'W..'], 'B']], ['B.B', 'WB.', '...'], 'B', 'situational'], 'legal'], [[[[['..', 'B.'], 'W'], [['.B', 'WB'], 'B'], [['..', '.W'], 'B'], [['..', '.W'], 'W'], [['.B', 'B.'], 'B']], ['..', '.W'], 'W', 'situational'], 3], [[[[['.B', 'B.'], 'B'], [['.B', 'B.'], 'B'], [['BW', '..'], 'B'], [['.B', 'B.'], 'B'], [['.B', 'BB'], 'B']], ['.B', 'B.'], 'B', 'situational'], 0], [[[[['..W', 'BBW', '.W.'], 'B'], [['..B', 'WBW', 'BW.'], 'W'], [['.B.', '..B', 'B..'], 'W']], ['..W', 'BBW', '.W.'], 'B', 'situational'], 0]], [[[[[['W.B', 'B..', '.BB'], 'W'], [['.BB', 'WB.', 'BB.'], 'W']], ['.BB', 'WB.', 'BB.'], 'B', 'situational'], 'legal'], [[[[['W.', '..'], 'B'], [['..', 'B.'], 'W'], [['.B', '.B'], 'B'], [['B.', 'BW'], 'W'], [['BB', '..'], 'W']], ['..', 'WW'], 'B', 'situational'], 'legal'], [[[[['WWW', '..B', 'B..'], 'B'], [['..W', 'W.B', '.B.'], 'B'], [['..B', '...', '.B.'], 'W']], ['..W', '..W', 'B.W'], 'W', 'positional'], 'legal'], [[[[['.B', 'B.'], 'B'], [['.B', 'B.'], 'B'], [['BW', '..'], 'B'], [['.B', 'B.'], 'B'], [['.B', 'BB'], 'B']], ['.B', 'B.'], 'B', 'situational'], 0], [[[[['W.', '.W'], 'B'], [['B.', '..'], 'B'], [['WB', '..'], 'B'], [['BW', '.W'], 'W']], ['BW', '.W'], 'B', 'positional'], 3], [[[[['B.W', 'W.W', 'B.W'], 'W'], [['BWB', '.BW', 'B..'], 'W'], [['..W', 'B..', 'B..'], 'B'], [['WWW', 'B.B', 'WW.'], 'W'], [['.BB', '.WB', '..B'], 'B']], ['BBB', '.W.', 'W.W'], 'B', 'positional'], 'legal'], [[[[['.W', '.B'], 'B'], [['.B', '..'], 'W'], [['.B', '..'], 'W'], [['BB', '.B'], 'B']], ['.B', '..'], 'W', 'positional'], 1], [[[[['B.', '..'], 'B'], [['.W', 'B.'], 'B'], [['WW', 'BB'], 'B'], [['..', '..'], 'B'], [['.W', '.W'], 'W'], [['WW', 'BB'], 'W'], [['..', '..'], 'B']], ['WW', 'BB'], 'W', 'positional'], 2]], [[[[[['W.B', 'WBW', '..W'], 'W'], [['B.B', 'BB.', 'WBW'], 'B'], [['.BW', '.W.', 'W..'], 'B'], [['BW.', '..W', '.WB'], 'B'], [['.WW', '..B', 'WWB'], 'W'], [['..W', '...', 'W.B'], 'W'], [['.WW', '..B', 'WWB'], 'W'], [['..B', 'BB.', 'BBB'], 'B']], ['.WW', '..B', 'WWB'], 'W', 'positional'], 4], [[[[['...', '...', '...'], 'W'], [['...', '...', '...'], 'B'], [['BBB', '...', '.B.'], 'B']], ['...', '...', '...'], 'B', 'positional'], 0], [[[[['.B', 'B.'], 'W'], [['B.', 'W.'], 'W']], ['.B', 'B.'], 'B', 'situational'], 'legal'], [[[[['.W.', 'W..', 'B.W'], 'W'], [['WW.', '.W.', '...'], 'B'], [['.BB', '..W', 'WBW'], 'B'], [['.W.', 'BW.', 'BB.'], 'W']], ['WWW', '..W', 'WW.'], 'B', 'positional'], 'legal'], [[[[['..W', 'BBW', '.W.'], 'B'], [['..B', 'WBW', 'BW.'], 'W'], [['.B.', '..B', 'B..'], 'W']], ['..W', 'BBW', '.W.'], 'B', 'situational'], 0], [[[[['BW.', 'W.B', '...'], 'B'], [['W.B', '.B.', 'WWB'], 'W'], [['W..', '.BB', '..W'], 'W'], [['.W.', 'BWW', '...'], 'B'], [['...', '.B.', 'B..'], 'W']], ['BW.', 'W.B', '...'], 'B', 'situational'], 0], [[[[['...', '..B', 'WB.'], 'W'], [['...', '..B', 'WB.'], 'W'], [['...', '.B.', '.B.'], 'B']], ['...', '..B', 'WB.'], 'W', 'positional'], 0], [[[[['..', 'W.'], 'B'], [['..', '..'], 'B'], [['..', '.B'], 'B'], [['.B', '.B'], 'B'], [['W.', 'BW'], 'W'], [['..', 'W.'], 'B'], [['..', 'B.'], 'B']], ['..', 'W.'], 'B', 'positional'], 0]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("superko 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
superko case 010Failed
superko case 1legallegalPassed
superko case 205Failed
superko case 311Passed
superko case 410Failed
superko case 520Failed
superko case 6legallegalPassed
superko case 712Failed

SHA-256 / c48243ddf343830848840646adb5ba7e87e088aea1c4d9ea45d0a797d0b07997

3 / The verified repair

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

N = 1
observations = []
def solve(x):
    history, cand, mover, mode = x
    key = tuple(cand)
    for idx, (past, to_move) in enumerate(history):
        if tuple(past) != key:
            continue
        if mode == 'situational' and to_move != mover:
            continue
        return idx
    return 'legal'
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[['..W', '..W', '..W'], 'B'], [['..W', '..W', '..W'], 'B'], [['..B', 'BBB', '..B'], 'B']], ['..W', '..W', '..W'], 'B', 'positional'], 0], [[[[['B.', '..'], 'W'], [['.B', 'WB'], 'W'], [['WW', 'BW'], 'W']], ['.B', 'WB'], 'B', 'situational'], 'legal'], [[[[['.W', 'W.'], 'W'], [['BW', 'W.'], 'B'], [['.B', '..'], 'B'], [['.B', '.B'], 'B'], [['B.', 'WB'], 'W'], [['.B', '..'], 'W']], ['.B', '..'], 'W', 'situational'], 5], [[[[['W.', '.B'], 'B'], [['WB', 'WB'], 'W'], [['WB', 'WB'], 'W'], [['.B', 'BB'], 'B']], ['WB', 'WB'], 'W', 'situational'], 1], [[[[['BW', 'W.'], 'B'], [['W.', 'BB'], 'B']], ['BW', 'W.'], 'B', 'positional'], 0], [[[[['..', 'W.'], 'B'], [['.W', '..'], 'B'], [['B.', 'BW'], 'W']], ['..', 'W.'], 'B', 'positional'], 0], [[[[['...', '...', '.B.'], 'B'], [['.B.', '.BW', 'B.W'], 'B'], [['BW.', 'W.W', '.W.'], 'B']], ['B.W', '..B', 'W.W'], 'W', 'positional'], 'legal'], [[[[['.W', 'WB'], 'B'], [['.W', '.W'], 'W'], [['.W', '.W'], 'B'], [['BB', '.B'], 'B'], [['.W', '.W'], 'B'], [['..', '..'], 'B']], ['.W', '.W'], 'B', 'situational'], 2]], [[[[[['.W', 'WB'], 'B'], [['.W', '.W'], 'W'], [['.W', '.W'], 'B'], [['BB', '.B'], 'B'], [['.W', '.W'], 'B'], [['..', '..'], 'B']], ['.W', '.W'], 'B', 'situational'], 2], [[[[['.BW', '.BB', '..B'], 'B']], ['.BW', '.BB', '..B'], 'W', 'situational'], 'legal'], [[[[['B.', 'W.'], 'W'], [['..', '.B'], 'B'], [['W.', 'BW'], 'B'], [['BB', 'B.'], 'B']], ['..', '.B'], 'B', 'positional'], 1], [[[[['WB.', 'WB.', '.BB'], 'B'], [['BW.', 'B..', '.WB'], 'B'], [['..B', '..W', '...'], 'W'], [['..B', '..B', 'W..'], 'W']], ['BW.', 'B..', '.WB'], 'W', 'situational'], 'legal'], [[[[['...', 'BW.', 'BBW'], 'B'], [['.W.', '..B', 'BBW'], 'B'], [['W.B', '.W.', '...'], 'B'], [['.WB', '.BW', '..W'], 'W'], [['...', 'W.B', 'W.B'], 'B']], ['.WW', '.W.', 'BW.'], 'B', 'positional'], 'legal'], [[[[['WW', 'W.'], 'W'], [['.W', '.W'], 'W'], [['..', 'B.'], 'B'], [['.W', '.W'], 'B'], [['W.', '..'], 'W'], [['..', 'WB'], 'W']], ['.W', '.W'], 'W', 'situational'], 1], [[[[['B.B', '.W.', 'WWB'], 'B'], [['..B', 'WB.', '.B.'], 'W'], [['.B.', 'W..', '.W.'], 'B'], [['.WW', '..B', 'BWW'], 'B'], [['.B.', '.B.', 'W.W'], 'B'], [['..B', 'WB.', '.B.'], 'W'], [['B.B', '.B.', '.BB'], 'B']], ['..B', 'WB.', '.B.'], 'W', 'situational'], 1], [[[[['.B', 'B.'], 'B'], [['.B', 'B.'], 'B'], [['BW', '..'], 'B'], [['.B', 'B.'], 'B'], [['.B', 'BB'], 'B']], ['.B', 'B.'], 'B', 'situational'], 0]], [[[[[['B.B', 'B.B', '.BW'], 'W']], ['B.B', 'B.B', '.BW'], 'W', 'situational'], 0], [[[[['WW.', '...', '..B'], 'B']], ['WW.', '...', '..B'], 'W', 'positional'], 0], [[[[['.BW', '...', '.W.'], 'B'], [['W..', '.B.', 'BBB'], 'B'], [['WWW', 'WBB', '.WW'], 'B'], [['BW.', '.W.', '.B.'], 'W'], [['BBW', 'WW.', '...'], 'B'], [['WWW', 'WBB', '.WW'], 'B'], [['B..', '...', 'B.B'], 'B']], ['WWW', 'WBB', '.WW'], 'B', 'positional'], 2], [[[[['..W', '.BW', 'W.W'], 'W'], [['W..', '.W.', '.W.'], 'W'], [['WWW', 'W.W', '...'], 'B'], [['WBB', 'WWB', 'B..'], 'W'], [['BB.', '.WB', '..B'], 'W'], [['W.W', 'B.B', '.B.'], 'B']], ['BBW', 'B..', 'B.W'], 'W', 'situational'], 'legal'], [[[[['B.B', 'WB.', '...'], 'W'], [['.W.', 'BWW', 'W..'], 'B']], ['B.B', 'WB.', '...'], 'B', 'situational'], 'legal'], [[[[['..', 'B.'], 'W'], [['.B', 'WB'], 'B'], [['..', '.W'], 'B'], [['..', '.W'], 'W'], [['.B', 'B.'], 'B']], ['..', '.W'], 'W', 'situational'], 3], [[[[['.B', 'B.'], 'B'], [['.B', 'B.'], 'B'], [['BW', '..'], 'B'], [['.B', 'B.'], 'B'], [['.B', 'BB'], 'B']], ['.B', 'B.'], 'B', 'situational'], 0], [[[[['..W', 'BBW', '.W.'], 'B'], [['..B', 'WBW', 'BW.'], 'W'], [['.B.', '..B', 'B..'], 'W']], ['..W', 'BBW', '.W.'], 'B', 'situational'], 0]], [[[[[['W.B', 'B..', '.BB'], 'W'], [['.BB', 'WB.', 'BB.'], 'W']], ['.BB', 'WB.', 'BB.'], 'B', 'situational'], 'legal'], [[[[['W.', '..'], 'B'], [['..', 'B.'], 'W'], [['.B', '.B'], 'B'], [['B.', 'BW'], 'W'], [['BB', '..'], 'W']], ['..', 'WW'], 'B', 'situational'], 'legal'], [[[[['WWW', '..B', 'B..'], 'B'], [['..W', 'W.B', '.B.'], 'B'], [['..B', '...', '.B.'], 'W']], ['..W', '..W', 'B.W'], 'W', 'positional'], 'legal'], [[[[['.B', 'B.'], 'B'], [['.B', 'B.'], 'B'], [['BW', '..'], 'B'], [['.B', 'B.'], 'B'], [['.B', 'BB'], 'B']], ['.B', 'B.'], 'B', 'situational'], 0], [[[[['W.', '.W'], 'B'], [['B.', '..'], 'B'], [['WB', '..'], 'B'], [['BW', '.W'], 'W']], ['BW', '.W'], 'B', 'positional'], 3], [[[[['B.W', 'W.W', 'B.W'], 'W'], [['BWB', '.BW', 'B..'], 'W'], [['..W', 'B..', 'B..'], 'B'], [['WWW', 'B.B', 'WW.'], 'W'], [['.BB', '.WB', '..B'], 'B']], ['BBB', '.W.', 'W.W'], 'B', 'positional'], 'legal'], [[[[['.W', '.B'], 'B'], [['.B', '..'], 'W'], [['.B', '..'], 'W'], [['BB', '.B'], 'B']], ['.B', '..'], 'W', 'positional'], 1], [[[[['B.', '..'], 'B'], [['.W', 'B.'], 'B'], [['WW', 'BB'], 'B'], [['..', '..'], 'B'], [['.W', '.W'], 'W'], [['WW', 'BB'], 'W'], [['..', '..'], 'B']], ['WW', 'BB'], 'W', 'positional'], 2]], [[[[[['W.B', 'WBW', '..W'], 'W'], [['B.B', 'BB.', 'WBW'], 'B'], [['.BW', '.W.', 'W..'], 'B'], [['BW.', '..W', '.WB'], 'B'], [['.WW', '..B', 'WWB'], 'W'], [['..W', '...', 'W.B'], 'W'], [['.WW', '..B', 'WWB'], 'W'], [['..B', 'BB.', 'BBB'], 'B']], ['.WW', '..B', 'WWB'], 'W', 'positional'], 4], [[[[['...', '...', '...'], 'W'], [['...', '...', '...'], 'B'], [['BBB', '...', '.B.'], 'B']], ['...', '...', '...'], 'B', 'positional'], 0], [[[[['.B', 'B.'], 'W'], [['B.', 'W.'], 'W']], ['.B', 'B.'], 'B', 'situational'], 'legal'], [[[[['.W.', 'W..', 'B.W'], 'W'], [['WW.', '.W.', '...'], 'B'], [['.BB', '..W', 'WBW'], 'B'], [['.W.', 'BW.', 'BB.'], 'W']], ['WWW', '..W', 'WW.'], 'B', 'positional'], 'legal'], [[[[['..W', 'BBW', '.W.'], 'B'], [['..B', 'WBW', 'BW.'], 'W'], [['.B.', '..B', 'B..'], 'W']], ['..W', 'BBW', '.W.'], 'B', 'situational'], 0], [[[[['BW.', 'W.B', '...'], 'B'], [['W.B', '.B.', 'WWB'], 'W'], [['W..', '.BB', '..W'], 'W'], [['.W.', 'BWW', '...'], 'B'], [['...', '.B.', 'B..'], 'W']], ['BW.', 'W.B', '...'], 'B', 'situational'], 0], [[[[['...', '..B', 'WB.'], 'W'], [['...', '..B', 'WB.'], 'W'], [['...', '.B.', '.B.'], 'B']], ['...', '..B', 'WB.'], 'W', 'positional'], 0], [[[[['..', 'W.'], 'B'], [['..', '..'], 'B'], [['..', '.B'], 'B'], [['.B', '.B'], 'B'], [['W.', 'BW'], 'W'], [['..', 'W.'], 'B'], [['..', 'B.'], 'B']], ['..', 'W.'], 'B', 'positional'], 0]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("superko 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
superko case 000Passed
superko case 1legallegalPassed
superko case 255Passed
superko case 311Passed
superko case 400Passed
superko case 500Passed
superko case 6legallegalPassed
superko case 722Passed

SHA-256 / b304467088218fd663567c83bc118072b9faf93aee9456daf37f7db0474486e3

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

Case digest / 8bc3e28ccab293ab2b9c72a61071b1745c406a9f779dd5dec0a60e0ff24f02b6