Facón 1.1 - Herrumbre
+120 Elo over 1.0 (gauntlet testing vs field Elo ~1358, 1040 games at 2min+1sec)
Search
- Killer move heuristic: quiet moves that cause a beta cutoff are stored per-ply (two slots per node) and tried before other quiet moves in sibling nodes. Improves move ordering in quiet positions where MVV-LVA has no effect.
- Dynamic time management: replaced the fixed time budget with a soft/hard limit model. The soft limit is extended when the PV move changes between iterations (×1.5) or the score drops by ≥30 centipawns (×1.25). The hard limit acts as an absolute ceiling.
- seldepth tracking: maximum depth reached including quiescence search is tracked and reported in the UCI info line each iteration.
Evaluation
- King safety: penalty for enemy pieces attacking the king zone (king square plus adjacent squares). Attack weights: Knight=2, Bishop=2, Rook=3, Queen=5 (queens counted twice — once as diagonal, once as straight attacker). Penalty grows quadratically with total weight and scales with game phase (middlegame only).
Stability
- Abort flag (
abort_search_): when the hard time limit is hit inside the search, a flag is set and every level of the call stack returns immediately. Ensures allunmake_move()calls execute, leaving the board consistent for the next search. - Root best move tracking (
root_best_move_): the best move at ply 0 is saved directly insidenegamax()whenever a new best is found. Eliminatesbestmove 0000outputs. is_legal()piece ownership check: verifies that the from-square contains a piece belonging to the side to move before the expensive board copy. Eliminates ghost moves from stale TT entries.- TT move validation: TT moves are verified against the generated move list before use. Prevents hash collisions from inserting garbage into move ordering.
- TT pollution prevention: if
abort_search_is set when returning from a child node, the result is discarded without storing to the TT. safe_movepre-seed: the first legal move is stored as a fallback before iterative deepening begins. Guaranteesbestmoveis never0000even if depth 1 is aborted.
Cleanup
probe_move()removed fromtt.h/tt.cpp(dead code).- Non-ASCII characters removed from all source files.
- All source file headers updated to
Facon 1.1 — Herrumbre.
Checksums (SHA1)
231d9973d9f1062a40b6b39c4ac3f3ea872efcd6 facon-1.1
028e1671bf4fcad4fe19c1f5876e216709daf924 facon-1.1.exe