{"abstract":"A full winning board is classified as a draw.","category":"Game simulation rules","checks":7,"contract":"Return X or O for the sole winner on a 3x3 board of X/O/dot; otherwise draw if full, playing if not. Inputs never have both winners.","contract_signature":"board","evaluation_group":"model-0ba01556828d5ff1","failed_approach":"Checking only rows misses column and diagonal wins.","family":"z-games-win-before-draw","id":"FA-11666","implementations":{"attempt":{"sha256":"fefdf13d20b9e882eca9a3bfdabbdf3df7aa2735ad1ddbb359d751efcf3aa95e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(board):\n    for s in board:\n     if s in ('XXX','OOO'): return s[0]\n    return 'draw' if all('.' not in row for row in board) else 'playing'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\np='X' if N%2 else 'O'\ncheck('last square completes row',solve(['XXX','OOX','OXO']),'X')\ncheck('column winner',solve([p+'..',p+'..',p+'..']),p)\ncheck('main diagonal',solve(['X..','.X.','..X']),'X')\ncheck('other diagonal',solve(['..O','.O.','O..']),'O')\ncheck('draw',solve(['XOX','XOO','OXX']),'draw')\ncheck('empty',solve(['...','...','...']),'playing')\ncheck('unfinished',solve(['X..','...','...']),'playing')\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":"ac73c701beed8d046c6d5fd14bb1481217f4e923d36310de5b23baf82d0e526a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(board):\n    if all('.' not in row for row in board): return 'draw'\n    lines=list(board)+[''.join(board[r][c] for r in range(3)) for c in range(3)]+[''.join(board[i][i] for i in range(3)),''.join(board[i][2-i] for i in range(3))]\n    return next((s[0] for s in lines if s in ('XXX','OOO')),'playing')\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\np='X' if N%2 else 'O'\ncheck('last square completes row',solve(['XXX','OOX','OXO']),'X')\ncheck('column winner',solve([p+'..',p+'..',p+'..']),p)\ncheck('main diagonal',solve(['X..','.X.','..X']),'X')\ncheck('other diagonal',solve(['..O','.O.','O..']),'O')\ncheck('draw',solve(['XOX','XOO','OXX']),'draw')\ncheck('empty',solve(['...','...','...']),'playing')\ncheck('unfinished',solve(['X..','...','...']),'playing')\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":"Controlled rules-only simulation; not a complete game engine. 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":"z-games-win-before-draw","generated_at":"2026-09-29T14:38:49.906202+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A deterministic game-rule model isolates this rule interaction for regression testing.","root_cause":"Full-board detection runs before win detection.","sha256":"5c3d8df7b4026a371d64eeb0134e615da772b180a5a0d727a8f9b0071e75bcc3","title":"A full winning board is classified as a draw · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":39.383,"exit_code":1,"observations":[{"actual":"X","check":"last square completes row","expected":"X","passed":true},{"actual":"playing","check":"column winner","expected":"X","passed":false},{"actual":"playing","check":"main diagonal","expected":"X","passed":false},{"actual":"playing","check":"other diagonal","expected":"O","passed":false},{"actual":"draw","check":"draw","expected":"draw","passed":true},{"actual":"playing","check":"empty","expected":"playing","passed":true},{"actual":"playing","check":"unfinished","expected":"playing","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"last square completes row\", \"actual\": \"X\", \"expected\": \"X\", \"passed\": true}, {\"check\": \"column winner\", \"actual\": \"playing\", \"expected\": \"X\", \"passed\": false}, {\"check\": \"main diagonal\", \"actual\": \"playing\", \"expected\": \"X\", \"passed\": false}, {\"check\": \"other diagonal\", \"actual\": \"playing\", \"expected\": \"O\", \"passed\": false}, {\"check\": \"draw\", \"actual\": \"draw\", \"expected\": \"draw\", \"passed\": true}, {\"check\": \"empty\", \"actual\": \"playing\", \"expected\": \"playing\", \"passed\": true}, {\"check\": \"unfinished\", \"actual\": \"playing\", \"expected\": \"playing\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.28,"exit_code":1,"observations":[{"actual":"draw","check":"last square completes row","expected":"X","passed":false},{"actual":"X","check":"column winner","expected":"X","passed":true},{"actual":"X","check":"main diagonal","expected":"X","passed":true},{"actual":"O","check":"other diagonal","expected":"O","passed":true},{"actual":"draw","check":"draw","expected":"draw","passed":true},{"actual":"playing","check":"empty","expected":"playing","passed":true},{"actual":"playing","check":"unfinished","expected":"playing","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"last square completes row\", \"actual\": \"draw\", \"expected\": \"X\", \"passed\": false}, {\"check\": \"column winner\", \"actual\": \"X\", \"expected\": \"X\", \"passed\": true}, {\"check\": \"main diagonal\", \"actual\": \"X\", \"expected\": \"X\", \"passed\": true}, {\"check\": \"other diagonal\", \"actual\": \"O\", \"expected\": \"O\", \"passed\": true}, {\"check\": \"draw\", \"actual\": \"draw\", \"expected\": \"draw\", \"passed\": true}, {\"check\": \"empty\", \"actual\": \"playing\", \"expected\": \"playing\", \"passed\": true}, {\"check\": \"unfinished\", \"actual\": \"playing\", \"expected\": \"playing\", \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}