Key Changes
30% faster NNUE inference on ARM (aarch64)
Coda's NEON int8 L1 kernel previously used vmlal widening multiply-accumulates (four instructions per 16-byte chunk). This adds the ARM dot-product analogue of x86 VNNI — USDOT (i8mm) and SDOT (dotprod) kernels that issue a single dot instruction per chunk per neuron, runtime-selected by CPU feature (i8mm → dotprod → vmlal fallback). Bit-identical output — pure throughput, no eval/search change — lifting NNUE inference ~30% on both an Apple M5 and a Cortex-A76. About +30 Elo at short TCs on ARM.
Correction-history fix
Correction history refines the static eval using the historical error of similar positions. Investigating games where the search struggled to see drawn positions, then comparing what we did against top reference engines, we found a long-standing bug. Coda trained the correction against the raw (uncorrected) eval, whereas the correct approach trains against the corrected residual (the error left after the correction is applied). Raw-training has a stable fixed point at the correction limit regardless of the true error, so it would "rail" toward a phantom value — effectively fighting itself. This fix unlocked a further elo gain on when retuned following the fix, and we found some other correction-history improcements in the process of debugging this.
Licensing
Following community feedback after the 0.9.0 pre-release, we ran a full audit of Coda's codebase and dependencies for licence compatibility. Coda is distributed under the GPLv3. Where we found material that reproduced, or was too closely modelled on, code from a more restrictively-licensed (AGPLv3) reference engine — e.g. some NNUE layout tables and SIMD kernels — we removed or independently reimplemented it (the setwise kernels rewritten clean-room; the threat path reverting to Coda's own pre-existing scalar). These removals cost ~3% NPS cost on some x86 hosts that we accepted for compliance. We now believe Coda complies with all applicable licences, and release binaries now ship a THIRD_PARTY_LICENSES.md with the dependency notices. Audit doc is available here. If you have any concerns, or feel we've missed anything, please open a GitHub issue.
Updated network
Largely the same training recipe as 0.9.0 with minor pipeline improvements; the headline change is that the net is now built entirely with Coda's own standard king-bucket layout, replacing the bespoke layout we removed. A minor net improvement overall that tested +4 in SPRT..
Time management
The cross-move eval-trend signal that steers time allocation is now taken only from genuine played-move searches rather than speculative ones, and the 50-move-rule eval downgrade was extended to tablebase-range scores and applied on every TT read — correcting how Coda budgets time in near-drawn and drifting positions.
Classical eval removed
Coda had a fallback minimal PeSTO material + piece-square fallback eval that has been removed. This helped during some early testing but is now redundant. Shipped binaries embed the net, so this only affects a bare cargo build with no net loaded.
Bug fixes.
Paths to Syzygy tablebases and Polyglot books can now contain spaces (previously the UCI parsing would fail on such paths). We also now support UIs like Arena that add quotes to the path.
Strength
Overall: +22 Elo cross-engine vs 0.9.0.
(Tested: 50-round top-20 round-robin, 10s+0.1s, 1 thread, ponder off, no TB, Hash=256MB, noob_4moves openings, 16C/32T EPYC 7351P).