v3.2.1 — repair the test suite on Linux and macOS arm64 - #1
Merged
Conversation
Two defects shipped inside the v3.2.0 tag, both introduced by the allocation-coverage cells and both in tests/test_main.cpp. The shipped library (include/, src/) is byte-identical to 3.2.0 -- anyone building against v3.2.0 has correct code; the break bit anyone who RAN the suite off x86 Windows. - The kernel allocation cell referenced the *ScalarAvx2 mirrors unguarded. They compile out on ARM, so the suite failed to link on macos-arm64. - The header-only-math cell sized its decode buffer to dims where DequantizeRowAsQuery writes paddedDims -- an 8-float stack overrun that aborted the suite under glibc's stack protector on both Linux jobs. version.h, its coherence assertion, and the CHANGELOG move to 3.2.1 together.
A README edit was paying for four platforms including a TSan run. A "changes" job now decides once whether library or build inputs moved, and each build job gates its steps on that. Deliberately not paths-ignore: these are required status checks, and a check skipped by a path filter never reports, so a docs-only PR would wait forever for a verdict that never arrives. Every job still runs and still reports -- it just finishes in seconds with nothing to do. The push path fails OPEN (builds everything) when it cannot determine a base, since over-building is the safe direction for a filter guarding a test suite.
dansupergameprogrammer
force-pushed
the
release/3.2.1
branch
from
July 21, 2026 17:17
cc3dc49 to
90c4fa7
Compare
The edit that added "if: needs.changes.outputs.code" to each build step matched too broadly and caught the changes job's own checkout. That job has no needs, so the expression was empty, the checkout was skipped, and the filter step ran with no working tree: "fatal: not a git repository", exit 128. The gate belongs only in the four build jobs, each of which declares needs: changes. Verified: gates appear in those four and nowhere else.
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.
Two defects shipped inside the
v3.2.0tag. Both were introduced by the 3.2.0 allocation-coverage cells, and both live intests/test_main.cpp.git diff v3.2.0..HEAD -- include/ src/ docs/is empty: the shipped library is byte-identical to 3.2.0. Anyone building against v3.2.0 has correct code. The break affected anyone who ran the test suite off x86 Windows — which the README invites, since it offers the suite as evidence.macOS arm64 — link failure. The kernel allocation cell referenced
DotF32ScalarAvx2and its siblings without an architecture guard. Those are the x86 reference halves of the AVX2 paths and are compiled out on ARM, so the suite failed to link rather than failing a test. Guarded the same way every other AVX2 reference in the suite is.Linux — stack buffer overrun. The header-only-math cell declared
float decoded[24], sized todims, and passed it toDequantizeRowAsQuery, which writestargetPaddedDimsfloats and zeroes the tail — 32 on a 24-dim int8 bank. Eight floats past the end, on every call. glibc's stack protector aborted the suite on both Linux jobs; MSVC and macOS did not detect it. Confirmed under AddressSanitizer, and the buffer is now sized fromconstexpr PaddedDimsso it tracks the contract instead of a literal.Also folds in the coherence checks for this repository's own CI, which previously ran only in the consuming plugin repo against a vendored copy.
Verified: 84,770 checks / 0 failures locally, and clean under AddressSanitizer on the previously-aborting configuration.