{"abstract":"A queen may land on its own pawn.","category":"Chess move legality","checks":8,"contract":"Input: {\"board\", \"turn\": \"w\" or \"b\", \"moves\": [[from, to], ...]}. Replay the moves; return the index of the first move that starts from an empty square, moves a piece of the side not to move, or lands on a piece of its own colour; return -1 if all pass. Each move replaces any piece on the destination and passes the turn.","evaluation_group":"w2-chess_move_legality-move-list-turn-order","failed_approach":"Rejecting only captures of one's own king still allows other self-captures.","family":"w2-chess_move_legality-move-list-turn-order-own-piece-landing","id":"FA-82826","implementations":{"attempt":{"sha256":"f78cae0cd283bca3cdbae16925b9d889fb2112db7e25877e788557c0114a644c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    b=dict(x['board']); white=x['turn']=='w'\n    for i,(fr,to) in enumerate(x['moves']):\n        p=b.get(fr)\n        if p is None or p.isupper()!=white: return i\n        q=b.get(to)\n        if q is not None and q.isupper()==white and q.upper()=='K': return i\n        del b[fr]\n        b[to]=p\n        white=not white\n    return -1\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('white moves twice',\n   {'board': {'d2': 'P', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['d2', 'd4']],\n    'turn': 'w'},\n   1),\n  ('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1)],\n [('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('capture then recapture',\n   {'board': {'d5': 'p', 'd8': 'q', 'e1': 'K', 'e4': 'P', 'e8': 'k'},\n    'moves': [['e4', 'd5'], ['d8', 'd5']],\n    'turn': 'w'},\n   -1),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1),\n  ('four clean moves',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['f3', 'g1'], ['f6', 'g8']],\n    'turn': 'w'},\n   -1)],\n [('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('white moves twice',\n   {'board': {'d2': 'P', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['d2', 'd4']],\n    'turn': 'w'},\n   1),\n  ('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('capture then recapture',\n   {'board': {'d5': 'p', 'd8': 'q', 'e1': 'K', 'e4': 'P', 'e8': 'k'},\n    'moves': [['e4', 'd5'], ['d8', 'd5']],\n    'turn': 'w'},\n   -1),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1),\n  ('four clean moves',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['f3', 'g1'], ['f6', 'g8']],\n    'turn': 'w'},\n   -1)],\n [('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('white moves twice',\n   {'board': {'d2': 'P', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['d2', 'd4']],\n    'turn': 'w'},\n   1),\n  ('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1)],\n [('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('capture then recapture',\n   {'board': {'d5': 'p', 'd8': 'q', 'e1': 'K', 'e4': 'P', 'e8': 'k'},\n    'moves': [['e4', 'd5'], ['d8', 'd5']],\n    'turn': 'w'},\n   -1),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1),\n  ('four clean moves',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['f3', 'g1'], ['f6', 'g8']],\n    'turn': 'w'},\n   -1)]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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":"09884f6c4444bdaad7cad1362a3ba6fa3b1ae025ead54d341a6be2474c770a10","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    b=dict(x['board']); white=x['turn']=='w'\n    for i,(fr,to) in enumerate(x['moves']):\n        p=b.get(fr)\n        if p is None or p.isupper()!=white: return i\n        q=b.get(to)\n        pass\n        del b[fr]\n        b[to]=p\n        white=not white\n    return -1\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('white moves twice',\n   {'board': {'d2': 'P', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['d2', 'd4']],\n    'turn': 'w'},\n   1),\n  ('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1)],\n [('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('capture then recapture',\n   {'board': {'d5': 'p', 'd8': 'q', 'e1': 'K', 'e4': 'P', 'e8': 'k'},\n    'moves': [['e4', 'd5'], ['d8', 'd5']],\n    'turn': 'w'},\n   -1),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1),\n  ('four clean moves',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['f3', 'g1'], ['f6', 'g8']],\n    'turn': 'w'},\n   -1)],\n [('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('white moves twice',\n   {'board': {'d2': 'P', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['d2', 'd4']],\n    'turn': 'w'},\n   1),\n  ('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('capture then recapture',\n   {'board': {'d5': 'p', 'd8': 'q', 'e1': 'K', 'e4': 'P', 'e8': 'k'},\n    'moves': [['e4', 'd5'], ['d8', 'd5']],\n    'turn': 'w'},\n   -1),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1),\n  ('four clean moves',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['f3', 'g1'], ['f6', 'g8']],\n    'turn': 'w'},\n   -1)],\n [('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('white moves twice',\n   {'board': {'d2': 'P', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['d2', 'd4']],\n    'turn': 'w'},\n   1),\n  ('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1)],\n [('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('capture then recapture',\n   {'board': {'d5': 'p', 'd8': 'q', 'e1': 'K', 'e4': 'P', 'e8': 'k'},\n    'moves': [['e4', 'd5'], ['d8', 'd5']],\n    'turn': 'w'},\n   -1),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1),\n  ('four clean moves',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['f3', 'g1'], ['f6', 'g8']],\n    'turn': 'w'},\n   -1)]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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":"041e75baa563922647d474ed330b3ad6ebf2e3d14e5fb51b406613eaa5ff6333","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    b=dict(x['board']); white=x['turn']=='w'\n    for i,(fr,to) in enumerate(x['moves']):\n        p=b.get(fr)\n        if p is None or p.isupper()!=white: return i\n        q=b.get(to)\n        if q is not None and q.isupper()==white: return i\n        del b[fr]\n        b[to]=p\n        white=not white\n    return -1\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('white moves twice',\n   {'board': {'d2': 'P', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['d2', 'd4']],\n    'turn': 'w'},\n   1),\n  ('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1)],\n [('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('capture then recapture',\n   {'board': {'d5': 'p', 'd8': 'q', 'e1': 'K', 'e4': 'P', 'e8': 'k'},\n    'moves': [['e4', 'd5'], ['d8', 'd5']],\n    'turn': 'w'},\n   -1),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1),\n  ('four clean moves',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['f3', 'g1'], ['f6', 'g8']],\n    'turn': 'w'},\n   -1)],\n [('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('white moves twice',\n   {'board': {'d2': 'P', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['d2', 'd4']],\n    'turn': 'w'},\n   1),\n  ('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('capture then recapture',\n   {'board': {'d5': 'p', 'd8': 'q', 'e1': 'K', 'e4': 'P', 'e8': 'k'},\n    'moves': [['e4', 'd5'], ['d8', 'd5']],\n    'turn': 'w'},\n   -1),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1),\n  ('four clean moves',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['f3', 'g1'], ['f6', 'g8']],\n    'turn': 'w'},\n   -1)],\n [('clean sequence',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['e7', 'e5']],\n    'turn': 'w'},\n   -1),\n  ('white moves twice',\n   {'board': {'d2': 'P', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e4'], ['d2', 'd4']],\n    'turn': 'w'},\n   1),\n  ('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1)],\n [('black to start',\n   {'board': {'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e7', 'e5'], ['e2', 'e4']],\n    'turn': 'b'},\n   -1),\n  ('captured piece moves',\n   {'board': {'d1': 'Q', 'd8': 'q', 'e1': 'K', 'e8': 'k'},\n    'moves': [['d1', 'd8'], ['d8', 'd1']],\n    'turn': 'w'},\n   1),\n  ('capture own piece',\n   {'board': {'d1': 'Q', 'd2': 'P', 'e1': 'K', 'e8': 'k'}, 'moves': [['d1', 'd2']], 'turn': 'w'},\n   0),\n  ('empty origin', {'board': {'e1': 'K', 'e8': 'k'}, 'moves': [['e2', 'e4']], 'turn': 'w'}, 0),\n  ('vacated square reused',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['g1', 'h3']],\n    'turn': 'w'},\n   2),\n  ('capture then recapture',\n   {'board': {'d5': 'p', 'd8': 'q', 'e1': 'K', 'e4': 'P', 'e8': 'k'},\n    'moves': [['e4', 'd5'], ['d8', 'd5']],\n    'turn': 'w'},\n   -1),\n  ('black captures own',\n   {'board': {'d8': 'q', 'e1': 'K', 'e2': 'P', 'e7': 'p', 'e8': 'k'},\n    'moves': [['e2', 'e3'], ['d8', 'e7']],\n    'turn': 'w'},\n   1),\n  ('four clean moves',\n   {'board': {'e1': 'K', 'e8': 'k', 'g1': 'N', 'g8': 'n'},\n    'moves': [['g1', 'f3'], ['g8', 'f6'], ['f3', 'g1'], ['f6', 'g8']],\n    'turn': 'w'},\n   -1)]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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":"A deterministic toy model with an explicitly stated contract; boards are {square: piece} with white upper-case and black lower-case pieces; no claim of full FIDE Laws conformance. 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-chess_move_legality-move-list-turn-order-own-piece-landing","generated_at":"2026-09-29T14:50:15.789418+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Game servers must reject out-of-turn and self-capturing moves in submitted move lists.","repair":"Reject moves that land on a piece of the mover's own colour.","root_cause":"The destination is never checked for a piece of the mover's colour.","sha256":"fbf913f213afd8eecf759a94c712682d3306f10b6a832d9ee687c3c0a889708c","title":"Self-capture accepted in replay · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.968,"exit_code":1,"observations":[{"actual":-1,"check":"clean sequence","expected":-1,"passed":true},{"actual":1,"check":"white moves twice","expected":1,"passed":true},{"actual":-1,"check":"black to start","expected":-1,"passed":true},{"actual":1,"check":"captured piece moves","expected":1,"passed":true},{"actual":-1,"check":"capture own piece","expected":0,"passed":false},{"actual":0,"check":"empty origin","expected":0,"passed":true},{"actual":2,"check":"vacated square reused","expected":2,"passed":true},{"actual":-1,"check":"black captures own","expected":1,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"clean sequence\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"white moves twice\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"black to start\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"captured piece moves\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"capture own piece\", \"actual\": -1, \"expected\": 0, \"passed\": false}, {\"check\": \"empty origin\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"vacated square reused\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"black captures own\", \"actual\": -1, \"expected\": 1, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.231,"exit_code":1,"observations":[{"actual":-1,"check":"clean sequence","expected":-1,"passed":true},{"actual":1,"check":"white moves twice","expected":1,"passed":true},{"actual":-1,"check":"black to start","expected":-1,"passed":true},{"actual":1,"check":"captured piece moves","expected":1,"passed":true},{"actual":-1,"check":"capture own piece","expected":0,"passed":false},{"actual":0,"check":"empty origin","expected":0,"passed":true},{"actual":2,"check":"vacated square reused","expected":2,"passed":true},{"actual":-1,"check":"black captures own","expected":1,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"clean sequence\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"white moves twice\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"black to start\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"captured piece moves\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"capture own piece\", \"actual\": -1, \"expected\": 0, \"passed\": false}, {\"check\": \"empty origin\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"vacated square reused\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"black captures own\", \"actual\": -1, \"expected\": 1, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.356,"exit_code":0,"observations":[{"actual":-1,"check":"clean sequence","expected":-1,"passed":true},{"actual":1,"check":"white moves twice","expected":1,"passed":true},{"actual":-1,"check":"black to start","expected":-1,"passed":true},{"actual":1,"check":"captured piece moves","expected":1,"passed":true},{"actual":0,"check":"capture own piece","expected":0,"passed":true},{"actual":0,"check":"empty origin","expected":0,"passed":true},{"actual":2,"check":"vacated square reused","expected":2,"passed":true},{"actual":1,"check":"black captures own","expected":1,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"clean sequence\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"white moves twice\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"black to start\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"captured piece moves\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"capture own piece\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"empty origin\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"vacated square reused\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"black captures own\", \"actual\": 1, \"expected\": 1, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}