Repository navigation
What's Changed
- nnue_4k: the packed big-int NNUE engine by @thomasahle in #166
- nnue_4k: rename sunfish_packed.py to sunfish_nnue.py by @thomasahle in #167
- Trainer: compensation-class oversampling (--compboost) by @thomasahle in #168
- Cap null moves at static evaluation by @thomasahle in #169
- Paper: post-release results and the capped-null epilogue by @thomasahle in #170
- Skip ineffective depth-zero IID probe by @thomasahle in #174
- Mate scores carry their distance (issue #11) by @thomasahle in #172
- Fix CI: derive the repo root from file, not a hard-coded path by @thomasahle in #176
- Require an ELO measurement in the PR template by @thomasahle in #175
- Warn that a queued quit turns go depth N into depth 2 by @thomasahle in #179
- Distance-to-mate optimality in both directions, and why the frontier premise cannot be dropped by @thomasahle in #178
- Eventual trichotomy: NMC eliminated, fuel-oracle null, and the finiteness theorem by @thomasahle in #192
- Budget the classic builtin clock with no constant that carries a unit by @thomasahle in #196
- Time management, consolidated: the pool becomes the classic driver's default by @thomasahle in #204
- Cap shallow quiet moves and prove the lazy tail by @thomasahle in #193
- Land tuned null shaping and intrinsic LMR by @thomasahle in #205
- Restore the shallow mate floor by @thomasahle in #206
- Add an adaptive UCI game-parameter tuner by @thomasahle in #208
- Restore the null score guard by @thomasahle in #207
- ctwin: build the driver's two-ply FEN history (twin searched a different tree from black-to-move openings) by @thomasahle in #210
- Anchor the joint tuner to the current null guard by @thomasahle in #212
- ctwin: record that the fidelity gate is interpreter-invariant (pypy3 vs CPython 3.9.19) by @thomasahle in #211
- Cap every shallow move by static gain by @thomasahle in #213
- Unify shallow pruning under lazy caps by @thomasahle in #215
- Record #215 timed confirmation by @thomasahle in #216
- Unify real-move scoring and resolve captures statically by @thomasahle in #218
- Three measurement-surface fixes: PV fifty-move stop, promotion cap coverage, python-chess drift by @thomasahle in #219
- Sharp mate-depth accounting: 3k+4 -> 3k+1, with sharpness certificates by @thomasahle in #214
- Refute the cheap instance of the mate-depth menu's 3k row by @thomasahle in #226
- Spend the proved mate depths in CI: 7/13/19 -> 4/10/16 by @thomasahle in #223
- Organize tuning tools by method by @thomasahle in #222
- Refute the band weakening of the king-capture clauses by @thomasahle in #233
- Evaluate shallow caps as one lazy tail by @thomasahle in #230
- Sync the model's QS admission with the shipped one, and cash it in by @thomasahle in #234
- Fix red master: re-pin the null-probe citations after the target -> t rename by @thomasahle in #235
- Use pentanomial SPRT for Elo decisions by @thomasahle in #231
- The classic builtin clock becomes a per-move budget: soft, a five-fold wall, and no movetime by @thomasahle in #217
- The budget form's measurements, and the last movetime in CI by @thomasahle in #239
- tools/book: measure an opening book, and reweight it under a written rule by @thomasahle in #242
- Measure the per-move overhead the venue actually charges by @thomasahle in #238
- The final fold: (value, move) pairs, ceiling-gated killer, break at the first settled cap by @thomasahle in #236
- Skip a ponder go instead of forgetting the move before it by @thomasahle in #244
- pack.sh: restore --no-hoist-literals + shebang strip by @thomasahle in #246
- tools/book: build a REPERTOIRE book from the CC0 lichess export by @thomasahle in #245
- formal: the null reduction becomes a free parameter — dtm_optimal at every NULL_RED in [3..10] by @thomasahle in #248
- Collect all tuning tools under tools/tune by @thomasahle in #249
- lichess bridge: reconnect the game stream when it drops mid-game by @thomasahle in #250
- Use learned intercept in GP reports by @thomasahle in #252
- Keep gated GP recommendations in the accepted design by @thomasahle in #253
- Speed up informative opponent selection by @thomasahle in #254
- ctwin: make the interpreter cross-check reproducible by @thomasahle in #256
- Make five-tuner comparisons reproducible and crash-safe by @thomasahle in #259
- Ship the packed engine as compressed.py at the repo root by @thomasahle in #257
- Check the README line count against compressed.py by @thomasahle in #260
- Make global search tuning reproducible by @thomasahle in #261
- Harden global search tuning by @thomasahle in #263
- Tune shallow search jointly by @thomasahle in #264
- Recompute tuning consensus before validation by @thomasahle in #262
- Prepare sunfish 2026.1 by @thomasahle in #266
Full Changelog: v2026...v2026.1