Move build, testing, UCI and TUI details into focused guides while keeping the README concise and preserving the engine overview, ratings and credits.
Co-authored-by: GPT 5.6 Luna <codex@openai.com>
Select SIMD kernels at startup and share the AVX-512 packing layout across
scalar, x86 and NEON inference using CJ's packing schedule. Preserve the
canonical network file format and provide backend diagnostics and overrides.
Add universal release targets, including a combined macOS executable. Tag
releases publish only universal binaries; individual SIMD variants remain
available through manual workflow runs.
Validate native x86 backends, Windows/Wine and AArch64/QEMU, older CPU and
OS vector-state fallback, network export/reload, NNUE state and UCI searches.
Tyrfing passes 17731 state comparisons per native backend and the full bench.
AVX-512/VNNI execution and native macOS validation require suitable runners.
Unroll threat updates and rebuilds across four vectors on every SIMD
backend. Add a shared paired widening-load helper with full-register NEON
loads and a fallback using existing x86 primitives.
Use NEON SADALP and saturating even/odd byte products while preserving the
existing arithmetic contract. Reduce dot-loop register pressure on SSE2
and NEON to eliminate accumulator spills. Keep explicit PSQ unrolling on
SSE2, AVX2 and NEON, where measurements and code generation support it.
Add exhaustive byte-product and paired-load checks, PSQ wrapping/tail
oracles, and documentation of backend choices and arithmetic contracts.
Validation: shared correctness suites on scalar, SSE2, SSSE3, SSE4.1,
AVX2 and NEON under QEMU; tail-width checks; all selected engine builds;
AVX-512/VNNI compile and assembly checks; make dev and 49 Python/UCI tests.
Depth-13 bench remains 5551733 nodes. Eight paired fixed-node UCI runs on
a Ryzen 5900X show a 7.84% native AVX2 NPS gain (95% interval 7.37-8.32%)
with matching per-position nodes, depths and best moves. ARM is not timed
natively and AVX-512 is not executed on this host.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Add native Intel macOS/SSE2 and Apple Silicon/NEON Make targets with a
macOS 11 deployment target and Apple ld stack settings.
Build each release artifact in its own CI job. Manual dispatch selects one
target or platform and can publish it to an existing release tag, using
current workflow tooling with the exact tagged source. Give every target
its own checksum and archive so uploads leave other release assets intact.
Document source selection, Mac builds and adding artifacts to an existing
release without moving its tag.
Validation: actionlint, 13 release tests, all 15 target build plans and
both Mac convenience targets. Single-target Linux builds from current
and 1.5.1-dev source both matched bench 5551733. Native Mac compilation
still needs validation on GitHub runners.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Remove push and pull-request triggers from the correctness workflow and
document how to start it manually. Release workflows retain their tag
triggers.
Validation: actionlint and git diff --check. Engine code is unchanged.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Extend the existing vec* API with a shared x86 128-bit backend and a small
AArch64 NEON adapter, preserving integer arithmetic and inference layout.
SSE4.1 selects native int32 min/max and multiplication intrinsics.
Use feature-set names for Make targets and release artifacts, with CPU
tuning selected separately through TUNE. Preserve the historical download
guide in the README and scope the new names to versions after 1.5.0.
Add shared SIMD and inference tests, native ARM CI, minimum x86 CPU checks,
and Linux ARM release builds. Check full v3/v4 requirements before running
release benches.
Validation: all six scalar/SSE2/SSSE3/SSE4.1/AVX2/NEON correctness suites,
41 Python tests, production bench 5551733, workflow lint and release dry
runs. NEON also passes under QEMU Cortex-A53, including full-engine perft
and single-/four-thread searches.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Clamp depth-scaled bonuses and compute complete history updates in int32,
narrowing only the final value to int16. Apply continuation-history gravity
to each individual entry so its value remains bounded. Keep table layouts
unchanged and use the same helper for quiet and capture histories.
Add the matetrack overflow position as a UCI regression. It fails on the
old checked binary; the fixed engine also completes a 1M-node reproduction.
Checked and optimized make dev builds pass, as do all 36 Python tests and
a checked 280-position matetrack run without runtime failures.
Eight paired timed UCI runs measured -0.06% NPS change, with a 95% bootstrap
interval of [-1.98%, +1.92%]. Playing strength has not been tested.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Store piece kind and color in a private uint8 payload, add construction and field access helpers, and migrate all constructors. Add packed representation tests while preserving defaults and sentinels.
Validated with make dev, packed-piece, move-generation and NNUE tests, and all 35 Python regression tests.
Co-authored-by: GPT-6 Astra <codex@openai.com>
Use explicit safe iterators for File, Rank, and Square traversal so compile-time generation remains compatible with Nim 2.2.2 and newer. Relax the Nimble and README version requirements accordingly.
Co-authored-by: Codex (GPT-6) <codex@openai.com>
Use the seeded generator for independent DFRC back ranks and an equal choice of 8 or 9 plies per opening. Preserve explicit lengths and use doMove for known legal moves. Document the options and add regression coverage.
Co-authored-by: Codex (GPT-6) <codex@openai.com>
Rescale loaded L1 biases with L1_BIAS_SHIFT for networks that add
biases after requantization. Keep the default shift at zero for
existing networks and document bias compatibility and dual activation.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Train a separate instrumented executable on configurable node and time workloads, merge its profiles, and rebuild with profile use. Preserve EXE overrides, reject standalone-test training, and leave default dev and OpenBench behavior unchanged.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Run normalized FEN subsets with real node or time budgets, recording final search summaries and optional perf counters. Require per-position node/depth/best-move agreement for deterministic comparisons and cover the driver with regression tests.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Reuse the existing scalar and SIMD update kernels with one move decode for both perspectives, retaining the separate king-refresh path. Extend fresh-versus-incremental checks to all Chess960 castling arrangements, including stationary pieces and king/rook swaps.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Cache active limit kinds and bypass limit-list scans when no hard budget can expire. Keep node limits unconditional and preserve the 1024-node clock sampling cadence. Correctness and limiter regressions are introduced separately.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Check depth limits between whole iterative-deepening iterations instead of interrupting later PV lines. Preserve real node and time cutoffs, including mixed budgets, and cover limiter state transitions with mandatory diagnostics.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Clamp root retry depth to one so repeated fail-high reductions cannot return an empty quiescence PV and stop before the node budget. Strengthen the warm-TT and late-worker regression.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Transpose continuation history for sibling locality and resolve the shared 1/2/4-ply row pointers once per move list. Keep all score/update semantics and omit quiet-history code from capture-only scoring.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Select a compile-time pawn generator for each color so shifts, source offsets and rank masks are constants. Preserve move ordering and legality masks.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Read king/rook metadata only in the branches that need it, and obtain the previous en-passant target from the copied position. Avoid keeping unused values live across position-stack growth.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Use direct home-rank king/rook destinations and one union occupancy test per side. Preserve Chess960 occupancy removal and attack-path checks.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Make the picker/scorer's quiescence mode static and skip killer/countermove probes that cannot match captures. Depends on capture-only generation excluding quiet castling.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Restore the capture-only contract used by quiescence. Add capture-list/state/hash/undo/clone invariants, all special-move flags, and cleared castling paths for all 960 arrangements and both colors.
This correctness fix changes search nodes; throughput measurements use a separately saved capture-correct baseline.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Keep CPU timing for single-thread benchmarks and use monotonic wall time for multithreaded NPS instead of summed process CPU time.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Introduce idle-state copyFrom, retain worker allocations across setup/network changes, and copy only live accumulator/update prefixes. Extend NNUE regressions to cover reused storage and self-rebinding.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Round allocations to their required alignment, advise the entire allocation, and retain aligned allocation/free when THP is unavailable. Add a forced noTHP path and alignment regressions.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Remove the custom copy hook so shrinking a position stack does not clear popped entries. Enforce the raw-copy contract with a compile-time doAssert.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Validate unsupported time controls and pondering synchronously so rejected requests cannot strand the busy flag or block stop/wait. Test rejected requests and allowed time-control exemptions.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Validate perft summaries, repair imported verbose output and crash reporting, and return reliable suite exit statuses in serial and parallel modes. Include test-tool regressions.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Allow standalone MAIN targets and extra Nim flags through make dev. Add paired search/perft measurements and focused NNUE inference and worker-setup benchmarks.
Co-authored-by: Codex (GPT-6 Astra) <codex@openai.com>
Removes the temporary `and not move.isEnPassant()` guards that kept en
passant out of capture history, capture-history LMR, ttCapture and the
failed-capture malus. En passant now scores and updates capture history
like any other capture, with the victim looked up via captureSquare().
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
isCapture() now returns true for en passant moves; the new captureSquare()
helper disambiguates the to-be-captured square (targetSquare for normal
captures, targetSquare xor 8 for en passant). movegen and eval route the
captured-piece lookup through it, removing the bespoke ep square math and
the separate ep-removal block.
En passant is deliberately kept out of the search histories for now via
explicit `and not move.isEnPassant()` guards, so bench is unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>