Skip to content

chore: propagate recent develop fixes to siblings (2026-07-31) - #13805

Draft
Planeshifter wants to merge 4 commits into
developfrom
claude/ecstatic-heisenberg-8rwrkj
Draft

chore: propagate recent develop fixes to siblings (2026-07-31)#13805
Planeshifter wants to merge 4 commits into
developfrom
claude/ecstatic-heisenberg-8rwrkj

Conversation

@Planeshifter

@Planeshifter Planeshifter commented Jul 31, 2026

Copy link
Copy Markdown
Member

Description

What is the purpose of this pull request?

This pull request:

  • propagates fixes merged to develop between 2026-07-30 14:56 PDT (22f4f4679) and 2026-07-31 04:19 PDT (a6697506a) to sibling packages containing the same defects.

Propagated benchmark TAP-name fix

The native:: segment in C benchmark TAP output, corrected upstream in 4da1e5810 for blas/ext/base, was carried into 10 sibling packages via copy-paste and is fixed here identically: each benchmark/c/benchmark.length.c printf format string is changed from # c::native::%s:len=%d to # c::%s:len=%d (and the ndarray variant to # c::%s:ndarray:len=%d), matching the repo-wide TAP naming convention. 20 lines across 10 files are affected, two per package.

  • blas/ext/base/scartesian-square, blas/ext/base/dcartesian-square, blas/ext/base/zcartesian-square, blas/ext/base/scartesian-power, blas/ext/base/dcartesian-power, blas/ext/base/scartesian-product, blas/ext/base/dcartesian-product, blas/ext/base/zcartesian-product, blas/ext/base/svander, blas/ext/base/dvander

Native binding docstring parity

The Notes section added to blas/ext/base/dindex-of-not-equal's *.native.js in 4c8e34dca closes a documentation gap that recurs across 33 *.native.js files in 19 sibling packages: each is missing a ## Notes block present in its JS counterpart. The fix propagates identically to each target: the Notes block is copied verbatim from the package's own JS implementation file into its *.native.js file(s). The 8 sort-family packages (d/s × sort2hp/sort2sh/sorthp/sortsh) are excluded — their JS siblings pair Notes with a ## References section, and no *.native.js in the repo currently carries References, so extending scope there requires a maintainer decision.

  • blas/ext/base/cindex-of-column, blas/ext/base/cindex-of-row, blas/ext/base/clast-index-of-row, blas/ext/base/dindex-of-column, blas/ext/base/dindex-of-row, blas/ext/base/dlast-index-of-row, blas/ext/base/sindex-of-column, blas/ext/base/sindex-of-row, blas/ext/base/slast-index-of-row, blas/ext/base/zindex-of-column, blas/ext/base/zindex-of-row, blas/ext/base/zlast-index-of-row, blas/ext/base/dcartesian-square, blas/ext/base/scartesian-square, blas/ext/base/zcartesian-square, blas/ext/base/dcircshift, blas/ext/base/scircshift, blas/ext/base/dminheap-sift-down, blas/ext/base/sminheap-sift-down

Pre-compute RNG inputs outside timed benchmark loops

Nine benchmarks in number/float32/base and number/float64/base timed random value generation alongside the operation under test, inflating measurements with RNG overhead. Fixed per the template established in a6697506a: values are generated into a 100-element array before tic(), and the loop indexes with i % 100, isolating the timed region to the function under test. All 9 compile clean under -Wall -Wextra.

  • number/float32/base/to-word, number/float32/base/assert/is-same-value, number/float32/base/assert/is-same-value-zero, number/float64/base/get-low-word, number/float64/base/get-high-word, number/float64/base/to-words, number/float64/base/signbit, number/float64/base/assert/is-same-value, number/float64/base/assert/is-same-value-zero

Const-qualify read-only variables in strided/base example code

