summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2026-10-14 18:54:36 -0700
committerScott Gasch <[email protected]>2026-10-14 18:54:36 -0700
commitd9419c104e9fe193649931cee167b819044c6ca3 (patch)
tree57391e9e55b802af4c04cff87fefb4ec28c0a776
parentba0eac31639a3eb076ad17e8cd40f57990a53c00 (diff)
Finish work to unify search. Play tested, even as expected.
Unfortunately slightly slower.
-rw-r--r--src/TODO22
-rw-r--r--src/split.c7
2 files changed, 7 insertions, 22 deletions
diff --git a/src/TODO b/src/TODO
index d7bff4c..5be21bf 100644
--- a/src/TODO
+++ b/src/TODO
@@ -6,24 +6,6 @@ Think about when to avoid nullmove pruning based on checks in the line
r2r4/p4pk1/2p3p1/1p1nPR2/5p1Q/2N5/PPPq4/1K4R1 w - - 0 0 -- check extension crazy
-2026-09-17: search.c's extended futility pruning (VALUE_KNIGHT/VALUE_ROOK
-gate, PREPARE_TO_TRY_MOVES) now folds in iImprovement + iPositional[side]
-(the same per-tier p50 typical-value estimate QSearch's own futility gate
-uses), but still uses one flat margin regardless of which Eval() exit tier
-(PLY_INFO.uLastPositionalSource) produced iEval/iPositional at that node.
-iPositional corrects for a tier's mean bias, not its spread -- a coarse
-(super-lazy) read could carry more variance/tail risk than a fine one even
-after mean-centering. Rather than a categorical "never prune from
-super-lazy" rule (rejected as too blunt/magic-number-shaped -- iPositional
-already replaces trust-by-category with trust-by-measured-bias), the
-principled fix is a real EFP_BASE_MARGIN_BY_SOURCE[tier], calibrated the
-same way as QSearch's FUTILITY_BASE_MARGIN_BY_SOURCE (CALIBRATE_QSEARCH_
-FUTILITY-style harness: search the would-be-pruned move anyway, bucket
-surprise rate by distance-short-of-bar AND uLastPositionalSource, check
-whether the tiers actually need different margins here too). Not yet
-built -- deferred behind self-play validation of today's iPositional/
-futility-margin changes landing first.
-
2026-09-18: sharded ASSERT-fuzzing harness -- the technique that found
the CommonSearchInit PV-staleness bug (DEBUG binary + gdb, batch mode,
`script <shard>.ep_` at a shallow sd, let it run until either an
@@ -74,8 +56,6 @@ hashed eval terms.
early-exits as soon as a 2nd legal move is found rather than
generating the full list.
-2026-10-04: Reign in extensions the make the tree smaller.
-
2026-10-04: Modify self-play harness to record eval score / PVs per
move in the PGN output. Make self-play harness able to play crafty
and then test the HEAD/candidate against crafty.
@@ -84,3 +64,5 @@ Eval term for connected passers vs. rooks. Or 2+ passers vs. rooks.
Poor king play -- tell it to support own passers or blockade enemy
passers once king activity phase starts.
+
+Self-play lite and heavy.
diff --git a/src/split.c b/src/split.c
index cf45de6..66f44a3 100644
--- a/src/split.c
+++ b/src/split.c
@@ -1206,8 +1206,11 @@ Return value:
ASSERT(IS_VALID_SCORE(iBestScore));
ASSERT(uMoveNum < MAX_MOVES_PER_PLY);
- ASSERT(IS_SAME_MOVE(mv,
- ctx->sMoveStack.mvf[ctx->sMoveStack.uBegin[ctx->uPly]+uMoveNum].mv));
+ ASSERT(
+ IS_SAME_MOVE(mv,
+ ctx->sMoveStack.mvf[ctx->sMoveStack.uBegin[ctx->uPly]+uMoveNum].mv
+ )
+ );
ASSERT(uDepth <= MAX_DEPTH_PER_SEARCH);
ASSERT(IS_VALID_SCORE(iAlpha));
ASSERT(IS_VALID_SCORE(iBeta));