{"abstract":"Points on the first line are classified as none.","category":"Go territory scoring","checks":8,"contract":"Input [board, row, col]. A point is an eye candidate of colour X if it is empty and every on-board orthogonal neighbour is X. It is false if opponent stones occupy >= 2 diagonals in the centre, or >= 1 diagonal on the edge/corner. Return \"eye-X\", \"false-X\" or \"none\".","evaluation_group":"w2-go-territory-scoring-eye-shape","failed_approach":"Wrapping the neighbour index to the opposite edge makes eye status depend on unrelated stones.","family":"w2-go-territory-scoring-eye-shape-orthogonal-edge-neighbours","id":"FA-83116","implementations":{"attempt":{"sha256":"7cd1b9518906e63dcdce96a13c08319444448f3cce7be781bd05792cedcb101a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board, r, c = x\n    n = len(board)\n    m = len(board[0])\n    if board[r][c] != '.':\n        return 'none'\n    orth = []\n    for p, q in ((r - 1, c), (r + 1, c), (r, c - 1), (r, c + 1)):\n        orth.append(board[p % n][q % m])\n    if not orth or orth.count(orth[0]) != len(orth) or orth[0] == '.':\n        return 'none'\n    col = orth[0]\n    opp = 'W' if col == 'B' else 'B'\n    bad = 0\n    ondiag = 0\n    for p, q in ((r - 1, c - 1), (r - 1, c + 1), (r + 1, c - 1), (r + 1, c + 1)):\n        if 0 <= p < n and 0 <= q < m:\n            ondiag += 1\n            if board[p][q] == opp:\n                bad += 1\n    limit = 2 if ondiag == 4 else 1\n    if bad >= limit:\n        return 'false-' + col\n    return 'eye-' + col\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['...', '...', '...'], 0, 1], 'none'], [[['...', '...', '...'], 0, 2], 'none'], [[['...', '...', '...'], 1, 0], 'none'], [[['...', '...', '...'], 1, 1], 'none'], [[['...', '...', '...'], 1, 2], 'none'], [[['.B.', 'B.B', '.B.'], 0, 0], 'eye-B'], [[['.B.', 'B.B', '.B.'], 0, 2], 'eye-B'], [[['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], 0, 0], 'eye-W']], [[[['.B.', 'B.B', '.B.'], 1, 1], 'eye-B'], [[['.B.', 'B.B', '.B.'], 2, 0], 'eye-B'], [[['.B.', 'B.B', '.B.'], 2, 2], 'eye-B'], [[['.B.', 'B.B', '.B.'], 0, 1], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 0, 1], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 0, 2], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 1, 1], 'none'], [[['..W.', '...W', '.WB.', '...B'], 0, 3], 'eye-W']], [[[['B..W', 'B..W', 'B..W', 'B..W'], 1, 2], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 2, 1], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 2, 2], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 0, 0], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 0, 0], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 0, 3], 'none'], [[['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], 0, 0], 'eye-W'], [[['WW.WW', 'WB.B.', 'WBW.W', 'W.WBB', 'BBB.B'], 4, 3], 'false-B']], [[[['.BW.', '.BW.', '.BW.', '.BW.'], 1, 3], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 2, 0], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 2, 3], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 0, 1], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 0], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 1], 'none'], [[['WB.B', 'B.B.', '.B..', 'B...'], 0, 2], 'eye-B'], [[['.B.', 'B.B', '.B.'], 0, 0], 'eye-B']], [[[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 4], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 1, 0], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 1, 1], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 2], 'none'], [[['B.B.W', '.B.W.', 'B.BW.', 'BBW.W', '..W..'], 0, 1], 'eye-B'], [[['B.B.W', '.B.W.', 'B.BW.', 'BBW.W', '..W..'], 0, 3], 'none'], [[['WBW', '..W', '.WW', '.W.'], 3, 2], 'eye-W'], [[['W.W', '.W.', 'W.W'], 0, 1], 'eye-W']]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"eye 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":"1bbe9dbb7fbea6a9a6104185ce01877f62d9e4e420976c51c945f5383f957c69","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board, r, c = x\n    n = len(board)\n    m = len(board[0])\n    if board[r][c] != '.':\n        return 'none'\n    orth = []\n    for p, q in ((r - 1, c), (r + 1, c), (r, c - 1), (r, c + 1)):\n        orth.append(board[p][q] if 0 <= p < n and 0 <= q < m else '#')\n    if not orth or orth.count(orth[0]) != len(orth) or orth[0] == '.':\n        return 'none'\n    col = orth[0]\n    opp = 'W' if col == 'B' else 'B'\n    bad = 0\n    ondiag = 0\n    for p, q in ((r - 1, c - 1), (r - 1, c + 1), (r + 1, c - 1), (r + 1, c + 1)):\n        if 0 <= p < n and 0 <= q < m:\n            ondiag += 1\n            if board[p][q] == opp:\n                bad += 1\n    limit = 2 if ondiag == 4 else 1\n    if bad >= limit:\n        return 'false-' + col\n    return 'eye-' + col\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['...', '...', '...'], 0, 1], 'none'], [[['...', '...', '...'], 0, 2], 'none'], [[['...', '...', '...'], 1, 0], 'none'], [[['...', '...', '...'], 1, 1], 'none'], [[['...', '...', '...'], 1, 2], 'none'], [[['.B.', 'B.B', '.B.'], 0, 0], 'eye-B'], [[['.B.', 'B.B', '.B.'], 0, 2], 'eye-B'], [[['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], 0, 0], 'eye-W']], [[[['.B.', 'B.B', '.B.'], 1, 1], 'eye-B'], [[['.B.', 'B.B', '.B.'], 2, 0], 'eye-B'], [[['.B.', 'B.B', '.B.'], 2, 2], 'eye-B'], [[['.B.', 'B.B', '.B.'], 0, 1], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 0, 1], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 0, 2], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 1, 1], 'none'], [[['..W.', '...W', '.WB.', '...B'], 0, 3], 'eye-W']], [[[['B..W', 'B..W', 'B..W', 'B..W'], 1, 2], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 2, 1], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 2, 2], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 0, 0], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 0, 0], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 0, 3], 'none'], [[['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], 0, 0], 'eye-W'], [[['WW.WW', 'WB.B.', 'WBW.W', 'W.WBB', 'BBB.B'], 4, 3], 'false-B']], [[[['.BW.', '.BW.', '.BW.', '.BW.'], 1, 3], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 2, 0], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 2, 3], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 0, 1], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 0], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 1], 'none'], [[['WB.B', 'B.B.', '.B..', 'B...'], 0, 2], 'eye-B'], [[['.B.', 'B.B', '.B.'], 0, 0], 'eye-B']], [[[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 4], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 1, 0], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 1, 1], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 2], 'none'], [[['B.B.W', '.B.W.', 'B.BW.', 'BBW.W', '..W..'], 0, 1], 'eye-B'], [[['B.B.W', '.B.W.', 'B.BW.', 'BBW.W', '..W..'], 0, 3], 'none'], [[['WBW', '..W', '.WW', '.W.'], 3, 2], 'eye-W'], [[['W.W', '.W.', 'W.W'], 0, 1], 'eye-W']]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"eye 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":"6e7be70552686766ea6cc78938f927406796897dc3bd81524be41371f1260fe5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board, r, c = x\n    n = len(board)\n    m = len(board[0])\n    if board[r][c] != '.':\n        return 'none'\n    orth = []\n    for p, q in ((r - 1, c), (r + 1, c), (r, c - 1), (r, c + 1)):\n        if 0 <= p < n and 0 <= q < m:\n            orth.append(board[p][q])\n    if not orth or orth.count(orth[0]) != len(orth) or orth[0] == '.':\n        return 'none'\n    col = orth[0]\n    opp = 'W' if col == 'B' else 'B'\n    bad = 0\n    ondiag = 0\n    for p, q in ((r - 1, c - 1), (r - 1, c + 1), (r + 1, c - 1), (r + 1, c + 1)):\n        if 0 <= p < n and 0 <= q < m:\n            ondiag += 1\n            if board[p][q] == opp:\n                bad += 1\n    limit = 2 if ondiag == 4 else 1\n    if bad >= limit:\n        return 'false-' + col\n    return 'eye-' + col\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['...', '...', '...'], 0, 1], 'none'], [[['...', '...', '...'], 0, 2], 'none'], [[['...', '...', '...'], 1, 0], 'none'], [[['...', '...', '...'], 1, 1], 'none'], [[['...', '...', '...'], 1, 2], 'none'], [[['.B.', 'B.B', '.B.'], 0, 0], 'eye-B'], [[['.B.', 'B.B', '.B.'], 0, 2], 'eye-B'], [[['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], 0, 0], 'eye-W']], [[[['.B.', 'B.B', '.B.'], 1, 1], 'eye-B'], [[['.B.', 'B.B', '.B.'], 2, 0], 'eye-B'], [[['.B.', 'B.B', '.B.'], 2, 2], 'eye-B'], [[['.B.', 'B.B', '.B.'], 0, 1], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 0, 1], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 0, 2], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 1, 1], 'none'], [[['..W.', '...W', '.WB.', '...B'], 0, 3], 'eye-W']], [[[['B..W', 'B..W', 'B..W', 'B..W'], 1, 2], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 2, 1], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 2, 2], 'none'], [[['B..W', 'B..W', 'B..W', 'B..W'], 0, 0], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 0, 0], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 0, 3], 'none'], [[['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], 0, 0], 'eye-W'], [[['WW.WW', 'WB.B.', 'WBW.W', 'W.WBB', 'BBB.B'], 4, 3], 'false-B']], [[[['.BW.', '.BW.', '.BW.', '.BW.'], 1, 3], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 2, 0], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 2, 3], 'none'], [[['.BW.', '.BW.', '.BW.', '.BW.'], 0, 1], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 0], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 1], 'none'], [[['WB.B', 'B.B.', '.B..', 'B...'], 0, 2], 'eye-B'], [[['.B.', 'B.B', '.B.'], 0, 0], 'eye-B']], [[[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 4], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 1, 0], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 1, 1], 'none'], [[['..B..', '..B..', 'BBBBB', 'WWWWW', '..W..'], 0, 2], 'none'], [[['B.B.W', '.B.W.', 'B.BW.', 'BBW.W', '..W..'], 0, 1], 'eye-B'], [[['B.B.W', '.B.W.', 'B.BW.', 'BBW.W', '..W..'], 0, 3], 'none'], [[['WBW', '..W', '.WW', '.W.'], 3, 2], 'eye-W'], [[['W.W', '.W.', 'W.W'], 0, 1], 'eye-W']]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"eye 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-eye-shape-orthogonal-edge-neighbours","generated_at":"2026-09-29T14:50:18.717411+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":"Consider only on-board orthogonal neighbours.","root_cause":"Off-board orthogonal neighbours are recorded as a non-matching colour.","sha256":"683f7f6baa66ad01ae233d79f8c4a544fc06b261cc1ebc684931a915a3012d39","title":"Edge points can never be eyes · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.324,"exit_code":1,"observations":[{"actual":"none","check":"eye case 0","expected":"none","passed":true},{"actual":"none","check":"eye case 1","expected":"none","passed":true},{"actual":"none","check":"eye case 2","expected":"none","passed":true},{"actual":"none","check":"eye case 3","expected":"none","passed":true},{"actual":"none","check":"eye case 4","expected":"none","passed":true},{"actual":"none","check":"eye case 5","expected":"eye-B","passed":false},{"actual":"none","check":"eye case 6","expected":"eye-B","passed":false},{"actual":"none","check":"eye case 7","expected":"eye-W","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"eye case 0\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 1\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 2\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 3\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 4\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 5\", \"actual\": \"none\", \"expected\": \"eye-B\", \"passed\": false}, {\"check\": \"eye case 6\", \"actual\": \"none\", \"expected\": \"eye-B\", \"passed\": false}, {\"check\": \"eye case 7\", \"actual\": \"none\", \"expected\": \"eye-W\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.359,"exit_code":1,"observations":[{"actual":"none","check":"eye case 0","expected":"none","passed":true},{"actual":"none","check":"eye case 1","expected":"none","passed":true},{"actual":"none","check":"eye case 2","expected":"none","passed":true},{"actual":"none","check":"eye case 3","expected":"none","passed":true},{"actual":"none","check":"eye case 4","expected":"none","passed":true},{"actual":"none","check":"eye case 5","expected":"eye-B","passed":false},{"actual":"none","check":"eye case 6","expected":"eye-B","passed":false},{"actual":"none","check":"eye case 7","expected":"eye-W","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"eye case 0\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 1\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 2\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 3\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 4\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 5\", \"actual\": \"none\", \"expected\": \"eye-B\", \"passed\": false}, {\"check\": \"eye case 6\", \"actual\": \"none\", \"expected\": \"eye-B\", \"passed\": false}, {\"check\": \"eye case 7\", \"actual\": \"none\", \"expected\": \"eye-W\", \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.747,"exit_code":0,"observations":[{"actual":"none","check":"eye case 0","expected":"none","passed":true},{"actual":"none","check":"eye case 1","expected":"none","passed":true},{"actual":"none","check":"eye case 2","expected":"none","passed":true},{"actual":"none","check":"eye case 3","expected":"none","passed":true},{"actual":"none","check":"eye case 4","expected":"none","passed":true},{"actual":"eye-B","check":"eye case 5","expected":"eye-B","passed":true},{"actual":"eye-B","check":"eye case 6","expected":"eye-B","passed":true},{"actual":"eye-W","check":"eye case 7","expected":"eye-W","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"eye case 0\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 1\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 2\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 3\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 4\", \"actual\": \"none\", \"expected\": \"none\", \"passed\": true}, {\"check\": \"eye case 5\", \"actual\": \"eye-B\", \"expected\": \"eye-B\", \"passed\": true}, {\"check\": \"eye case 6\", \"actual\": \"eye-B\", \"expected\": \"eye-B\", \"passed\": true}, {\"check\": \"eye case 7\", \"actual\": \"eye-W\", \"expected\": \"eye-W\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}