Commit d5a00c330 added const to read-only, literal-initialized variables in strided/base/smap's C example and README, correcting a lint error; the same omission was present in eight sibling packages. Each addition was verified against the package's own header signature — every input pointer is const-qualified in the C API — and every patched example compiles clean under -Wall -Wextra; output arrays are left non-const. Packages routing arrays through non-const pointer arrays (unary, binary, mskunary, nullary) were excluded, since const there breaks compilation.

  • strided/base/cmap, strided/base/zmap, strided/base/dmskmap, strided/base/dmap2, strided/base/smskmap2, strided/base/stride2offset, strided/base/min-view-buffer-index, strided/base/max-view-buffer-index

Withdrawn: invalid ESLint directive in twin fixture

The invalid /* eslint-ignore no-multiple-empty-lines */ directive fixed upstream in 990d891c1 recurs byte-for-byte in _tools/lint/license-header-glob/test/fixtures/start-location/file.js. The propagated correction was initially included and then withdrawn: the fixture is intentionally invalid (its license header deliberately starts at line 6 so the package's tests can assert an error), and the Lint Changed Files workflow runs lint-license-headers-files over every changed file with no fixture exemption, so any edit to this file fails CI. Landing the one-line fix requires a maintainer either merging over the red check (as with the source commit) or exempting lint-tool fixtures from the license-header lint.

Related Issues

Does this pull request have any related issues?

No.

Questions

Any questions for reviewers of this pull request?

No.

Other

Any other information relevant to this pull request? This may include screenshots, references, and/or implementation notes.

Validation performed before inclusion:

  • Candidate sites were enumerated via pattern-signature searches scoped to sibling namespaces of each source commit.
  • Every site was independently verified by two validation passes reading the target files in full, plus an adaptation pass producing exact per-site patches and a style-consistency pass checking JSDoc/C conventions against the source commits and surrounding packages.
  • Deliberately excluded: the 16 sort-family *.native.js files (Notes/References scope ambiguity), two bare eslint-ignore fixtures (would trip --report-unused-disable-directives), strided/base/smskmap (incomplete analog flagged during validation), and README-only staleness in strided/base/dmap and strided/base/smap2 (single-pass confirmation only).
  • All C changes (benchmarks and examples) compile clean with gcc -std=c99 -Wall -Wextra.

One commit per source fix pattern; each commit body cites the propagated source commit SHA.

Checklist

Please ensure the following tasks are completed before submitting this pull request.

AI Assistance

When authoring the changes proposed in this PR, did you use any kind of AI assistance?

  • Yes
  • No

If you answered "yes" above, how did you use AI assistance?

  • Code generation (e.g., when writing an implementation or fixing a bug)
  • Test/benchmark generation
  • Documentation (including examples)
  • Research and understanding

Disclosure

If you answered "yes" to using AI assistance, please provide a short disclosure indicating how you used AI assistance. Example disclosures: "This PR was written primarily by Claude Code." or "I consulted ChatGPT to understand the codebase, but the proposed changes were fully authored manually by myself.".

This PR was authored by Claude Code as part of an automated fix-propagation routine: source fixes were extracted from commits merged to develop in the last 24 hours, candidate sibling sites were located by pattern search, and every applied patch was verified by multiple independent validation passes (defect presence, per-site adaptation, style consistency) plus compilation checks before inclusion.


@stdlib-js/reviewers

claude added 4 commits July 31, 2026 13:45
Propagates fix from 4da1e58 ("bench: fix benchmark names") to sibling
packages with the same malformed TAP benchmark names in
`benchmark/c/benchmark.length.c` files.
Propagates fix from 4c8e34d ("docs: update examples") to sibling
packages whose `*.native.js` files lack the `## Notes` JSDoc block
present in their non-native counterparts. Notes are copied verbatim
from each package's own JS implementation files.
Propagates fix from a669750 ("bench: refactor C benchmarks to use
pre-computed values") to the remaining `number/float32/base` and
`number/float64/base` packages which still generate random values
inside timed benchmark loops.
Propagates fix from d5a00c3 ("chore: fix C lint errors") to sibling
packages whose C examples and README code snippets declare read-only
variables without the `const` qualifier.
@Planeshifter
Planeshifter force-pushed the claude/ecstatic-heisenberg-8rwrkj branch from 603f444 to abef52e Compare July 31, 2026 14:05
@stdlib-bot

stdlib-bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Coverage Report

Package Statements Branches Functions Lines
blas/ext/base/cindex-of-column $\\color{green}558/558$
$\\color{green}+100.00\\%$
$\\color{green}54/54$
$\\color{green}+100.00\\%$
$\\color{green}4/4$
$\\color{green}+100.00\\%$
$\\color{green}558/558$
$\\color{green}+100.00\\%$
blas/ext/base/cindex-of-row $\\color{green}558/558$
$\\color{green}+100.00\\%$
$\\color{green}54/54$
$\\color{green}+100.00\\%$
$\\color{green}4/4$
$\\color{green}+100.00\\%$
$\\color{green}558/558$
$\\color{green}+100.00\\%$
blas/ext/base/clast-index-of-row $\\color{green}611/611$
$\\color{green}+100.00\\%$
$\\color{green}52/52$
$\\color{green}+100.00\\%$
$\\color{green}4/4$
$\\color{green}+100.00\\%$
$\\color{green}611/611$
$\\color{green}+100.00\\%$
blas/ext/base/dcartesian-power $\\color{green}462/462$
$\\color{green}+100.00\\%$
$\\color{green}39/39$
$\\color{green}+100.00\\%$
$\\color{green}4/4$
$\\color{green}+100.00\\%$
$\\color{green}462/462$
$\\color{green}+100.00\\%$
blas/ext/base/dcartesian-product $\\color{green}492/492$
$\\color{green}+100.00\\%$
$\\color{green}38/38$
$\\color{green}+100.00\\%$
$\\color{green}4/4$
$\\color{green}+100.00\\%$
$\\color{green}492/492$
$\\color{green}+100.00\\%$
blas/ext/base/dcartesian-square $\\color{green}451/451$
$\\color{green}+100.00\\%$
$\\color{green}38/38$
$\\color{green}+100.00\\%$
$\\color{green}4/4$
$\\color{green}+100.00\\%$
$\\color{green}451/451$
$\\color{green}+100.00\\%$
blas/ext/base/dcircshift $\\color{red}465/476$
$\\color{green}+97.69\\%$
$\\color{red}28/29$
$\\color{green}+96.55\\%$
$\\color{green}4/4$
$\\color{green}+100.00\\%$
$\\color{red}465/476$
$\\color{green}+97.69\\%$
blas/ext/base/dindex-of-column $\\color{green}541/541$
$\\color{green}+100.00\\%$
$\\color{green}52/52$
$\\color{green}+100.00\\%$
$\\color{green}4/4$
$\\color{green}+100.00\\%$
$\\color{green}541/541$
$\\color{green}+100.00\\%$
blas/ext/base/dindex-of-row $\\color{green}541/541$
$\\color{green}+0.00\\%$
$\\color{green}52/52$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}541/541$
$\\color{green}+0.00\\%$
blas/ext/base/dlast-index-of-row $\\color{green}585/585$
$\\color{green}+0.00\\%$
$\\color{green}50/50$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}585/585$
$\\color{green}+0.00\\%$
blas/ext/base/dminheap-sift-down $\\color{red}393/398$
$\\color{green}+0.00\\%$
$\\color{red}17/19$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{red}393/398$
$\\color{green}+0.00\\%$
blas/ext/base/dvander $\\color{green}624/624$
$\\color{green}+0.00\\%$
$\\color{green}76/76$
$\\color{green}+0.00\\%$
$\\color{green}5/5$
$\\color{green}+0.00\\%$
$\\color{green}624/624$
$\\color{green}+0.00\\%$
blas/ext/base/scartesian-power $\\color{green}462/462$
$\\color{green}+0.00\\%$
$\\color{green}39/39$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}462/462$
$\\color{green}+0.00\\%$
blas/ext/base/scartesian-product $\\color{green}492/492$
$\\color{green}+0.00\\%$
$\\color{green}38/38$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}492/492$
$\\color{green}+0.00\\%$
blas/ext/base/scartesian-square $\\color{green}451/451$
$\\color{green}+0.00\\%$
$\\color{green}38/38$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}451/451$
$\\color{green}+0.00\\%$
blas/ext/base/scircshift $\\color{red}465/476$
$\\color{green}+0.00\\%$
$\\color{red}28/29$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{red}465/476$
$\\color{green}+0.00\\%$
blas/ext/base/sindex-of-column $\\color{green}541/541$
$\\color{green}+0.00\\%$
$\\color{green}52/52$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}541/541$
$\\color{green}+0.00\\%$
blas/ext/base/sindex-of-row $\\color{green}541/541$
$\\color{green}+0.00\\%$
$\\color{green}52/52$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}541/541$
$\\color{green}+0.00\\%$
blas/ext/base/slast-index-of-row $\\color{green}585/585$
$\\color{green}+0.00\\%$
$\\color{green}50/50$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}585/585$
$\\color{green}+0.00\\%$
blas/ext/base/sminheap-sift-down $\\color{red}393/398$
$\\color{green}+0.00\\%$
$\\color{red}17/19$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{red}393/398$
$\\color{green}+0.00\\%$
blas/ext/base/svander $\\color{green}624/624$
$\\color{green}+0.00\\%$
$\\color{green}76/76$
$\\color{green}+0.00\\%$
$\\color{green}5/5$
$\\color{green}+0.00\\%$
$\\color{green}624/624$
$\\color{green}+0.00\\%$
blas/ext/base/zcartesian-product $\\color{green}542/542$
$\\color{green}+0.00\\%$
$\\color{green}40/40$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}542/542$
$\\color{green}+0.00\\%$
blas/ext/base/zcartesian-square $\\color{green}496/496$
$\\color{green}+0.00\\%$
$\\color{green}39/39$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}496/496$
$\\color{green}+0.00\\%$
blas/ext/base/zindex-of-column $\\color{green}558/558$
$\\color{green}+0.00\\%$
$\\color{green}54/54$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}558/558$
$\\color{green}+0.00\\%$
blas/ext/base/zindex-of-row $\\color{green}558/558$
$\\color{green}+0.00\\%$
$\\color{green}54/54$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}558/558$
$\\color{green}+0.00\\%$
blas/ext/base/zlast-index-of-row $\\color{green}611/611$
$\\color{green}+0.00\\%$
$\\color{green}52/52$
$\\color{green}+0.00\\%$
$\\color{green}4/4$
$\\color{green}+0.00\\%$
$\\color{green}611/611$
$\\color{green}+0.00\\%$
number/float32/base/assert/is-same-value-zero $\\color{green}168/168$
$\\color{green}+0.00\\%$
$\\color{green}7/7$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}168/168$
$\\color{green}+0.00\\%$
number/float32/base/assert/is-same-value $\\color{green}176/176$
$\\color{green}+0.00\\%$
$\\color{green}10/10$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}176/176$
$\\color{green}+0.00\\%$
number/float32/base/to-word $\\color{green}153/153$
$\\color{green}+0.00\\%$
$\\color{green}5/5$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}153/153$
$\\color{green}+0.00\\%$
number/float64/base/assert/is-same-value-zero $\\color{green}167/167$
$\\color{green}+0.00\\%$
$\\color{green}7/7$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}167/167$
$\\color{green}+0.00\\%$
number/float64/base/assert/is-same-value $\\color{green}175/175$
$\\color{green}+0.00\\%$
$\\color{green}10/10$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}175/175$
$\\color{green}+0.00\\%$
number/float64/base/get-high-word $\\color{green}215/215$
$\\color{green}+0.00\\%$
$\\color{green}8/8$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}215/215$
$\\color{green}+0.00\\%$
number/float64/base/get-low-word $\\color{green}215/215$
$\\color{green}+0.00\\%$
$\\color{green}8/8$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}215/215$
$\\color{green}+0.00\\%$
number/float64/base/signbit $\\color{green}169/169$
$\\color{green}+0.00\\%$
$\\color{green}7/7$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}169/169$
$\\color{green}+0.00\\%$
number/float64/base/to-words $\\color{green}313/313$
$\\color{green}+0.00\\%$
$\\color{green}10/10$
$\\color{green}+0.00\\%$
$\\color{green}3/3$
$\\color{green}+0.00\\%$
$\\color{green}313/313$
$\\color{green}+0.00\\%$
strided/base/cmap $\\color{green}218/218$
$\\color{green}+0.00\\%$
$\\color{green}9/9$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}218/218$
$\\color{green}+0.00\\%$
strided/base/dmap2 $\\color{green}206/206$
$\\color{green}+0.00\\%$
$\\color{green}9/9$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}206/206$
$\\color{green}+0.00\\%$
strided/base/dmskmap $\\color{green}224/224$
$\\color{green}+0.00\\%$
$\\color{green}10/10$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}224/224$
$\\color{green}+0.00\\%$
strided/base/max-view-buffer-index $\\color{green}85/85$
$\\color{green}+0.00\\%$
$\\color{green}5/5$
$\\color{green}+0.00\\%$
$\\color{green}1/1$
$\\color{green}+0.00\\%$
$\\color{green}85/85$
$\\color{green}+0.00\\%$
strided/base/min-view-buffer-index $\\color{green}85/85$
$\\color{green}+0.00\\%$
$\\color{green}5/5$
$\\color{green}+0.00\\%$
$\\color{green}1/1$
$\\color{green}+0.00\\%$
$\\color{green}85/85$
$\\color{green}+0.00\\%$
strided/base/smskmap2 $\\color{green}224/224$
$\\color{green}+0.00\\%$
$\\color{green}10/10$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}224/224$
$\\color{green}+0.00\\%$
strided/base/stride2offset $\\color{green}84/84$
$\\color{green}+0.00\\%$
$\\color{green}5/5$
$\\color{green}+0.00\\%$
$\\color{green}1/1$
$\\color{green}+0.00\\%$
$\\color{green}84/84$
$\\color{green}+0.00\\%$
strided/base/zmap $\\color{green}218/218$
$\\color{green}+0.00\\%$
$\\color{green}9/9$
$\\color{green}+0.00\\%$
$\\color{green}2/2$
$\\color{green}+0.00\\%$
$\\color{green}218/218$
$\\color{green}+0.00\\%$

