Node Lookups & CI Hardening - #775
Merged
Merged
Conversation
Co-authored-by: Sergey Vershinin <4435150+sergey-v9@users.noreply.github.com>
The `build_javascript` job exported `CC=gcc`/`CXX=g++` for every OS. On Windows `node-gyp` ignores both and builds with MSVC, but NumKong's ISA probe reads the compiler from `$CC` while still emitting MSVC flag syntax, so it shells out to `gcc /c /arch:AVX2 ... /nologo`. Every probe fails, the failures are swallowed, and `nk_probes.h` lands with all 39 `NK_TARGET_*` set to zero. The addon still builds and passes the test suite -- dynamic dispatch just has no kernels to choose from -- so the result is a scalar-only binary shipped to every Windows npm user. Scope the variables to the Linux step and let the probe fall back to `cl.exe`, which enables Haswell and Skylake. Co-authored-by: Evgeniy Peshkov <2716874+GraDea@users.noreply.github.com> Co-authored-by: Ash Vardanian <1983160+ashvardanian@users.noreply.github.com>
Co-Authored-By: Tang Donghai <72755185+tang-hi@users.noreply.github.com>
`std::hash` is the identity for integers on libstdc++ and libc++. Our open-addressing tables mask that hash into a power-of-2 slot count and probe linearly until an empty slot, so consecutive keys land in adjacent slots and coalesce into a single contiguous run. Insertions and lookups both scan that run end to end, making the whole build quadratic. Closes #770. Co-Authored-By: Chakshu Dhannawat <65147507+chakshu-dhannawat@users.noreply.github.com> Co-Authored-By: Ash Vardanian <1983160+ashvardanian@users.noreply.github.com>
`remove` marks a slot deleted but leaves it populated, so probes walk past it. The resize decision only counted live entries, and under `remove`+`add` churn the live count stays flat, so the table never grew and never rehashed. Tombstones accumulated until no empty slot remained; probes could then no longer terminate, `equal_range` returned `end()` for a key that was still live, and `remove` took the empty-range branch reporting nothing removed. The entry became a ghost: `contains` kept finding it, `remove` silently no-oped, and `size()` drifted above the true live count. Closes #753 Co-Authored-By: Misha Chichvarin <6496186+desertfury@users.noreply.github.com> Co-Authored-By: Ash Vardanian <1983160+ashvardanian@users.noreply.github.com>
Closes #702 Co-Authored-By: Tang Donghai <72755185+tang-hi@users.noreply.github.com>
The Python wheel jobs broke because `pip install cibuildwheel` is unpinned and drifted onto 4.x, which removed the `cpython-freethreading` enable group (now a hard parse error) and dropped the experimental CPython 3.13t free-threaded builds entirely. Pin `cibuildwheel~=4.1` so the major version no longer moves under us, drop the now-unbuildable `313t` matrix entries, and keep `314t` (3.14+ free-threading builds with no flag in 4.x). Verified build identifier selection against pyproject.toml with cibuildwheel 4.1. cibuildwheel 4.x also newly defaults the Windows `repair-wheel-command` to delvewheel, which bundles the MSVC runtime and fails on win_arm64 (no ARM64 msvcp140.dll to vendor on the runner). Earlier versions ran no Windows repair, so set it to empty to preserve that behavior. Refresh the rest of the CI toolchains to current best-practice versions, prioritising anything at or near end-of-life: - Node 20 -> 24: Node 20 reached EOL in April 2026; 24 (Krypton) is the active LTS and already used by the publish job. package.json `engines` floor raised 20 -> 22 (oldest still-maintained LTS). - .NET 8 -> 10: .NET 10 is the current LTS (Nov 2025). Test project retargeted net8.0 -> net10.0 and its stale test deps bumped (Test.Sdk 17.3 -> 18.7, xunit 2.4 -> 2.9, runner 2.4 -> 3.1, coverlet 3.1 -> 10.0); C# LangVersion 10 -> 13. Verified: dotnet build + 41/41 tests pass on net10. - Go 1.22 -> 1.25: 1.22 is past the two-release support window. Verified build + module graph on the go 1.26 toolchain. - Android NDK r26 -> r27c (27.2.12479018): r27 is the current LTS line. - Emscripten 3.1.47 -> 6.0.2: the 3.1.x line is long superseded. Verified by running the release WASM build locally; produces valid wasm objects. - Rust edition 2021 -> 2024: stable since Rust 1.85. Verified with a clean cargo check. - Java JUnit 4.13.2 -> JUnit 5 (Jupiter 5.12.2) with useJUnitPlatform(); Spotless 6.25 -> 8.8 (indentWithSpaces was removed, renamed to leadingTabsToSpaces). Assertions reordered to JUnit 5's message-last signature. Verified: gradle spotlessCheck + full test suite pass. - MinGW: unpin the stale 12.2.0 and move to setup-mingw@v3, letting the action install the runner's current MinGW-w64 default. The existing DLL architecture check still guards the output.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Several older failure modes have been validated to be stable now. Thanks to @sergey-v9, @GraDea, @tang-hi, @chakshu-dhannawat, and @desertfury for patches 🤗
Closes #355, #454, #494, #514, #562, #700, #702, #767, #770