{"abstract":"The black king may walk onto the rook's rank or file.","category":"Chess move legality","checks":8,"contract":"Input: {\"wk\", \"wr\", \"bk\"} squares (black to move). Return the sorted squares the black king may move to: on the board, not adjacent to the white king, and not attacked by the rook along a rank or file (the white king blocks the rook; the black king's origin does not). Capturing the rook is legal when the rook is not adjacent to the white king.","evaluation_group":"w2-chess_move_legality-krk-escape-squares","failed_approach":"Checking only the file misses rank attacks.","family":"w2-chess_move_legality-krk-escape-squares-rook-line-membership","id":"FA-82721","implementations":{"attempt":{"sha256":"c46c46c93c1788aeda09280d674bc580a164d180114d3b43fdfa7ad9146dfc20","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    def c(q): return ord(q[0])-97,int(q[1])-1\n    wk,wr,bk=c(x['wk']),c(x['wr']),c(x['bk'])\n    def rook_hits(t):\n        if wr==t: return False\n        if wr[0]!=t[0]: return False\n        sf=(t[0]>wr[0])-(t[0]<wr[0]); sr=(t[1]>wr[1])-(t[1]<wr[1])\n        f,r=wr[0]+sf,wr[1]+sr\n        while (f,r)!=t:\n            if (f,r)==wk: return False\n            f+=sf; r+=sr\n        return True\n    out=[]\n    for df in (-1,0,1):\n        for dr in (-1,0,1):\n            if not (df or dr): continue\n            t=(bk[0]+df,bk[1]+dr)\n            if not (0<=t[0]<8 and 0<=t[1]<8): continue\n            if max(abs(t[0]-wk[0]),abs(t[1]-wk[1]))<=1: continue\n            if rook_hits(t): continue\n            out.append(chr(97+t[0])+str(t[1]+1))\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('retreat along rook file', {'bk': 'e5', 'wk': 'a1', 'wr': 'e1'},\n   ['d4', 'd5', 'd6', 'f4', 'f5', 'f6']),\n  ('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('rank cut', {'bk': 'd8', 'wk': 'a1', 'wr': 'h6'}, ['c7', 'c8', 'd7', 'e7', 'e8']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('retreat along rook file', {'bk': 'e5', 'wk': 'a1', 'wr': 'e1'},\n   ['d4', 'd5', 'd6', 'f4', 'f5', 'f6']),\n  ('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('rank cut', {'bk': 'd8', 'wk': 'a1', 'wr': 'h6'}, ['c7', 'c8', 'd7', 'e7', 'e8']),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('rank cut', {'bk': 'd8', 'wk': 'a1', 'wr': 'h6'}, ['c7', 'c8', 'd7', 'e7', 'e8']),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('retreat along rook file', {'bk': 'e5', 'wk': 'a1', 'wr': 'e1'},\n   ['d4', 'd5', 'd6', 'f4', 'f5', 'f6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])]]\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":"5ace257b24c39732973ed09dd59555af42737cc46d2667f30535161012fc35e2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    def c(q): return ord(q[0])-97,int(q[1])-1\n    wk,wr,bk=c(x['wk']),c(x['wr']),c(x['bk'])\n    def rook_hits(t):\n        if wr==t: return False\n        if wr[0]!=t[0] or wr[1]!=t[1]: return False\n        sf=(t[0]>wr[0])-(t[0]<wr[0]); sr=(t[1]>wr[1])-(t[1]<wr[1])\n        f,r=wr[0]+sf,wr[1]+sr\n        while (f,r)!=t:\n            if (f,r)==wk: return False\n            f+=sf; r+=sr\n        return True\n    out=[]\n    for df in (-1,0,1):\n        for dr in (-1,0,1):\n            if not (df or dr): continue\n            t=(bk[0]+df,bk[1]+dr)\n            if not (0<=t[0]<8 and 0<=t[1]<8): continue\n            if max(abs(t[0]-wk[0]),abs(t[1]-wk[1]))<=1: continue\n            if rook_hits(t): continue\n            out.append(chr(97+t[0])+str(t[1]+1))\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('retreat along rook file', {'bk': 'e5', 'wk': 'a1', 'wr': 'e1'},\n   ['d4', 'd5', 'd6', 'f4', 'f5', 'f6']),\n  ('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('rank cut', {'bk': 'd8', 'wk': 'a1', 'wr': 'h6'}, ['c7', 'c8', 'd7', 'e7', 'e8']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('retreat along rook file', {'bk': 'e5', 'wk': 'a1', 'wr': 'e1'},\n   ['d4', 'd5', 'd6', 'f4', 'f5', 'f6']),\n  ('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('rank cut', {'bk': 'd8', 'wk': 'a1', 'wr': 'h6'}, ['c7', 'c8', 'd7', 'e7', 'e8']),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('rank cut', {'bk': 'd8', 'wk': 'a1', 'wr': 'h6'}, ['c7', 'c8', 'd7', 'e7', 'e8']),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('retreat along rook file', {'bk': 'e5', 'wk': 'a1', 'wr': 'e1'},\n   ['d4', 'd5', 'd6', 'f4', 'f5', 'f6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])]]\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":"a4a3cf757281ae556cfd2e70ada3cf43d45207760a866f600a1571b8e3beabda","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    def c(q): return ord(q[0])-97,int(q[1])-1\n    wk,wr,bk=c(x['wk']),c(x['wr']),c(x['bk'])\n    def rook_hits(t):\n        if wr==t: return False\n        if wr[0]!=t[0] and wr[1]!=t[1]: return False\n        sf=(t[0]>wr[0])-(t[0]<wr[0]); sr=(t[1]>wr[1])-(t[1]<wr[1])\n        f,r=wr[0]+sf,wr[1]+sr\n        while (f,r)!=t:\n            if (f,r)==wk: return False\n            f+=sf; r+=sr\n        return True\n    out=[]\n    for df in (-1,0,1):\n        for dr in (-1,0,1):\n            if not (df or dr): continue\n            t=(bk[0]+df,bk[1]+dr)\n            if not (0<=t[0]<8 and 0<=t[1]<8): continue\n            if max(abs(t[0]-wk[0]),abs(t[1]-wk[1]))<=1: continue\n            if rook_hits(t): continue\n            out.append(chr(97+t[0])+str(t[1]+1))\n    return sorted(out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('retreat along rook file', {'bk': 'e5', 'wk': 'a1', 'wr': 'e1'},\n   ['d4', 'd5', 'd6', 'f4', 'f5', 'f6']),\n  ('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('rank cut', {'bk': 'd8', 'wk': 'a1', 'wr': 'h6'}, ['c7', 'c8', 'd7', 'e7', 'e8']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('retreat along rook file', {'bk': 'e5', 'wk': 'a1', 'wr': 'e1'},\n   ['d4', 'd5', 'd6', 'f4', 'f5', 'f6']),\n  ('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('rank cut', {'bk': 'd8', 'wk': 'a1', 'wr': 'h6'}, ['c7', 'c8', 'd7', 'e7', 'e8']),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('white king shields', {'bk': 'd5', 'wk': 'e3', 'wr': 'e1'},\n   ['c4', 'c5', 'c6', 'd6', 'e5', 'e6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('rank cut', {'bk': 'd8', 'wk': 'a1', 'wr': 'h6'}, ['c7', 'c8', 'd7', 'e7', 'e8']),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])],\n [('retreat along rook file', {'bk': 'e5', 'wk': 'a1', 'wr': 'e1'},\n   ['d4', 'd5', 'd6', 'f4', 'f5', 'f6']),\n  ('capture undefended rook', {'bk': 'e5', 'wk': 'a1', 'wr': 'e4'}, ['d5', 'd6', 'e4', 'f5', 'f6']),\n  ('capture defended rook', {'bk': 'e5', 'wk': 'e3', 'wr': 'e4'}, ['d5', 'd6', 'f5', 'f6']),\n  ('diagonal rook capture', {'bk': 'e5', 'wk': 'a1', 'wr': 'f4'}, ['d5', 'd6', 'e6', 'f4']),\n  ('back rank mate', {'bk': 'h8', 'wk': 'g6', 'wr': 'a8'}, []),\n  ('corner king', {'bk': 'a8', 'wk': 'c3', 'wr': 'b7'}, ['b7']),\n  ('rook far file', {'bk': 'e5', 'wk': 'h1', 'wr': 'c2'},\n   ['d4', 'd5', 'd6', 'e4', 'e6', 'f4', 'f5', 'f6']),\n  ('shield on rank', {'bk': 'e5', 'wk': 'c6', 'wr': 'a6'}, ['d4', 'e4', 'e6', 'f4', 'f5', 'f6'])]]\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-krk-escape-squares-rook-line-membership","generated_at":"2026-09-29T14:50:14.708514+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Endgame tablebase generators and mate detectors depend on exact escape squares.","repair":"A rook attacks squares sharing its file or its rank.","root_cause":"The line test requires both file and rank to match instead of either.","sha256":"ccedd36c6586e07558503c1f3c3a7b090d7ddcdfccdd88bb927f45927968e079","title":"Rook attacks only its own square · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.062,"exit_code":1,"observations":[{"actual":["d4","d5","d6","f4","f5","f6"],"check":"retreat along rook file","expected":["d4","d5","d6","f4","f5","f6"],"passed":true},{"actual":["c4","c5","c6","d6","e5","e6"],"check":"white king shields","expected":["c4","c5","c6","d6","e5","e6"],"passed":true},{"actual":["d4","d5","d6","e4","f4","f5","f6"],"check":"capture undefended rook","expected":["d5","d6","e4","f5","f6"],"passed":false},{"actual":["d5","d6","f5","f6"],"check":"capture defended rook","expected":["d5","d6","f5","f6"],"passed":true},{"actual":["d4","d5","d6","e4","e6","f4"],"check":"diagonal rook capture","expected":["d5","d6","e6","f4"],"passed":false},{"actual":["c7","c8","d7","e7","e8"],"check":"rank cut","expected":["c7","c8","d7","e7","e8"],"passed":true},{"actual":["d4","d5","d6","e4","e6","f4","f5","f6"],"check":"rook far file","expected":["d4","d5","d6","e4","e6","f4","f5","f6"],"passed":true},{"actual":["d4","e4","e6","f4","f5","f6"],"check":"shield on rank","expected":["d4","e4","e6","f4","f5","f6"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"retreat along rook file\", \"actual\": [\"d4\", \"d5\", \"d6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d4\", \"d5\", \"d6\", \"f4\", \"f5\", \"f6\"], \"passed\": true}, {\"check\": \"white king shields\", \"actual\": [\"c4\", \"c5\", \"c6\", \"d6\", \"e5\", \"e6\"], \"expected\": [\"c4\", \"c5\", \"c6\", \"d6\", \"e5\", \"e6\"], \"passed\": true}, {\"check\": \"capture undefended rook\", \"actual\": [\"d4\", \"d5\", \"d6\", \"e4\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d5\", \"d6\", \"e4\", \"f5\", \"f6\"], \"passed\": false}, {\"check\": \"capture defended rook\", \"actual\": [\"d5\", \"d6\", \"f5\", \"f6\"], \"expected\": [\"d5\", \"d6\", \"f5\", \"f6\"], \"passed\": true}, {\"check\": \"diagonal rook capture\", \"actual\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\"], \"expected\": [\"d5\", \"d6\", \"e6\", \"f4\"], \"passed\": false}, {\"check\": \"rank cut\", \"actual\": [\"c7\", \"c8\", \"d7\", \"e7\", \"e8\"], \"expected\": [\"c7\", \"c8\", \"d7\", \"e7\", \"e8\"], \"passed\": true}, {\"check\": \"rook far file\", \"actual\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"passed\": true}, {\"check\": \"shield on rank\", \"actual\": [\"d4\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d4\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.829,"exit_code":1,"observations":[{"actual":["d4","d5","d6","e4","e6","f4","f5","f6"],"check":"retreat along rook file","expected":["d4","d5","d6","f4","f5","f6"],"passed":false},{"actual":["c4","c5","c6","d6","e5","e6"],"check":"white king shields","expected":["c4","c5","c6","d6","e5","e6"],"passed":true},{"actual":["d4","d5","d6","e4","e6","f4","f5","f6"],"check":"capture undefended rook","expected":["d5","d6","e4","f5","f6"],"passed":false},{"actual":["d5","d6","e6","f5","f6"],"check":"capture defended rook","expected":["d5","d6","f5","f6"],"passed":false},{"actual":["d4","d5","d6","e4","e6","f4","f5","f6"],"check":"diagonal rook capture","expected":["d5","d6","e6","f4"],"passed":false},{"actual":["c7","c8","d7","e7","e8"],"check":"rank cut","expected":["c7","c8","d7","e7","e8"],"passed":true},{"actual":["d4","d5","d6","e4","e6","f4","f5","f6"],"check":"rook far file","expected":["d4","d5","d6","e4","e6","f4","f5","f6"],"passed":true},{"actual":["d4","e4","e6","f4","f5","f6"],"check":"shield on rank","expected":["d4","e4","e6","f4","f5","f6"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"retreat along rook file\", \"actual\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d4\", \"d5\", \"d6\", \"f4\", \"f5\", \"f6\"], \"passed\": false}, {\"check\": \"white king shields\", \"actual\": [\"c4\", \"c5\", \"c6\", \"d6\", \"e5\", \"e6\"], \"expected\": [\"c4\", \"c5\", \"c6\", \"d6\", \"e5\", \"e6\"], \"passed\": true}, {\"check\": \"capture undefended rook\", \"actual\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d5\", \"d6\", \"e4\", \"f5\", \"f6\"], \"passed\": false}, {\"check\": \"capture defended rook\", \"actual\": [\"d5\", \"d6\", \"e6\", \"f5\", \"f6\"], \"expected\": [\"d5\", \"d6\", \"f5\", \"f6\"], \"passed\": false}, {\"check\": \"diagonal rook capture\", \"actual\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d5\", \"d6\", \"e6\", \"f4\"], \"passed\": false}, {\"check\": \"rank cut\", \"actual\": [\"c7\", \"c8\", \"d7\", \"e7\", \"e8\"], \"expected\": [\"c7\", \"c8\", \"d7\", \"e7\", \"e8\"], \"passed\": true}, {\"check\": \"rook far file\", \"actual\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"passed\": true}, {\"check\": \"shield on rank\", \"actual\": [\"d4\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d4\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.442,"exit_code":0,"observations":[{"actual":["d4","d5","d6","f4","f5","f6"],"check":"retreat along rook file","expected":["d4","d5","d6","f4","f5","f6"],"passed":true},{"actual":["c4","c5","c6","d6","e5","e6"],"check":"white king shields","expected":["c4","c5","c6","d6","e5","e6"],"passed":true},{"actual":["d5","d6","e4","f5","f6"],"check":"capture undefended rook","expected":["d5","d6","e4","f5","f6"],"passed":true},{"actual":["d5","d6","f5","f6"],"check":"capture defended rook","expected":["d5","d6","f5","f6"],"passed":true},{"actual":["d5","d6","e6","f4"],"check":"diagonal rook capture","expected":["d5","d6","e6","f4"],"passed":true},{"actual":["c7","c8","d7","e7","e8"],"check":"rank cut","expected":["c7","c8","d7","e7","e8"],"passed":true},{"actual":["d4","d5","d6","e4","e6","f4","f5","f6"],"check":"rook far file","expected":["d4","d5","d6","e4","e6","f4","f5","f6"],"passed":true},{"actual":["d4","e4","e6","f4","f5","f6"],"check":"shield on rank","expected":["d4","e4","e6","f4","f5","f6"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"retreat along rook file\", \"actual\": [\"d4\", \"d5\", \"d6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d4\", \"d5\", \"d6\", \"f4\", \"f5\", \"f6\"], \"passed\": true}, {\"check\": \"white king shields\", \"actual\": [\"c4\", \"c5\", \"c6\", \"d6\", \"e5\", \"e6\"], \"expected\": [\"c4\", \"c5\", \"c6\", \"d6\", \"e5\", \"e6\"], \"passed\": true}, {\"check\": \"capture undefended rook\", \"actual\": [\"d5\", \"d6\", \"e4\", \"f5\", \"f6\"], \"expected\": [\"d5\", \"d6\", \"e4\", \"f5\", \"f6\"], \"passed\": true}, {\"check\": \"capture defended rook\", \"actual\": [\"d5\", \"d6\", \"f5\", \"f6\"], \"expected\": [\"d5\", \"d6\", \"f5\", \"f6\"], \"passed\": true}, {\"check\": \"diagonal rook capture\", \"actual\": [\"d5\", \"d6\", \"e6\", \"f4\"], \"expected\": [\"d5\", \"d6\", \"e6\", \"f4\"], \"passed\": true}, {\"check\": \"rank cut\", \"actual\": [\"c7\", \"c8\", \"d7\", \"e7\", \"e8\"], \"expected\": [\"c7\", \"c8\", \"d7\", \"e7\", \"e8\"], \"passed\": true}, {\"check\": \"rook far file\", \"actual\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d4\", \"d5\", \"d6\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"passed\": true}, {\"check\": \"shield on rank\", \"actual\": [\"d4\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"expected\": [\"d4\", \"e4\", \"e6\", \"f4\", \"f5\", \"f6\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}