The above coverage report was generated for the changes in this PR.

Copy link
Copy Markdown
Member Author

The Run affected tests failure is a CI harness limitation, not a test failure. From the job log (run 30637180272):

make: bash: Argument list too long
make: *** [/home/runner/work/stdlib/stdlib/tools/make/lib/test/javascript.mk:318: test-javascript-files-min] Error 127
make: bash: Argument list too long
make: *** [/home/runner/work/stdlib/stdlib/tools/make/lib/test/javascript.mk:318: test-javascript-files-min] Error 127

.github/workflows/scripts/run_affected_tests/run batches the affected-test file list via xargs sh -c 'make test-javascript-files-min FILES="$*"' _, and the test-javascript-files-min recipe expands $(FILES) inline into a single bash -c argument. This PR touches 36 packages whose dependents resolve to several thousand test files; xargs builds batches near its ~128 KB default, and the expanded recipe then exceeds the kernel's per-argument limit (MAX_ARG_STRLEN), so bash cannot be spawned for the first two batches. Every test that actually executed passed — 201 files, zero failures, zero not ok lines in the log. Wide changed-file sets are the only trigger; all single-package PR runs of this workflow today are green.

Not fixing it here, since the fix belongs in the CI scripts rather than a propagation PR. Two options: cap the batch size in the runner script (e.g. xargs -n 200 sh -c '…'), or have test-javascript-files-min read file paths from stdin instead of inline-expanding $(FILES) into the recipe.

The earlier Lint Changed Files failure was resolved by withdrawing the lint-fixture edit (see the PR description); the remaining checks on abef52e98 are green or pending.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants