{"abstract":"Interposing on the checking file is rejected while unrelated diagonal squares are accepted.","category":"Chess move legality","checks":8,"contract":"Input: {\"board\", \"move\": [from, to]} for a non-king piece whose king may be in check (pins are ignored). Return true if the move is allowed by the check rules: no check means true; double check means false; a single check is answered by capturing the checker or, for a rook, bishop or queen checker, by moving onto a square strictly between it and the king.","evaluation_group":"w2-chess_move_legality-check-evasion-filter","failed_approach":"Defaulting a zero difference to +1 still walks off the checking line.","family":"w2-chess_move_legality-check-evasion-filter-line-step-signs","id":"FA-82536","implementations":{"attempt":{"sha256":"04888542ec9ed29266d232cb2259b4e4088c5468eeb27c42adc3d434008fe021","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    b=x['board']; fr,to=x['move']; p=b[fr]; white=p.isupper()\n    ks=[s for s,v in b.items() if v==('K' if white else 'k')][0]\n    def at(f,r): return b.get(chr(97+f)+str(r+1)) if 0<=f<8 and 0<=r<8 else None\n    def sq(f,r): return chr(97+f)+str(r+1)\n    def attackers(s, by_white):\n        f,r=ord(s[0])-97,int(s[1])-1\n        P,N,B,R,Q=('PNBRQ' if by_white else 'pnbrq')\n        out=[]\n        pr=r-1 if by_white else r+1\n        for df in (-1,1):\n            if at(f+df,pr)==P: out.append(sq(f+df,pr))\n        for df,dr in ((1,2),(2,1),(-1,2),(-2,1),(1,-2),(2,-1),(-1,-2),(-2,-1)):\n            if at(f+df,r+dr)==N: out.append(sq(f+df,r+dr))\n        for df,dr in ((1,0),(-1,0),(0,1),(0,-1),(1,1),(1,-1),(-1,1),(-1,-1)):\n            kinds=(R,Q) if df==0 or dr==0 else (B,Q)\n            ff,rr=f+df,r+dr\n            while 0<=ff<8 and 0<=rr<8:\n                v=at(ff,rr)\n                if v:\n                    if v in kinds: out.append(sq(ff,rr))\n                    break\n                ff+=df; rr+=dr\n        return out\n    checkers=attackers(ks, not white)\n    if len(checkers)>=2: return False\n    if not checkers: return True\n    c=checkers[0]\n    if to==c: return True\n    if b[c].lower() in ('n','p'): return False\n    cf,cr=ord(c[0])-97,int(c[1])-1\n    kf,kr=ord(ks[0])-97,int(ks[1])-1\n    sf=(cf-kf)//abs(cf-kf) if cf!=kf else 1; sr=(cr-kr)//abs(cr-kr) if cr!=kr else 1\n    f,r=kf+sf,kr+sr\n    between=[]\n    while (f,r)!=(cf,cr) and 0<=f<8 and 0<=r<8:\n        between.append(sq(f,r)); f+=sf; r+=sr\n    return to in between\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('no check', {'board': {'b1': 'N', 'e1': 'K', 'e8': 'k'}, 'move': ['b1', 'c3']}, True),\n  ('block rook check',\n   {'board': {'a8': 'k', 'b1': 'N', 'e1': 'K', 'e8': 'r'}, 'move': ['b1', 'c3']}, False),\n  ('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('capture rook checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'h8': 'R'}, 'move': ['h8', 'e8']}, True),\n  ('knight check sidestep piece',\n   {'board': {'a8': 'k', 'b2': 'B', 'd3': 'n', 'e1': 'K'}, 'move': ['b2', 'c3']}, False),\n  ('bishop takes knight checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']}, True),\n  ('cannot block knight',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'f3': 'n'}, 'move': ['d1', 'e2']}, False),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True)],\n [('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('bishop takes knight checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']}, True),\n  ('cannot block knight',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'f3': 'n'}, 'move': ['d1', 'e2']}, False),\n  ('double check block',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r', 'f3': 'n'}, 'move': ['d1', 'e2']},\n   False),\n  ('double check capture one',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']},\n   False),\n  ('diagonal interpose',\n   {'board': {'a5': 'b', 'c1': 'N', 'e1': 'K', 'h8': 'k'}, 'move': ['c1', 'b3']}, False),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)],\n [('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('double check capture one',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']},\n   False),\n  ('diagonal interpose',\n   {'board': {'a5': 'b', 'c1': 'N', 'e1': 'K', 'h8': 'k'}, 'move': ['c1', 'b3']}, False),\n  ('diagonal interpose d2',\n   {'board': {'a5': 'b', 'e1': 'K', 'f3': 'N', 'h8': 'k'}, 'move': ['f3', 'd2']}, True),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('black cannot block white knight',\n   {'board': {'a1': 'K', 'c8': 'b', 'd6': 'N', 'e8': 'k'}, 'move': ['c8', 'd7']}, False),\n  ('irrelevant move in check',\n   {'board': {'a2': 'P', 'a8': 'k', 'e1': 'K', 'e8': 'r'}, 'move': ['a2', 'a3']}, False),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)],\n [('no check', {'board': {'b1': 'N', 'e1': 'K', 'e8': 'k'}, 'move': ['b1', 'c3']}, True),\n  ('block rook check',\n   {'board': {'a8': 'k', 'b1': 'N', 'e1': 'K', 'e8': 'r'}, 'move': ['b1', 'c3']}, False),\n  ('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('capture rook checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'h8': 'R'}, 'move': ['h8', 'e8']}, True),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('black cannot block white knight',\n   {'board': {'a1': 'K', 'c8': 'b', 'd6': 'N', 'e8': 'k'}, 'move': ['c8', 'd7']}, False),\n  ('irrelevant move in check',\n   {'board': {'a2': 'P', 'a8': 'k', 'e1': 'K', 'e8': 'r'}, 'move': ['a2', 'a3']}, False),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)],\n [('no check', {'board': {'b1': 'N', 'e1': 'K', 'e8': 'k'}, 'move': ['b1', 'c3']}, True),\n  ('block rook check',\n   {'board': {'a8': 'k', 'b1': 'N', 'e1': 'K', 'e8': 'r'}, 'move': ['b1', 'c3']}, False),\n  ('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('capture rook checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'h8': 'R'}, 'move': ['h8', 'e8']}, True),\n  ('knight check sidestep piece',\n   {'board': {'a8': 'k', 'b2': 'B', 'd3': 'n', 'e1': 'K'}, 'move': ['b2', 'c3']}, False),\n  ('bishop takes knight checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']}, True),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)]]\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":"102eee2d2c1f273d1ba7692d96e1768e0bf16a9deea1c9ffe87e86fc161def95","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    b=x['board']; fr,to=x['move']; p=b[fr]; white=p.isupper()\n    ks=[s for s,v in b.items() if v==('K' if white else 'k')][0]\n    def at(f,r): return b.get(chr(97+f)+str(r+1)) if 0<=f<8 and 0<=r<8 else None\n    def sq(f,r): return chr(97+f)+str(r+1)\n    def attackers(s, by_white):\n        f,r=ord(s[0])-97,int(s[1])-1\n        P,N,B,R,Q=('PNBRQ' if by_white else 'pnbrq')\n        out=[]\n        pr=r-1 if by_white else r+1\n        for df in (-1,1):\n            if at(f+df,pr)==P: out.append(sq(f+df,pr))\n        for df,dr in ((1,2),(2,1),(-1,2),(-2,1),(1,-2),(2,-1),(-1,-2),(-2,-1)):\n            if at(f+df,r+dr)==N: out.append(sq(f+df,r+dr))\n        for df,dr in ((1,0),(-1,0),(0,1),(0,-1),(1,1),(1,-1),(-1,1),(-1,-1)):\n            kinds=(R,Q) if df==0 or dr==0 else (B,Q)\n            ff,rr=f+df,r+dr\n            while 0<=ff<8 and 0<=rr<8:\n                v=at(ff,rr)\n                if v:\n                    if v in kinds: out.append(sq(ff,rr))\n                    break\n                ff+=df; rr+=dr\n        return out\n    checkers=attackers(ks, not white)\n    if len(checkers)>=2: return False\n    if not checkers: return True\n    c=checkers[0]\n    if to==c: return True\n    if b[c].lower() in ('n','p'): return False\n    cf,cr=ord(c[0])-97,int(c[1])-1\n    kf,kr=ord(ks[0])-97,int(ks[1])-1\n    sf=1 if cf>kf else -1; sr=1 if cr>kr else -1\n    f,r=kf+sf,kr+sr\n    between=[]\n    while (f,r)!=(cf,cr) and 0<=f<8 and 0<=r<8:\n        between.append(sq(f,r)); f+=sf; r+=sr\n    return to in between\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('no check', {'board': {'b1': 'N', 'e1': 'K', 'e8': 'k'}, 'move': ['b1', 'c3']}, True),\n  ('block rook check',\n   {'board': {'a8': 'k', 'b1': 'N', 'e1': 'K', 'e8': 'r'}, 'move': ['b1', 'c3']}, False),\n  ('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('capture rook checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'h8': 'R'}, 'move': ['h8', 'e8']}, True),\n  ('knight check sidestep piece',\n   {'board': {'a8': 'k', 'b2': 'B', 'd3': 'n', 'e1': 'K'}, 'move': ['b2', 'c3']}, False),\n  ('bishop takes knight checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']}, True),\n  ('cannot block knight',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'f3': 'n'}, 'move': ['d1', 'e2']}, False),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True)],\n [('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('bishop takes knight checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']}, True),\n  ('cannot block knight',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'f3': 'n'}, 'move': ['d1', 'e2']}, False),\n  ('double check block',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r', 'f3': 'n'}, 'move': ['d1', 'e2']},\n   False),\n  ('double check capture one',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']},\n   False),\n  ('diagonal interpose',\n   {'board': {'a5': 'b', 'c1': 'N', 'e1': 'K', 'h8': 'k'}, 'move': ['c1', 'b3']}, False),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)],\n [('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('double check capture one',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']},\n   False),\n  ('diagonal interpose',\n   {'board': {'a5': 'b', 'c1': 'N', 'e1': 'K', 'h8': 'k'}, 'move': ['c1', 'b3']}, False),\n  ('diagonal interpose d2',\n   {'board': {'a5': 'b', 'e1': 'K', 'f3': 'N', 'h8': 'k'}, 'move': ['f3', 'd2']}, True),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('black cannot block white knight',\n   {'board': {'a1': 'K', 'c8': 'b', 'd6': 'N', 'e8': 'k'}, 'move': ['c8', 'd7']}, False),\n  ('irrelevant move in check',\n   {'board': {'a2': 'P', 'a8': 'k', 'e1': 'K', 'e8': 'r'}, 'move': ['a2', 'a3']}, False),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)],\n [('no check', {'board': {'b1': 'N', 'e1': 'K', 'e8': 'k'}, 'move': ['b1', 'c3']}, True),\n  ('block rook check',\n   {'board': {'a8': 'k', 'b1': 'N', 'e1': 'K', 'e8': 'r'}, 'move': ['b1', 'c3']}, False),\n  ('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('capture rook checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'h8': 'R'}, 'move': ['h8', 'e8']}, True),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('black cannot block white knight',\n   {'board': {'a1': 'K', 'c8': 'b', 'd6': 'N', 'e8': 'k'}, 'move': ['c8', 'd7']}, False),\n  ('irrelevant move in check',\n   {'board': {'a2': 'P', 'a8': 'k', 'e1': 'K', 'e8': 'r'}, 'move': ['a2', 'a3']}, False),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)],\n [('no check', {'board': {'b1': 'N', 'e1': 'K', 'e8': 'k'}, 'move': ['b1', 'c3']}, True),\n  ('block rook check',\n   {'board': {'a8': 'k', 'b1': 'N', 'e1': 'K', 'e8': 'r'}, 'move': ['b1', 'c3']}, False),\n  ('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('capture rook checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'h8': 'R'}, 'move': ['h8', 'e8']}, True),\n  ('knight check sidestep piece',\n   {'board': {'a8': 'k', 'b2': 'B', 'd3': 'n', 'e1': 'K'}, 'move': ['b2', 'c3']}, False),\n  ('bishop takes knight checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']}, True),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)]]\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":"b4f53b02ce4e299b631a10e342696a1216f452722661fbd243db3be69485e867","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    b=x['board']; fr,to=x['move']; p=b[fr]; white=p.isupper()\n    ks=[s for s,v in b.items() if v==('K' if white else 'k')][0]\n    def at(f,r): return b.get(chr(97+f)+str(r+1)) if 0<=f<8 and 0<=r<8 else None\n    def sq(f,r): return chr(97+f)+str(r+1)\n    def attackers(s, by_white):\n        f,r=ord(s[0])-97,int(s[1])-1\n        P,N,B,R,Q=('PNBRQ' if by_white else 'pnbrq')\n        out=[]\n        pr=r-1 if by_white else r+1\n        for df in (-1,1):\n            if at(f+df,pr)==P: out.append(sq(f+df,pr))\n        for df,dr in ((1,2),(2,1),(-1,2),(-2,1),(1,-2),(2,-1),(-1,-2),(-2,-1)):\n            if at(f+df,r+dr)==N: out.append(sq(f+df,r+dr))\n        for df,dr in ((1,0),(-1,0),(0,1),(0,-1),(1,1),(1,-1),(-1,1),(-1,-1)):\n            kinds=(R,Q) if df==0 or dr==0 else (B,Q)\n            ff,rr=f+df,r+dr\n            while 0<=ff<8 and 0<=rr<8:\n                v=at(ff,rr)\n                if v:\n                    if v in kinds: out.append(sq(ff,rr))\n                    break\n                ff+=df; rr+=dr\n        return out\n    checkers=attackers(ks, not white)\n    if len(checkers)>=2: return False\n    if not checkers: return True\n    c=checkers[0]\n    if to==c: return True\n    if b[c].lower() in ('n','p'): return False\n    cf,cr=ord(c[0])-97,int(c[1])-1\n    kf,kr=ord(ks[0])-97,int(ks[1])-1\n    sf=(cf>kf)-(cf<kf); sr=(cr>kr)-(cr<kr)\n    f,r=kf+sf,kr+sr\n    between=[]\n    while (f,r)!=(cf,cr) and 0<=f<8 and 0<=r<8:\n        between.append(sq(f,r)); f+=sf; r+=sr\n    return to in between\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('no check', {'board': {'b1': 'N', 'e1': 'K', 'e8': 'k'}, 'move': ['b1', 'c3']}, True),\n  ('block rook check',\n   {'board': {'a8': 'k', 'b1': 'N', 'e1': 'K', 'e8': 'r'}, 'move': ['b1', 'c3']}, False),\n  ('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('capture rook checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'h8': 'R'}, 'move': ['h8', 'e8']}, True),\n  ('knight check sidestep piece',\n   {'board': {'a8': 'k', 'b2': 'B', 'd3': 'n', 'e1': 'K'}, 'move': ['b2', 'c3']}, False),\n  ('bishop takes knight checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']}, True),\n  ('cannot block knight',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'f3': 'n'}, 'move': ['d1', 'e2']}, False),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True)],\n [('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('bishop takes knight checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']}, True),\n  ('cannot block knight',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'f3': 'n'}, 'move': ['d1', 'e2']}, False),\n  ('double check block',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r', 'f3': 'n'}, 'move': ['d1', 'e2']},\n   False),\n  ('double check capture one',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']},\n   False),\n  ('diagonal interpose',\n   {'board': {'a5': 'b', 'c1': 'N', 'e1': 'K', 'h8': 'k'}, 'move': ['c1', 'b3']}, False),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)],\n [('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('double check capture one',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']},\n   False),\n  ('diagonal interpose',\n   {'board': {'a5': 'b', 'c1': 'N', 'e1': 'K', 'h8': 'k'}, 'move': ['c1', 'b3']}, False),\n  ('diagonal interpose d2',\n   {'board': {'a5': 'b', 'e1': 'K', 'f3': 'N', 'h8': 'k'}, 'move': ['f3', 'd2']}, True),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('black cannot block white knight',\n   {'board': {'a1': 'K', 'c8': 'b', 'd6': 'N', 'e8': 'k'}, 'move': ['c8', 'd7']}, False),\n  ('irrelevant move in check',\n   {'board': {'a2': 'P', 'a8': 'k', 'e1': 'K', 'e8': 'r'}, 'move': ['a2', 'a3']}, False),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)],\n [('no check', {'board': {'b1': 'N', 'e1': 'K', 'e8': 'k'}, 'move': ['b1', 'c3']}, True),\n  ('block rook check',\n   {'board': {'a8': 'k', 'b1': 'N', 'e1': 'K', 'e8': 'r'}, 'move': ['b1', 'c3']}, False),\n  ('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('capture rook checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'h8': 'R'}, 'move': ['h8', 'e8']}, True),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('black cannot block white knight',\n   {'board': {'a1': 'K', 'c8': 'b', 'd6': 'N', 'e8': 'k'}, 'move': ['c8', 'd7']}, False),\n  ('irrelevant move in check',\n   {'board': {'a2': 'P', 'a8': 'k', 'e1': 'K', 'e8': 'r'}, 'move': ['a2', 'a3']}, False),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)],\n [('no check', {'board': {'b1': 'N', 'e1': 'K', 'e8': 'k'}, 'move': ['b1', 'c3']}, True),\n  ('block rook check',\n   {'board': {'a8': 'k', 'b1': 'N', 'e1': 'K', 'e8': 'r'}, 'move': ['b1', 'c3']}, False),\n  ('interpose on file',\n   {'board': {'a8': 'k', 'd1': 'Q', 'e1': 'K', 'e8': 'r'}, 'move': ['d1', 'e2']}, True),\n  ('capture rook checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'e8': 'r', 'h8': 'R'}, 'move': ['h8', 'e8']}, True),\n  ('knight check sidestep piece',\n   {'board': {'a8': 'k', 'b2': 'B', 'd3': 'n', 'e1': 'K'}, 'move': ['b2', 'c3']}, False),\n  ('bishop takes knight checker',\n   {'board': {'a8': 'k', 'e1': 'K', 'f3': 'n', 'g2': 'B'}, 'move': ['g2', 'f3']}, True),\n  ('black blocks white queen',\n   {'board': {'a1': 'K', 'c6': 'n', 'e1': 'Q', 'e8': 'k'}, 'move': ['c6', 'e7']}, True),\n  ('rank check interpose',\n   {'board': {'a1': 'K', 'a8': 'k', 'b3': 'N', 'h1': 'q'}, 'move': ['b3', 'c1']}, True)]]\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-check-evasion-filter-line-step-signs","generated_at":"2026-09-29T14:50:13.050174+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Move validators gate every move in engines, servers and arbiters; accepting an illegal move or rejecting a legal one corrupts the game record.","repair":"Use the signum of each coordinate difference, which is zero along a file or rank.","root_cause":"The step sign never becomes zero, so a check along a file or rank is walked diagonally.","sha256":"dc6009a17e37b230d0cbb969d55ba9b3321d07d29fc8a5ccd16d45b0a5ae9021","title":"File check walked as a diagonal · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.736,"exit_code":1,"observations":[{"actual":true,"check":"no check","expected":true,"passed":true},{"actual":false,"check":"block rook check","expected":false,"passed":true},{"actual":false,"check":"interpose on file","expected":true,"passed":false},{"actual":true,"check":"capture rook checker","expected":true,"passed":true},{"actual":false,"check":"knight check sidestep piece","expected":false,"passed":true},{"actual":true,"check":"bishop takes knight checker","expected":true,"passed":true},{"actual":false,"check":"cannot block knight","expected":false,"passed":true},{"actual":false,"check":"black blocks white queen","expected":true,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"no check\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"block rook check\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"interpose on file\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"capture rook checker\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"knight check sidestep piece\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"bishop takes knight checker\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"cannot block knight\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"black blocks white queen\", \"actual\": false, \"expected\": true, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.649,"exit_code":1,"observations":[{"actual":true,"check":"no check","expected":true,"passed":true},{"actual":true,"check":"block rook check","expected":false,"passed":false},{"actual":false,"check":"interpose on file","expected":true,"passed":false},{"actual":true,"check":"capture rook checker","expected":true,"passed":true},{"actual":false,"check":"knight check sidestep piece","expected":false,"passed":true},{"actual":true,"check":"bishop takes knight checker","expected":true,"passed":true},{"actual":false,"check":"cannot block knight","expected":false,"passed":true},{"actual":false,"check":"black blocks white queen","expected":true,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"no check\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"block rook check\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"check\": \"interpose on file\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"capture rook checker\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"knight check sidestep piece\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"bishop takes knight checker\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"cannot block knight\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"black blocks white queen\", \"actual\": false, \"expected\": true, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.35,"exit_code":0,"observations":[{"actual":true,"check":"no check","expected":true,"passed":true},{"actual":false,"check":"block rook check","expected":false,"passed":true},{"actual":true,"check":"interpose on file","expected":true,"passed":true},{"actual":true,"check":"capture rook checker","expected":true,"passed":true},{"actual":false,"check":"knight check sidestep piece","expected":false,"passed":true},{"actual":true,"check":"bishop takes knight checker","expected":true,"passed":true},{"actual":false,"check":"cannot block knight","expected":false,"passed":true},{"actual":true,"check":"black blocks white queen","expected":true,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"no check\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"block rook check\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"interpose on file\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"capture rook checker\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"knight check sidestep piece\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"bishop takes knight checker\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"cannot block knight\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"black blocks white queen\", \"actual\": true, \"expected\": true, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}