Repository navigation
Require the Node that does not crash mid-suite on Windows - #247
Merged
Merged
Conversation
The browser suite's dev server died in about 30% of runs under load on Windows, and the cause was a stack buffer overrun inside node.exe's TCP code, not anything here: a v24.15.0 regression that upstream fixed in v24.16.0 (nodejs/node#62991). Measured on this machine, pinned to two cores: 6 deaths in 20 runs on v24.15.0, 0 in 10 on v24.20.0 with all 105 tests passing each time. So `engines` asks for `^24.16` rather than `>=22.12`. Bounded to the 24 line because Node stopped distributing corepack in v25, which every setup instruction here depends on for the pnpm version. `engines` alone only warns — pnpm prints "WARN Unsupported engine" and installs anyway — so `.npmrc` sets `engine-strict=true`, which is what makes the floor hold. The test explorer's own `engines` goes: it is private and only ever run from the workspace root, so the root's governs and the claim exists in one place. Closes #207 Co-Authored-By: Claude Opus 5 <[email protected]>
michaelvanhoutte
marked this pull request as ready for review
September 7, 2026 17:21
Security reviewVerdict: NONE. The reviewer reported nothing. If it could not read the whole diff, it says so in a comment of its own — this note cannot tell you how much was covered. Worth a look
Any findings are inline comments on the diff. This note is written by the gate, not by the reviewer, so it appears whether or not the reviewer said anything. |
Contributor
Code reviewNo issues found. Checked for bugs and CLAUDE.md compliance. |
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.
The browser suite's dev server died in about 30% of pinned runs on Windows, taking the rest of the stack with it. "Node crashes in its own socket code" (issue 207) established it was a
0xC0000409stack-cookie failure insidenode.exe, on a socket path, and left one lead untested. This runs it.What the measurement says
nodejs/node#62991 is this bug, which issue 207 ruled out on the evidence it had. It was filed on exit code
0xDEAD, but a second reporter there records "0xDEAD / 0xC0000409" on v24.15.0+, and it closes on "a non-deterministic Windows-only stack buffer overrun in the TCP machinery that was fixed in [v24.16.0]" — which is what a/GSfail-fast withws2_32on every crashing stack is.The change
enginesasks for^24.16, and.npmrcsetsengine-strict=true.Both halves are needed:
engineson its own is advisory, and pnpm installs anyway after printingWARN Unsupported engine(measured, exit 0). Withengine-strict, v24.15.0 getsERR_PNPM_UNSUPPORTED_ENGINEand exit 1. The cost, said in the.npmrccomment: it gates every dependency'senginestoo, so a dependency whose range excludes our Node now fails the install rather than warning.Bounded to the 24 line, not left open at
>=24.16, because Node stopped distributing corepack in v25 (nodejs/node#57617, SEMVER-MAJOR) — andcorepack enable pnpmis the first setup step in the readme, and howpackageManagersupplies the pnpm version. An open range would have declared support for a Node where the documented setup cannot run.No
.nvmrc:.github/actions/setup/action.ymlalready readsnode-version-file: package.json, soenginesis the single source. The test explorer's ownenginesis deleted for the same reason — it is private, only ever run from the workspace root, and said>=22, which includes the crashing version.How to check it
There is no product surface to drive, so the walk is the install gate itself, on this branch:
On Node 24.16+ it installs (exit 0). On v24.15.0 it refuses, naming
Expected version: ^24.16andGot: v24.15.0(exit 1) — that refusal is the whole change working. CI resolvesnode-version-file: package.jsonto v24.20.0, the version the ten runs above were measured on.Also run:
pnpm typecheck,pnpm test(1752 tests),pnpm test:scripts(236), and the F3 suite eleven times on v24.20.0.One thing that misreads badly in a run log, worth knowing before diagnosing the next flake: Playwright kills its
webServerat the end of a green run, sosuperviseprintsa server exited (1); stopping the restand pnpm relabels the childCommand "vite" not found— the crash's two lines exactly. Position separates them: on a green run they sit within three lines of105 passed.Left as chips
apps/web/tests/unit/pages/CapturePage.test.tsxfailed once under full-suite load and passed alone and on a re-run — a timing flake, unrelated to this change.engines, readme twice, CLAUDE.md) stay in step. This change found the previous value's five copies by grep; a check inscripts/lib/would be its own piece of work.Closes #207
🤖 Generated with Claude Code