Skip to content

fs: copy directory trees for fs.cp() on the thread pool - #65488

Closed
codebytere wants to merge 2 commits into
nodejs:mainfrom
codebytere:perf/fs-cp-dir-threadpool
Closed

codebytere wants to merge 2 commits into
nodejs:mainfrom
codebytere:perf/fs-cp-dir-threadpool

Conversation

@codebytere

@codebytere codebytere commented Aug 22, 2026 •

Copy link
Copy Markdown
Member

Runs the directory walk of fs.cp() / fsPromises.cp() as one thread pool request using the C++ implementation fs.cpSync() already has, instead of a JavaScript walk with several awaited round trips per entry; the first commit fixes that implementation giving created directories default permissions instead of the source directory's mode.

before after
benchmark/fs/bench-cp.js (new, fsPromises.cp() of 500 files), 30 runs +340 % ±14 %
fsPromises.cp() of a 2 100-file tree ~215 ms ~28 ms
main-thread time for that copy ~110 ms < 1 ms
cpSync of a 0700 directory (umask 022) comes out 0755 0700

The JavaScript walk does opendir batches, two stat()s, the copyFile() and a chmod() per entry, each awaited in sequence, with the bookkeeping on the main thread. fs.cpSync() without a filter has done the whole walk in C++ since #58461, but that walk creates directories with default permissions where the JavaScript walk (and cpSync before the port) gives them the source directory's mode; the first commit fixes that (the mode is applied once the directory's contents are copied, so read-only source directories still copy), with a test that fails on main.

The second commit factors the walk into CopyDirRecursive(), which records an error instead of throwing so it can run on any thread, and runs it as a ThreadPoolWork request when the destination directory does not exist yet and nothing has to run per entry (no filter, no dereference, permission model off); copying into an existing tree keeps the JavaScript walk and every rule it has for what may already be there (#58869 lists where cpSync's walk differs). For that request the walk follows the JavaScript walk's rules rather than cpSync's: it creates every directory with mkdir() and every file with an exclusive uv_fs_copyfile() (honouring the mode flags) and fails with EEXIST if anything has appeared in their place since the JavaScript check, so it never opens or follows something it did not create; sockets, FIFOs and unknown entries are handed back to JavaScript, which rejects them with the same SystemErrors as before; relative link targets are made absolute lexically as path.resolve() does. cpSync keeps merging into existing directories, skipping special files and canonicalizing link targets. The walk uses the error_code overloads of std::filesystem throughout, so an unreadable directory inside the tree is reported as EACCES by both cp() and cpSync() where cpSync() currently terminates the process; filesystem errors from inside the walk keep their codes and report cp as the syscall, as cpSync does.

Refs: #58461

With preserveTimestamps the walk also stamps each directory it filled (root included), so cp() keeps preserving directory times as it has since 8fe4b642eaa, and cpSync() without a filter now does too. Both uv_fs_copyfile() and std::filesystem::copy_file() set the destination's mode before writing the data, which clears setuid/setgid, so the walk puts the source mode back after each file it copied, as the JavaScript walk's chmod() already does.

Tests: new test-fs-cp-sync-directory-mode.mjs, test-fs-cp-async-file-modes.mjs (setuid, setgid, sticky and 0600 files come out with the source's mode from cp(), cp() with preserveTimestamps and cpSync()), test-fs-cp-async-special-files-in-tree.mjs (a socket and a FIFO inside the tree: rejected by cp(), skipped by cpSync(), same as on main) test-fs-cp-unreadable-directory.mjs (aborts on main for cpSync) test-fs-cp-async-destination-appears-late.mjs and test-fs-cp-async-symlink-targets.mjs; all test-fs-cp* pass, also under tools/test.py --worker; a differential run over the option matrix (dereference, verbatimSymlinks, preserveTimestamps, force/errorOnExist, fresh and pre-populated destinations, symlinks, a socket and a FIFO in the tree) produces the same trees and outcomes as before.


Disclosure: the code, test, benchmark, measurements and this description were written by Claude Code, directed and reviewed by @codebytere.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/performance

@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run. labels Aug 22, 2026
@codebytere
codebytere force-pushed the perf/fs-cp-dir-threadpool branch 2 times, most recently from 6d25d6a to cce0cf5 Compare August 22, 2026 15:55
@codecov

codecov Bot commented Aug 22, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 80.96591% with 67 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.20%. Comparing base (7aba44d) to head (f7665e1).
⚠️ Report is 16 commits behind head on main.

Files with missing lines Patch % Lines
src/node_file.cc 78.82% 28 Missing and 37 partials ⚠️
lib/internal/fs/cp/cp.js 95.55% 2 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff            @@
##             main   #65488    +/-   ##
========================================
  Coverage   90.20%   90.20%            
========================================
  Files         771      771            
  Lines      264622   264832   +210     
  Branches    50228    50289    +61     
========================================
+ Hits       238704   238902   +198     
+ Misses      16907    16902     -5     
- Partials     9011     9028    +17     
Files with missing lines Coverage Δ
lib/internal/fs/cp/cp.js 93.14% <95.55%> (+4.11%) ⬆️
src/node_file.cc 75.42% <78.82%> (+0.57%) ⬆️

... and 29 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@codebytere
codebytere force-pushed the perf/fs-cp-dir-threadpool branch 2 times, most recently from 73a8c02 to 0ecff36 Compare August 22, 2026 19:42
@jakecastelli jakecastelli added request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. commit-queue-rebase PRs the Commit Queue should land as multiple self-contained commits. labels Aug 23, 2026
Comment thread src/node_file.cc Resolved
@jakecastelli jakecastelli removed the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Aug 23, 2026
@codebytere
codebytere force-pushed the perf/fs-cp-dir-threadpool branch from 0ecff36 to 508ece6 Compare August 23, 2026 11:19
Comment thread src/node_file.cc Resolved
@codebytere
codebytere force-pushed the perf/fs-cp-dir-threadpool branch from 508ece6 to 0c17f68 Compare August 23, 2026 12:31
Comment thread src/node_file.cc Resolved

@mcollina mcollina left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@mcollina mcollina added the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Aug 23, 2026
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Aug 23, 2026
@nodejs-github-bot

This comment was marked as outdated.

Comment thread lib/internal/fs/cp/cp.js Resolved
@codebytere
codebytere force-pushed the perf/fs-cp-dir-threadpool branch from 6a197c9 to 7e01f9b Compare August 24, 2026 00:22
Comment thread src/node_file.cc Resolved
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@gurgunday gurgunday left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@codebytere codebytere added the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 7, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in c7d80a2...29667e0

nodejs-github-bot pushed a commit that referenced this pull request Sep 7, 2026
The C++ fast path that fs.cpSync() takes when no filter is given created
the destination directories with default permissions, so a 0700
directory came out of the copy as 0755 (with the default umask). The
JavaScript implementation, which fs.cp(), fs.promises.cp() and
fs.cpSync() with a filter still use, chmod()s every directory it
creates to the mode of its source, and so did cpSync before the port.

Set the source directory's permissions on each directory the copy
creates (the destination root included); directories that already
exist keep theirs, as before.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
nodejs-github-bot pushed a commit that referenced this pull request Sep 7, 2026
fs.cp() and fs.promises.cp() walked the tree in JavaScript with several
thread pool round trips per entry (opendir batches, two stat()s, the
copyFile(), a chmod()), all awaited in sequence: a 2 100-file tree took
~215 ms with ~110 ms of that on the main thread, against ~36 ms for
fs.cpSync(), which copies the tree in C++ when no filter is given.

Factor that C++ walk into CopyDirRecursive(), which records the error
instead of throwing so that it can run on any thread, and run it as one
ThreadPoolWork request (CpDirJob) for fs.cp()/fs.promises.cp() when
the destination directory does not exist yet and nothing has to run per
entry (no filter, no dereference, permission model off). Copying into
an existing tree keeps the JavaScript walk and its rules for what may
already be there. The same tree now takes ~30 ms with under 1 ms on the
main thread.

For that job the walk follows the JavaScript walk's rules rather than
cpSync's: it creates every directory with mkdir() and every file with
an exclusive uv_fs_copyfile() (honouring the copyFile() mode flags) and
fails with EEXIST if anything has appeared in their place since the
JavaScript check, so it never opens or follows something it did not
create; sockets, FIFOs and unknown entries are reported back to
JavaScript, which rejects them with the same SystemErrors as before;
relative link targets are made absolute lexically as path.resolve()
does. cpSync keeps merging into existing directories, skipping special
files and canonicalizing link targets.

The walk now uses the error_code overloads of std::filesystem throughout
(directory iteration included), so an unreadable directory inside the
tree is reported as EACCES by both cp() and cpSync() instead of
terminating the process, which cpSync() has done since the walk moved
to C++. Filesystem errors raised inside the walk keep their codes, with
'cp' or 'copyfile'/'mkdir' as the syscall. With preserveTimestamps the
walk stamps each directory it filled, root included, so cp() keeps
preserving directory times and cpSync() without a filter now does too.
Both file copies set the destination's mode before writing the data,
which clears setuid and setgid, so the walk puts the source mode back
after each file it copied; the JavaScript walk already chmod()s there.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
@nodejs-github-bot nodejs-github-bot removed the commit-queue PRs queued for automated landing through the Commit Queue. label Sep 7, 2026
@codebytere
codebytere deleted the perf/fs-cp-dir-threadpool branch September 7, 2026 07:08
aduh95 pushed a commit that referenced this pull request Sep 7, 2026
The C++ fast path that fs.cpSync() takes when no filter is given created
the destination directories with default permissions, so a 0700
directory came out of the copy as 0755 (with the default umask). The
JavaScript implementation, which fs.cp(), fs.promises.cp() and
fs.cpSync() with a filter still use, chmod()s every directory it
creates to the mode of its source, and so did cpSync before the port.

Set the source directory's permissions on each directory the copy
creates (the destination root included); directories that already
exist keep theirs, as before.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Sep 7, 2026
fs.cp() and fs.promises.cp() walked the tree in JavaScript with several
thread pool round trips per entry (opendir batches, two stat()s, the
copyFile(), a chmod()), all awaited in sequence: a 2 100-file tree took
~215 ms with ~110 ms of that on the main thread, against ~36 ms for
fs.cpSync(), which copies the tree in C++ when no filter is given.

Factor that C++ walk into CopyDirRecursive(), which records the error
instead of throwing so that it can run on any thread, and run it as one
ThreadPoolWork request (CpDirJob) for fs.cp()/fs.promises.cp() when
the destination directory does not exist yet and nothing has to run per
entry (no filter, no dereference, permission model off). Copying into
an existing tree keeps the JavaScript walk and its rules for what may
already be there. The same tree now takes ~30 ms with under 1 ms on the
main thread.

For that job the walk follows the JavaScript walk's rules rather than
cpSync's: it creates every directory with mkdir() and every file with
an exclusive uv_fs_copyfile() (honouring the copyFile() mode flags) and
fails with EEXIST if anything has appeared in their place since the
JavaScript check, so it never opens or follows something it did not
create; sockets, FIFOs and unknown entries are reported back to
JavaScript, which rejects them with the same SystemErrors as before;
relative link targets are made absolute lexically as path.resolve()
does. cpSync keeps merging into existing directories, skipping special
files and canonicalizing link targets.

The walk now uses the error_code overloads of std::filesystem throughout
(directory iteration included), so an unreadable directory inside the
tree is reported as EACCES by both cp() and cpSync() instead of
terminating the process, which cpSync() has done since the walk moved
to C++. Filesystem errors raised inside the walk keep their codes, with
'cp' or 'copyfile'/'mkdir' as the syscall. With preserveTimestamps the
walk stamps each directory it filled, root included, so cp() keeps
preserving directory times and cpSync() without a filter now does too.
Both file copies set the destination's mode before writing the data,
which clears setuid and setgid, so the walk puts the source mode back
after each file it copied; the JavaScript walk already chmod()s there.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Sep 7, 2026
The C++ fast path that fs.cpSync() takes when no filter is given created
the destination directories with default permissions, so a 0700
directory came out of the copy as 0755 (with the default umask). The
JavaScript implementation, which fs.cp(), fs.promises.cp() and
fs.cpSync() with a filter still use, chmod()s every directory it
creates to the mode of its source, and so did cpSync before the port.

Set the source directory's permissions on each directory the copy
creates (the destination root included); directories that already
exist keep theirs, as before.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Sep 7, 2026
fs.cp() and fs.promises.cp() walked the tree in JavaScript with several
thread pool round trips per entry (opendir batches, two stat()s, the
copyFile(), a chmod()), all awaited in sequence: a 2 100-file tree took
~215 ms with ~110 ms of that on the main thread, against ~36 ms for
fs.cpSync(), which copies the tree in C++ when no filter is given.

Factor that C++ walk into CopyDirRecursive(), which records the error
instead of throwing so that it can run on any thread, and run it as one
ThreadPoolWork request (CpDirJob) for fs.cp()/fs.promises.cp() when
the destination directory does not exist yet and nothing has to run per
entry (no filter, no dereference, permission model off). Copying into
an existing tree keeps the JavaScript walk and its rules for what may
already be there. The same tree now takes ~30 ms with under 1 ms on the
main thread.

For that job the walk follows the JavaScript walk's rules rather than
cpSync's: it creates every directory with mkdir() and every file with
an exclusive uv_fs_copyfile() (honouring the copyFile() mode flags) and
fails with EEXIST if anything has appeared in their place since the
JavaScript check, so it never opens or follows something it did not
create; sockets, FIFOs and unknown entries are reported back to
JavaScript, which rejects them with the same SystemErrors as before;
relative link targets are made absolute lexically as path.resolve()
does. cpSync keeps merging into existing directories, skipping special
files and canonicalizing link targets.

The walk now uses the error_code overloads of std::filesystem throughout
(directory iteration included), so an unreadable directory inside the
tree is reported as EACCES by both cp() and cpSync() instead of
terminating the process, which cpSync() has done since the walk moved
to C++. Filesystem errors raised inside the walk keep their codes, with
'cp' or 'copyfile'/'mkdir' as the syscall. With preserveTimestamps the
walk stamps each directory it filled, root included, so cp() keeps
preserving directory times and cpSync() without a filter now does too.
Both file copies set the destination's mode before writing the data,
which clears setuid and setgid, so the walk puts the source mode back
after each file it copied; the JavaScript walk already chmod()s there.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Sep 15, 2026
The C++ fast path that fs.cpSync() takes when no filter is given created
the destination directories with default permissions, so a 0700
directory came out of the copy as 0755 (with the default umask). The
JavaScript implementation, which fs.cp(), fs.promises.cp() and
fs.cpSync() with a filter still use, chmod()s every directory it
creates to the mode of its source, and so did cpSync before the port.

Set the source directory's permissions on each directory the copy
creates (the destination root included); directories that already
exist keep theirs, as before.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Sep 15, 2026
fs.cp() and fs.promises.cp() walked the tree in JavaScript with several
thread pool round trips per entry (opendir batches, two stat()s, the
copyFile(), a chmod()), all awaited in sequence: a 2 100-file tree took
~215 ms with ~110 ms of that on the main thread, against ~36 ms for
fs.cpSync(), which copies the tree in C++ when no filter is given.

Factor that C++ walk into CopyDirRecursive(), which records the error
instead of throwing so that it can run on any thread, and run it as one
ThreadPoolWork request (CpDirJob) for fs.cp()/fs.promises.cp() when
the destination directory does not exist yet and nothing has to run per
entry (no filter, no dereference, permission model off). Copying into
an existing tree keeps the JavaScript walk and its rules for what may
already be there. The same tree now takes ~30 ms with under 1 ms on the
main thread.

For that job the walk follows the JavaScript walk's rules rather than
cpSync's: it creates every directory with mkdir() and every file with
an exclusive uv_fs_copyfile() (honouring the copyFile() mode flags) and
fails with EEXIST if anything has appeared in their place since the
JavaScript check, so it never opens or follows something it did not
create; sockets, FIFOs and unknown entries are reported back to
JavaScript, which rejects them with the same SystemErrors as before;
relative link targets are made absolute lexically as path.resolve()
does. cpSync keeps merging into existing directories, skipping special
files and canonicalizing link targets.

The walk now uses the error_code overloads of std::filesystem throughout
(directory iteration included), so an unreadable directory inside the
tree is reported as EACCES by both cp() and cpSync() instead of
terminating the process, which cpSync() has done since the walk moved
to C++. Filesystem errors raised inside the walk keep their codes, with
'cp' or 'copyfile'/'mkdir' as the syscall. With preserveTimestamps the
walk stamps each directory it filled, root included, so cp() keeps
preserving directory times and cpSync() without a filter now does too.
Both file copies set the destination's mode before writing the data,
which clears setuid and setgid, so the walk puts the source mode back
after each file it copied; the JavaScript walk already chmod()s there.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
@aduh95

aduh95 commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

The added test test-fs-cp-async-file-modes is reported as failing in NixOS/nixpkgs#564449, #66104 fixes it

aduh95 pushed a commit that referenced this pull request Sep 19, 2026
The C++ fast path that fs.cpSync() takes when no filter is given created
the destination directories with default permissions, so a 0700
directory came out of the copy as 0755 (with the default umask). The
JavaScript implementation, which fs.cp(), fs.promises.cp() and
fs.cpSync() with a filter still use, chmod()s every directory it
creates to the mode of its source, and so did cpSync before the port.

Set the source directory's permissions on each directory the copy
creates (the destination root included); directories that already
exist keep theirs, as before.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
aduh95 pushed a commit that referenced this pull request Sep 19, 2026
The C++ fast path that fs.cpSync() takes when no filter is given created
the destination directories with default permissions, so a 0700
directory came out of the copy as 0755 (with the default umask). The
JavaScript implementation, which fs.cp(), fs.promises.cp() and
fs.cpSync() with a filter still use, chmod()s every directory it
creates to the mode of its source, and so did cpSync before the port.

Set the source directory's permissions on each directory the copy
creates (the destination root included); directories that already
exist keep theirs, as before.

Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com>
PR-URL: #65488
Refs: #58461
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
markharding added a commit to futo-org/Harbor that referenced this pull request Oct 19, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [node](https://nodejs.org) ([source](https://github.com/nodejs/node)) | minor | `24.18.0` → `24.22.0` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/99) for more information.

---

### Release Notes

<details>
<summary>nodejs/node (node)</summary>

### [`v24.22.0`](https://github.com/nodejs/node/releases/tag/v24.22.0): 2026-10-14, Version 24.22.0 'Krypton' (LTS), @&#8203;richardlau prepared by @&#8203;aduh95

[Compare Source](https://github.com/nodejs/node/compare/v24.21.0...v24.22.0)

##### Notable Changes

- \[[`ddbf974b47`](https://github.com/nodejs/node/commit/ddbf974b47)] - **(SEMVER-MINOR)** **crypto**: add `crypto.parsePKCS12()` (Brian Muenzenmeyer) [#&#8203;65627](https://github.com/nodejs/node/pull/65627)
- \[[`c162c68ff0`](https://github.com/nodejs/node/commit/c162c68ff0)] - **(SEMVER-MINOR)** **crypto**: add a generic MAC API (Filip Skokan) [#&#8203;65553](https://github.com/nodejs/node/pull/65553)
- \[[`a4ab3d84d7`](https://github.com/nodejs/node/commit/a4ab3d84d7)] - **(SEMVER-MINOR)** **crypto**: discover ciphers from OpenSSL providers (Filip Skokan) [#&#8203;65484](https://github.com/nodejs/node/pull/65484)
- \[[`c2f1e829ea`](https://github.com/nodejs/node/commit/c2f1e829ea)] - **(SEMVER-MINOR)** **crypto**: discover hashes from OpenSSL providers (Filip Skokan) [#&#8203;65484](https://github.com/nodejs/node/pull/65484)
- \[[`51aad5a80d`](https://github.com/nodejs/node/commit/51aad5a80d)] - **(SEMVER-MINOR)** **crypto**: enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) [#&#8203;63411](https://github.com/nodejs/node/pull/63411)
- \[[`d11c65d2f2`](https://github.com/nodejs/node/commit/d11c65d2f2)] - **doc**: add araujogui to collaborators (Guilherme Araújo) [#&#8203;66090](https://github.com/nodejs/node/pull/66090)
- \[[`acc1578179`](https://github.com/nodejs/node/commit/acc1578179)] - **doc**: deprecate `Server.prototype._listen2` in `node:net` (Antoine du Hamel) [#&#8203;65593](https://github.com/nodejs/node/pull/65593)
- \[[`a7f8de6362`](https://github.com/nodejs/node/commit/a7f8de6362)] - **(SEMVER-MINOR)** **net**: support sending `net.BoundSocket` to threads and child processes (Guy Bedford) [#&#8203;64725](https://github.com/nodejs/node/pull/64725)
- \[[`60c3eb61bd`](https://github.com/nodejs/node/commit/60c3eb61bd)] - **(SEMVER-MINOR)** **perf_hooks**: implement `SlidingWindowHistogram` (James M Snell) [#&#8203;65825](https://github.com/nodejs/node/pull/65825)
- \[[`6b3e6f9d5c`](https://github.com/nodejs/node/commit/6b3e6f9d5c)] - **(SEMVER-MINOR)** **perf_hooks**: implement qrde analysis support in Histogram (James M Snell) [#&#8203;65806](https://github.com/nodejs/node/pull/65806)
- \[[`75456a3512`](https://github.com/nodejs/node/commit/75456a3512)] - **(SEMVER-MINOR)** **perf_hooks**: implement Histogram `meanCI` API (James M Snell) [#&#8203;65606](https://github.com/nodejs/node/pull/65606)
- \[[`72d1b40c56`](https://github.com/nodejs/node/commit/72d1b40c56)] - **(SEMVER-MINOR)** **perf_hooks**: add CBOR export/import for histogram exchange (James M Snell) [#&#8203;65434](https://github.com/nodejs/node/pull/65434)
- \[[`41161dda87`](https://github.com/nodejs/node/commit/41161dda87)] - **(SEMVER-MINOR)** **sqlite**: add `StatementSync.prototype.close()` (Guilherme Araújo) [#&#8203;64232](https://github.com/nodejs/node/pull/64232)
- \[[`adbc757d70`](https://github.com/nodejs/node/commit/adbc757d70)] - **(SEMVER-MINOR)** **sqlite**: add `StatementSync.prototype[Symbol.dispose]()` (Guilherme Araújo) [#&#8203;64232](https://github.com/nodejs/node/pull/64232)
- \[[`241339f072`](https://github.com/nodejs/node/commit/241339f072)] - **(SEMVER-MINOR)** **src,lib**: add `util.markPromiseAsHandled` (James M Snell) [#&#8203;65805](https://github.com/nodejs/node/pull/65805)
- \[[`63b0974d9e`](https://github.com/nodejs/node/commit/63b0974d9e)] - **(SEMVER-MINOR)** **util**: implement `util.throttle` (James M Snell) [#&#8203;65899](https://github.com/nodejs/node/pull/65899)
- \[[`a3bbb5a26f`](https://github.com/nodejs/node/commit/a3bbb5a26f)] - **(SEMVER-MINOR)** **util**: implement `debounce` (James M Snell) [#&#8203;65899](https://github.com/nodejs/node/pull/65899)

##### Commits

- \[[`e6832b2cb1`](https://github.com/nodejs/node/commit/e6832b2cb1)] - **assert**: fix TypeError on deepStrictEqual with null Map key or Set member (Sergey Sannikov) [#&#8203;64449](https://github.com/nodejs/node/pull/64449)
- \[[`a079177d9f`](https://github.com/nodejs/node/commit/a079177d9f)] - **benchmark**: add --csv option to compare.js with --analyze (James M Snell) [#&#8203;65922](https://github.com/nodejs/node/pull/65922)
- \[[`10b1a0f70f`](https://github.com/nodejs/node/commit/10b1a0f70f)] - **benchmark**: fix max-regressions detection in compare.js (James M Snell) [#&#8203;65587](https://github.com/nodejs/node/pull/65587)
- \[[`e0c7ba8ad5`](https://github.com/nodejs/node/commit/e0c7ba8ad5)] - **benchmark**: add --analyze option to benchmark/scatter.js (James M Snell) [#&#8203;65594](https://github.com/nodejs/node/pull/65594)
- \[[`21fed10bb0`](https://github.com/nodejs/node/commit/21fed10bb0)] - **benchmark**: add crypto class benchmarks (Filip Skokan) [#&#8203;65518](https://github.com/nodejs/node/pull/65518)
- \[[`fa912242b7`](https://github.com/nodejs/node/commit/fa912242b7)] - **buffer**: fix unaligned UTF-16LE decoding (Matteo Collina) [#&#8203;65905](https://github.com/nodejs/node/pull/65905)
- \[[`a6bd0c1413`](https://github.com/nodejs/node/commit/a6bd0c1413)] - **build**: suppress OpenSSL asm warnings with clang (Richard Lau) [#&#8203;66023](https://github.com/nodejs/node/pull/66023)
- \[[`94e12139ee`](https://github.com/nodejs/node/commit/94e12139ee)] - **build**: derive V8_LOGGING_LEVEL from dcheck_always_on (Joyee Cheung) [#&#8203;65744](https://github.com/nodejs/node/pull/65744)
- \[[`7a2f322943`](https://github.com/nodejs/node/commit/7a2f322943)] - **build**: fix quiet default for make builds (Shelley Vohr) [#&#8203;65826](https://github.com/nodejs/node/pull/65826)
- \[[`c280d650b0`](https://github.com/nodejs/node/commit/c280d650b0)] - **build**: allow linking shared dependencies in the GN build (Shelley Vohr) [#&#8203;65797](https://github.com/nodejs/node/pull/65797)
- \[[`4b23a4472c`](https://github.com/nodejs/node/commit/4b23a4472c)] - **build**: enable the V8 sandbox in shared-cage builds (Shelley Vohr) [#&#8203;62237](https://github.com/nodejs/node/pull/62237)
- \[[`676e15c003`](https://github.com/nodejs/node/commit/676e15c003)] - **build**: define V8_CONTIGUOUS_COMPRESSED_RO_SPACE for shared cage (Shelley Vohr) [#&#8203;65464](https://github.com/nodejs/node/pull/65464)
- \[[`f784058482`](https://github.com/nodejs/node/commit/f784058482)] - **build**: remove obsolete configure flags (Chengzhong Wu) [#&#8203;65456](https://github.com/nodejs/node/pull/65456)
- \[[`f63f37d243`](https://github.com/nodejs/node/commit/f63f37d243)] - **build**: activate correct default flags for riscv64 (Stewart X Addison) [#&#8203;65708](https://github.com/nodejs/node/pull/65708)
- \[[`da46ac075d`](https://github.com/nodejs/node/commit/da46ac075d)] - **build**: derive NODE_ARCH from target_cpu in the GN build (Shelley Vohr) [#&#8203;65491](https://github.com/nodejs/node/pull/65491)
- \[[`249e9a16dd`](https://github.com/nodejs/node/commit/249e9a16dd)] - **build,src**: gate jspi flag on V8_ENABLE_WEBASSEMBLY (Piotr Kubaj) [#&#8203;66082](https://github.com/nodejs/node/pull/66082)
- \[[`146f00f64b`](https://github.com/nodejs/node/commit/146f00f64b)] - **child_process**: clear timeout timer on spawn-time error too (kishore280) [#&#8203;65506](https://github.com/nodejs/node/pull/65506)
- \[[`13987f4418`](https://github.com/nodejs/node/commit/13987f4418)] - **crypto**: remove redundent `std::move` call (Antoine du Hamel) [#&#8203;66111](https://github.com/nodejs/node/pull/66111)
- \[[`ef957ac85f`](https://github.com/nodejs/node/commit/ef957ac85f)] - **crypto**: skip private RSA parameters in key details (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`8feccc5e22`](https://github.com/nodejs/node/commit/8feccc5e22)] - **crypto**: use provider EC group names (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`764e0d1120`](https://github.com/nodejs/node/commit/764e0d1120)] - **crypto**: fetch ciphers for private-key encoding (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`50ffed1979`](https://github.com/nodejs/node/commit/50ffed1979)] - **crypto**: decode [PKCS#1](https://github.com/PKCS/node/issues/1) keys through providers (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`56c16b2fd6`](https://github.com/nodejs/node/commit/56c16b2fd6)] - **crypto**: derive keys through EVP_KDF (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`a4effe6809`](https://github.com/nodejs/node/commit/a4effe6809)] - **crypto**: use names for asymmetric key algorithms (Filip Skokan) [#&#8203;65966](https://github.com/nodejs/node/pull/65966)
- \[[`ddbf974b47`](https://github.com/nodejs/node/commit/ddbf974b47)] - **(SEMVER-MINOR)** **crypto**: add crypto.parsePKCS12() (Brian Muenzenmeyer) [#&#8203;65627](https://github.com/nodejs/node/pull/65627)
- \[[`8e631aa48f`](https://github.com/nodejs/node/commit/8e631aa48f)] - **crypto**: add Hybrid KEMs to Web Cryptography (Filip Skokan) [#&#8203;65759](https://github.com/nodejs/node/pull/65759)
- \[[`5c51129e16`](https://github.com/nodejs/node/commit/5c51129e16)] - **crypto**: optimize private EC JWK import (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`c2ec40c2d7`](https://github.com/nodejs/node/commit/c2ec40c2d7)] - **crypto**: disable non-FIPS WebCrypto paths in FIPS mode (Filip Skokan) [#&#8203;65172](https://github.com/nodejs/node/pull/65172)
- \[[`e198aa0f79`](https://github.com/nodejs/node/commit/e198aa0f79)] - **crypto**: read RSA-PSS restrictions from provider (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`253784f0e9`](https://github.com/nodejs/node/commit/253784f0e9)] - **crypto**: optimize and benchmark key preparation (Filip Skokan) [#&#8203;65892](https://github.com/nodejs/node/pull/65892)
- \[[`80a6ad509b`](https://github.com/nodejs/node/commit/80a6ad509b)] - **crypto**: avoid EC reconstruction for signature sizing (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`5b592b772c`](https://github.com/nodejs/node/commit/5b592b772c)] - **crypto**: avoid EC raw export reconstruction (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`ee956ae3bf`](https://github.com/nodejs/node/commit/ee956ae3bf)] - **crypto**: export EC JWK coordinates directly (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`684008be58`](https://github.com/nodejs/node/commit/684008be58)] - **crypto**: read EC curve metadata directly (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`f4665f1c41`](https://github.com/nodejs/node/commit/f4665f1c41)] - **crypto**: validate the limit of PBKDF2 iterations (Filip Skokan) [#&#8203;65704](https://github.com/nodejs/node/pull/65704)
- \[[`624abbecd7`](https://github.com/nodejs/node/commit/624abbecd7)] - **crypto**: use primordials in HKDF info validation (Filip Skokan) [#&#8203;65704](https://github.com/nodejs/node/pull/65704)
- \[[`e4d916f175`](https://github.com/nodejs/node/commit/e4d916f175)] - **crypto**: add mgf1Hash for RSA-OAEP (Adam Mcgrath) [#&#8203;65073](https://github.com/nodejs/node/pull/65073)
- \[[`db8a9162a8`](https://github.com/nodejs/node/commit/db8a9162a8)] - **crypto**: fix multi-prime RSA JWKs (Filip Skokan) [#&#8203;65649](https://github.com/nodejs/node/pull/65649)
- \[[`022ac83504`](https://github.com/nodejs/node/commit/022ac83504)] - **crypto**: cache valid ECDH key pairs (Filip Skokan) [#&#8203;65615](https://github.com/nodejs/node/pull/65615)
- \[[`c61953ebcc`](https://github.com/nodejs/node/commit/c61953ebcc)] - **crypto**: add strict mode to --force-fips (Filip Skokan) [#&#8203;65645](https://github.com/nodejs/node/pull/65645)
- \[[`db6ea132a5`](https://github.com/nodejs/node/commit/db6ea132a5)] - **crypto**: add FIPS indicator diagnostics channel (Filip Skokan) [#&#8203;65645](https://github.com/nodejs/node/pull/65645)
- \[[`c162c68ff0`](https://github.com/nodejs/node/commit/c162c68ff0)] - **(SEMVER-MINOR)** **crypto**: add a generic MAC API (Filip Skokan) [#&#8203;65553](https://github.com/nodejs/node/pull/65553)
- \[[`2b62aafd20`](https://github.com/nodejs/node/commit/2b62aafd20)] - **crypto**: validate JWK usages before key_ops (Filip Skokan) [#&#8203;65550](https://github.com/nodejs/node/pull/65550)
- \[[`ec7819db69`](https://github.com/nodejs/node/commit/ec7819db69)] - **crypto**: fix RSA-PSS oversized salt handling (Filip Skokan) [#&#8203;65550](https://github.com/nodejs/node/pull/65550)
- \[[`a4ab3d84d7`](https://github.com/nodejs/node/commit/a4ab3d84d7)] - **(SEMVER-MINOR)** **crypto**: discover ciphers from OpenSSL providers (Filip Skokan) [#&#8203;65484](https://github.com/nodejs/node/pull/65484)
- \[[`c2f1e829ea`](https://github.com/nodejs/node/commit/c2f1e829ea)] - **(SEMVER-MINOR)** **crypto**: discover hashes from OpenSSL providers (Filip Skokan) [#&#8203;65484](https://github.com/nodejs/node/pull/65484)
- \[[`51aad5a80d`](https://github.com/nodejs/node/commit/51aad5a80d)] - **(SEMVER-MINOR)** **crypto**: enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) [#&#8203;63411](https://github.com/nodejs/node/pull/63411)
- \[[`5a46a9acbb`](https://github.com/nodejs/node/commit/5a46a9acbb)] - **crypto**: improve SubtleCrypto.supports() accuracy (Filip Skokan) [#&#8203;65222](https://github.com/nodejs/node/pull/65222)
- \[[`191ebfb26c`](https://github.com/nodejs/node/commit/191ebfb26c)] - **crypto**: fix public PKCS8 export error (한국) [#&#8203;65609](https://github.com/nodejs/node/pull/65609)
- \[[`b6d7ed372b`](https://github.com/nodejs/node/commit/b6d7ed372b)] - **crypto**: fix private SPKI export error (Filip Skokan) [#&#8203;65550](https://github.com/nodejs/node/pull/65550)
- \[[`79509c25a4`](https://github.com/nodejs/node/commit/79509c25a4)] - **crypto**: correct CCM decryption FIPS error message (kyungrae) [#&#8203;65450](https://github.com/nodejs/node/pull/65450)
- \[[`9adc87bc16`](https://github.com/nodejs/node/commit/9adc87bc16)] - **crypto**: harden X509Certificate state (Filip Skokan) [#&#8203;65518](https://github.com/nodejs/node/pull/65518)
- \[[`c63aa331b4`](https://github.com/nodejs/node/commit/c63aa331b4)] - **crypto**: optimize key slot caching (Filip Skokan) [#&#8203;65518](https://github.com/nodejs/node/pull/65518)
- \[[`87daea43a7`](https://github.com/nodejs/node/commit/87daea43a7)] - **crypto**: add null checks for OPENSSL_INIT_new() (Nora Dossche) [#&#8203;63457](https://github.com/nodejs/node/pull/63457)
- \[[`98ca5e9358`](https://github.com/nodejs/node/commit/98ca5e9358)] - **crypto**: prevent Hmac.digest() from returning uninitialized memory (Matteo Collina) [#&#8203;65112](https://github.com/nodejs/node/pull/65112)
- \[[`0c090a28cd`](https://github.com/nodejs/node/commit/0c090a28cd)] - **crypto**: avoid throwing CryptoKey brand checks (Filip Skokan) [#&#8203;65503](https://github.com/nodejs/node/pull/65503)
- \[[`a13cc3f723`](https://github.com/nodejs/node/commit/a13cc3f723)] - **crypto**: avoid throwing KeyObject brand checks (Filip Skokan) [#&#8203;65503](https://github.com/nodejs/node/pull/65503)
- \[[`b8db0045ef`](https://github.com/nodejs/node/commit/b8db0045ef)] - **deps**: V8: cherry-pick [`ea9c016`](https://github.com/nodejs/node/commit/ea9c016f26ad) (Gundepalli Sravani) [#&#8203;66570](https://github.com/nodejs/node/pull/66570)
- \[[`ba09b53487`](https://github.com/nodejs/node/commit/ba09b53487)] - **deps**: V8: backport [`c355350`](https://github.com/nodejs/node/commit/c3553509f460) (Jakob Linke) [#&#8203;66089](https://github.com/nodejs/node/pull/66089)
- \[[`9ce8ef405b`](https://github.com/nodejs/node/commit/9ce8ef405b)] - **deps**: V8: backport [`8901c79`](https://github.com/nodejs/node/commit/8901c793e439) (Toon Verwaest) [#&#8203;66089](https://github.com/nodejs/node/pull/66089)
- \[[`fb0d0ca289`](https://github.com/nodejs/node/commit/fb0d0ca289)] - **deps**: V8: backport [`0b94a9f`](https://github.com/nodejs/node/commit/0b94a9fd23ba) (Ruan Gustavo) [#&#8203;65753](https://github.com/nodejs/node/pull/65753)
- \[[`2faca508c0`](https://github.com/nodejs/node/commit/2faca508c0)] - **deps**: update googletest to [`8eff9e3`](https://github.com/nodejs/node/commit/8eff9e336692fc95961e096564f1044c600b881d) (Node.js GitHub Bot) [#&#8203;66009](https://github.com/nodejs/node/pull/66009)
- \[[`4396c9bffe`](https://github.com/nodejs/node/commit/4396c9bffe)] - **deps**: update googletest to [`283c175`](https://github.com/nodejs/node/commit/283c17563fe7a1111cd7f581aa5d541e8baeff2f) (Node.js GitHub Bot) [#&#8203;65833](https://github.com/nodejs/node/pull/65833)
- \[[`8a5b12570c`](https://github.com/nodejs/node/commit/8a5b12570c)] - **deps**: update simdjson to 4.6.11 (Node.js GitHub Bot) [#&#8203;65834](https://github.com/nodejs/node/pull/65834)
- \[[`c47feb09e8`](https://github.com/nodejs/node/commit/c47feb09e8)] - **deps**: update zlib to 1.3.2.1-motley-285e94b (Node.js GitHub Bot) [#&#8203;65835](https://github.com/nodejs/node/pull/65835)
- \[[`9f0d905286`](https://github.com/nodejs/node/commit/9f0d905286)] - **deps**: upgrade npm to 11.19.1 (npm team) [#&#8203;65573](https://github.com/nodejs/node/pull/65573)
- \[[`373cd332d8`](https://github.com/nodejs/node/commit/373cd332d8)] - **deps**: update googletest to [`36ba75f`](https://github.com/nodejs/node/commit/36ba75f0ad5383a9759f17f3f72fd4661c72cb6d) (Node.js GitHub Bot) [#&#8203;65654](https://github.com/nodejs/node/pull/65654)
- \[[`aeed6132a7`](https://github.com/nodejs/node/commit/aeed6132a7)] - **deps**: update simdjson to 4.6.9 (Node.js GitHub Bot) [#&#8203;65655](https://github.com/nodejs/node/pull/65655)
- \[[`2583571342`](https://github.com/nodejs/node/commit/2583571342)] - **deps**: update zlib to 1.3.2.1-motley-5eb4d7e (Node.js GitHub Bot) [#&#8203;65494](https://github.com/nodejs/node/pull/65494)
- \[[`d11c65d2f2`](https://github.com/nodejs/node/commit/d11c65d2f2)] - **doc**: add araujogui to collaborators (Guilherme Araújo) [#&#8203;66090](https://github.com/nodejs/node/pull/66090)
- \[[`0a4a8d602a`](https://github.com/nodejs/node/commit/0a4a8d602a)] - **doc**: fix duplicate 'the' typo in `node_platform.cc` (Muhammad Al-Muzahid) [#&#8203;66058](https://github.com/nodejs/node/pull/66058)
- \[[`b6538138ef`](https://github.com/nodejs/node/commit/b6538138ef)] - **doc**: clarify sub-1000ms behavior in socket.setKeepAlive (Haram Jeong) [#&#8203;65869](https://github.com/nodejs/node/pull/65869)
- \[[`d319fa7de4`](https://github.com/nodejs/node/commit/d319fa7de4)] - **doc**: remove obsolete mentioning of cl.exe on windows (Chengzhong Wu) [#&#8203;66038](https://github.com/nodejs/node/pull/66038)
- \[[`67cb305b59`](https://github.com/nodejs/node/commit/67cb305b59)] - **doc**: note that default signal handling resets the signal mask (Shelley Vohr) [#&#8203;65877](https://github.com/nodejs/node/pull/65877)
- \[[`160d44e025`](https://github.com/nodejs/node/commit/160d44e025)] - **doc**: clarify QUIC async write backpressure (John Finnerty) [#&#8203;65947](https://github.com/nodejs/node/pull/65947)
- \[[`ffd47a7ee5`](https://github.com/nodejs/node/commit/ffd47a7ee5)] - **doc**: clarify permission model scope for output paths (Rafael Gonzaga) [#&#8203;66004](https://github.com/nodejs/node/pull/66004)
- \[[`2e1772a8ab`](https://github.com/nodejs/node/commit/2e1772a8ab)] - **doc**: fill in missing zstd docs (James M Snell) [#&#8203;65867](https://github.com/nodejs/node/pull/65867)
- \[[`9f88c6f8dc`](https://github.com/nodejs/node/commit/9f88c6f8dc)] - **doc**: add inoway46 as triager (Yuya Inoue) [#&#8203;65565](https://github.com/nodejs/node/pull/65565)
- \[[`c2620d01f3`](https://github.com/nodejs/node/commit/c2620d01f3)] - **doc**: document windowsHide for child_process.fork (Christopher Buss) [#&#8203;65887](https://github.com/nodejs/node/pull/65887)
- \[[`6076111e1a`](https://github.com/nodejs/node/commit/6076111e1a)] - **doc**: qualify directory read ordering for native fs (Trivikram Kamat) [#&#8203;65868](https://github.com/nodejs/node/pull/65868)
- \[[`7bf048a336`](https://github.com/nodejs/node/commit/7bf048a336)] - **doc**: add DOMException section to errors API reference (Avocado) [#&#8203;65206](https://github.com/nodejs/node/pull/65206)
- \[[`414b6bfa62`](https://github.com/nodejs/node/commit/414b6bfa62)] - **doc**: expand revert commit collaborator instructions (Mike McCready) [#&#8203;65848](https://github.com/nodejs/node/pull/65848)
- \[[`c8ac91692c`](https://github.com/nodejs/node/commit/c8ac91692c)] - **doc**: note that FreeEnvironment() runs a shared event loop (Shelley Vohr) [#&#8203;65691](https://github.com/nodejs/node/pull/65691)
- \[[`cc47cc0983`](https://github.com/nodejs/node/commit/cc47cc0983)] - **doc**: clarify security triage dispositions and permission boundaries (Rafael Gonzaga) [#&#8203;65436](https://github.com/nodejs/node/pull/65436)
- \[[`8b79a71e78`](https://github.com/nodejs/node/commit/8b79a71e78)] - **doc**: fix default limit of maxHeadersCount (Aryn H) [#&#8203;65472](https://github.com/nodejs/node/pull/65472)
- \[[`56b1252a54`](https://github.com/nodejs/node/commit/56b1252a54)] - **doc**: fix return types for sync methods (Chiang Fong Lee) [#&#8203;58575](https://github.com/nodejs/node/pull/58575)
- \[[`da0d32a333`](https://github.com/nodejs/node/commit/da0d32a333)] - **doc**: document REPL DEP0185 throws and uncaught-exception behavior (Adrián Estrada) [#&#8203;64993](https://github.com/nodejs/node/pull/64993)
- \[[`f8ab3619b6`](https://github.com/nodejs/node/commit/f8ab3619b6)] - **doc**: document close() error when in a sqlite callback (Trivikram Kamat) [#&#8203;65090](https://github.com/nodejs/node/pull/65090)
- \[[`131f1db302`](https://github.com/nodejs/node/commit/131f1db302)] - **doc**: clarify return type of `fs.mkdtemp*` (Antoine du Hamel) [#&#8203;65743](https://github.com/nodejs/node/pull/65743)
- \[[`7755e98183`](https://github.com/nodejs/node/commit/7755e98183)] - **doc**: update `changelog-maker` instructions for releasing (Juan José) [#&#8203;65707](https://github.com/nodejs/node/pull/65707)
- \[[`f982a53433`](https://github.com/nodejs/node/commit/f982a53433)] - **doc**: add stability status to `crypto.setEngine` (Antoine du Hamel) [#&#8203;65746](https://github.com/nodejs/node/pull/65746)
- \[[`17be003f7c`](https://github.com/nodejs/node/commit/17be003f7c)] - **doc**: remove outdated TLS authorized warning (Tim Perry) [#&#8203;65597](https://github.com/nodejs/node/pull/65597)
- \[[`424002232d`](https://github.com/nodejs/node/commit/424002232d)] - **doc**: fix stale TOC in maintaining-dependencies (greenhead) [#&#8203;65523](https://github.com/nodejs/node/pull/65523)
- \[[`dddb9b57a5`](https://github.com/nodejs/node/commit/dddb9b57a5)] - **doc**: refactor the AI guidelines (Joyee Cheung) [#&#8203;65269](https://github.com/nodejs/node/pull/65269)
- \[[`397b58e113`](https://github.com/nodejs/node/commit/397b58e113)] - **doc**: fix triggerAsyncId() comment in async_hooks example (soreavis) [#&#8203;64583](https://github.com/nodejs/node/pull/64583)
- \[[`338ec94d83`](https://github.com/nodejs/node/commit/338ec94d83)] - **doc**: fix fsPromises.watch overflow value (Matt Radbourne) [#&#8203;64605](https://github.com/nodejs/node/pull/64605)
- \[[`f18be21b14`](https://github.com/nodejs/node/commit/f18be21b14)] - **doc**: clarify stream direction in options.stdio note (Avocado) [#&#8203;65236](https://github.com/nodejs/node/pull/65236)
- \[[`f07c6acd8b`](https://github.com/nodejs/node/commit/f07c6acd8b)] - **doc**: clarify signal listener behavior (Som Samantray) [#&#8203;65243](https://github.com/nodejs/node/pull/65243)
- \[[`8bc17b0c7a`](https://github.com/nodejs/node/commit/8bc17b0c7a)] - **doc**: add test reporter event lifecycle diagram (sangwook) [#&#8203;63780](https://github.com/nodejs/node/pull/63780)
- \[[`452e7477d4`](https://github.com/nodejs/node/commit/452e7477d4)] - **doc**: discourage AbortSignal cleanup for long-lived resources (Efe Karasakal) [#&#8203;64342](https://github.com/nodejs/node/pull/64342)
- \[[`acc1578179`](https://github.com/nodejs/node/commit/acc1578179)] - **doc**: deprecate `Server.prototype._listen2` in `node:net` (Antoine du Hamel) [#&#8203;65593](https://github.com/nodejs/node/pull/65593)
- \[[`e7ed4361d6`](https://github.com/nodejs/node/commit/e7ed4361d6)] - **doc,test**: account for OpenSSL 4.1 behaviours (Filip Skokan) [#&#8203;65956](https://github.com/nodejs/node/pull/65956)
- \[[`c65fafeab4`](https://github.com/nodejs/node/commit/c65fafeab4)] - **errors**: validate constructor name (Christian Aurich) [#&#8203;65607](https://github.com/nodejs/node/pull/65607)
- \[[`f6b47938b7`](https://github.com/nodejs/node/commit/f6b47938b7)] - **events**: fix weak listener retention overwrite (Aryan) [#&#8203;64024](https://github.com/nodejs/node/pull/64024)
- \[[`a27db42c3e`](https://github.com/nodejs/node/commit/a27db42c3e)] - **fs**: coerce FileHandle.read length like fs.read (Xia Chao) [#&#8203;65521](https://github.com/nodejs/node/pull/65521)
- \[[`f3019b522a`](https://github.com/nodejs/node/commit/f3019b522a)] - **fs**: throw on existing dir in cpSync with errorOnExist (Daijiro Wachi) [#&#8203;64124](https://github.com/nodejs/node/pull/64124)
- \[[`cd1011458f`](https://github.com/nodejs/node/commit/cd1011458f)] - **fs**: support removing read-only files in rmSync on Windows (Sparsh :)) [#&#8203;64453](https://github.com/nodejs/node/pull/64453)
- \[[`d659dd8cd8`](https://github.com/nodejs/node/commit/d659dd8cd8)] - **fs**: give directories created by cpSync the source directory's mode (Shelley Vohr) [#&#8203;65488](https://github.com/nodejs/node/pull/65488)
- \[[`1dfb047293`](https://github.com/nodejs/node/commit/1dfb047293)] - **fs**: handle recursive watch setup races (Filip Skokan) [#&#8203;65699](https://github.com/nodejs/node/pull/65699)
- \[[`bc431c8413`](https://github.com/nodejs/node/commit/bc431c8413)] - **fs**: apply nocase to literal glob exclude patterns (Yusuke Hayashi) [#&#8203;64817](https://github.com/nodejs/node/pull/64817)
- \[[`dd5662e641`](https://github.com/nodejs/node/commit/dd5662e641)] - **fs**: do not descend into symlinks for \*\* unless following symlinks (RafaelGSS) [#&#8203;65435](https://github.com/nodejs/node/pull/65435)
- \[[`ac4cf54292`](https://github.com/nodejs/node/commit/ac4cf54292)] - **fs**: watch directories, not files, in recursive fs.watch fallback (Shelley Vohr) [#&#8203;65486](https://github.com/nodejs/node/pull/65486)
- \[[`7804bfbd71`](https://github.com/nodejs/node/commit/7804bfbd71)] - **fs**: preserve directory timestamps in cp (Abhinandan Kumar) [#&#8203;65540](https://github.com/nodejs/node/pull/65540)
- \[[`ba5ca5a1a5`](https://github.com/nodejs/node/commit/ba5ca5a1a5)] - **fs**: fix recursive watch error handling (Filip Skokan) [#&#8203;65635](https://github.com/nodejs/node/pull/65635)
- \[[`b71c4c0551`](https://github.com/nodejs/node/commit/b71c4c0551)] - **fs**: fix rmSync error messages for non-ASCII paths (Yeaseen) [#&#8203;61233](https://github.com/nodejs/node/pull/61233)
- \[[`53b4700892`](https://github.com/nodejs/node/commit/53b4700892)] - **http**: don't destroy socket after request completes (Barath Raj) [#&#8203;65952](https://github.com/nodejs/node/pull/65952)
- \[[`96d4c23f17`](https://github.com/nodejs/node/commit/96d4c23f17)] - **http**: fast-forward teardown of unread messages (Matteo Collina) [#&#8203;65732](https://github.com/nodejs/node/pull/65732)
- \[[`742b4bf5a6`](https://github.com/nodejs/node/commit/742b4bf5a6)] - **http**: coalesce chunked writes during auto-corking (GetThatCookie) [#&#8203;64987](https://github.com/nodejs/node/pull/64987)
- \[[`8921108175`](https://github.com/nodejs/node/commit/8921108175)] - **http2**: settle pending write callbacks on destroy (Matteo Collina) [#&#8203;66016](https://github.com/nodejs/node/pull/66016)
- \[[`9a2f77a3fc`](https://github.com/nodejs/node/commit/9a2f77a3fc)] - **http2**: fix onread assert when destroying session from stream handler (Sankalp Thakur) [#&#8203;65116](https://github.com/nodejs/node/pull/65116)
- \[[`99e41eb43a`](https://github.com/nodejs/node/commit/99e41eb43a)] - **http2**: error for incomplete reads on RST, auto-drain, deprecate aborted (Tim Perry) [#&#8203;63249](https://github.com/nodejs/node/pull/63249)
- \[[`d520b9601c`](https://github.com/nodejs/node/commit/d520b9601c)] - **http2**: fix write deadlock exposed by larger window sizes (Tim Perry) [#&#8203;65440](https://github.com/nodejs/node/pull/65440)
- \[[`86b2497aae`](https://github.com/nodejs/node/commit/86b2497aae)] - **http2**: fix async context loss when trailers carry END_STREAM (Orgad Shaneh) [#&#8203;63814](https://github.com/nodejs/node/pull/63814)
- \[[`536ccc7daf`](https://github.com/nodejs/node/commit/536ccc7daf)] - **https**: limit proxy CONNECT response headers (Matteo Collina) [#&#8203;64545](https://github.com/nodejs/node/pull/64545)
- \[[`fe6147832b`](https://github.com/nodejs/node/commit/fe6147832b)] - **inspector**: fix abort when two Environments own the inspector (Shelley Vohr) [#&#8203;65877](https://github.com/nodejs/node/pull/65877)
- \[[`843a27782a`](https://github.com/nodejs/node/commit/843a27782a)] - **inspector**: fix crash when the IsolateData has no platform (Shelley Vohr) [#&#8203;65818](https://github.com/nodejs/node/pull/65818)
- \[[`3f0b6d3308`](https://github.com/nodejs/node/commit/3f0b6d3308)] - **lib**: avoid repeat internal receiver checks (Filip Skokan) [#&#8203;65910](https://github.com/nodejs/node/pull/65910)
- \[[`0039479b4a`](https://github.com/nodejs/node/commit/0039479b4a)] - **lib**: fix shared buffer growability validation (Filip Skokan) [#&#8203;65845](https://github.com/nodejs/node/pull/65845)
- \[[`e7907130ae`](https://github.com/nodejs/node/commit/e7907130ae)] - **lib**: use Web IDL interface brand checks (Filip Skokan) [#&#8203;65846](https://github.com/nodejs/node/pull/65846)
- \[[`7ae085552b`](https://github.com/nodejs/node/commit/7ae085552b)] - **lib**: fix AbortSignal.any() abort propagation (Yuya Inoue) [#&#8203;66014](https://github.com/nodejs/node/pull/66014)
- \[[`01032f4fdc`](https://github.com/nodejs/node/commit/01032f4fdc)] - **lib**: fix for FileHandle.readableWebStream (Patrick Dähne) [#&#8203;58842](https://github.com/nodejs/node/pull/58842)
- \[[`60a9a28206`](https://github.com/nodejs/node/commit/60a9a28206)] - **lib**: avoid unsafe array iteration in cli table (Donghoon Kang) [#&#8203;65838](https://github.com/nodejs/node/pull/65838)
- \[[`230a7fcef0`](https://github.com/nodejs/node/commit/230a7fcef0)] - **lib**: optimize internal Web IDL dictionaries (Filip Skokan) [#&#8203;65857](https://github.com/nodejs/node/pull/65857)
- \[[`7cc02b14ec`](https://github.com/nodejs/node/commit/7cc02b14ec)] - **lib**: validate sequence iterator objects (Filip Skokan) [#&#8203;65844](https://github.com/nodejs/node/pull/65844)
- \[[`c2bb3aeccc`](https://github.com/nodejs/node/commit/c2bb3aeccc)] - **lib**: defer source map payload decoding until first use (Shelley Vohr) [#&#8203;65490](https://github.com/nodejs/node/pull/65490)
- \[[`c4b390cf17`](https://github.com/nodejs/node/commit/c4b390cf17)] - **lib**: optimize async context frame activation (Tim Perry) [#&#8203;65519](https://github.com/nodejs/node/pull/65519)
- \[[`3e4fc50a4f`](https://github.com/nodejs/node/commit/3e4fc50a4f)] - **lib**: use validateArray for array arguments (JunHwan Choi) [#&#8203;65344](https://github.com/nodejs/node/pull/65344)
- \[[`b351ac9cd4`](https://github.com/nodejs/node/commit/b351ac9cd4)] - **meta**: bump step-security/harden-runner from 2.21.0 to 2.21.1 (dependabot\[bot]) [#&#8203;66044](https://github.com/nodejs/node/pull/66044)
- \[[`693e890fec`](https://github.com/nodejs/node/commit/693e890fec)] - **meta**: bump github/codeql-action/upload-sarif from 4.37.9 to 4.38.0 (dependabot\[bot]) [#&#8203;66046](https://github.com/nodejs/node/pull/66046)
- \[[`9c2abc13c2`](https://github.com/nodejs/node/commit/9c2abc13c2)] - **meta**: bump github/codeql-action/init from 4.37.9 to 4.38.0 (dependabot\[bot]) [#&#8203;66048](https://github.com/nodejs/node/pull/66048)
- \[[`b3c5c2b91d`](https://github.com/nodejs/node/commit/b3c5c2b91d)] - **meta**: bump github/codeql-action/analyze from 4.37.9 to 4.38.0 (dependabot\[bot]) [#&#8203;66049](https://github.com/nodejs/node/pull/66049)
- \[[`2428b13b02`](https://github.com/nodejs/node/commit/2428b13b02)] - **meta**: bump github/codeql-action/autobuild from 4.37.9 to 4.38.0 (dependabot\[bot]) [#&#8203;66050](https://github.com/nodejs/node/pull/66050)
- \[[`eff5d15041`](https://github.com/nodejs/node/commit/eff5d15041)] - **meta**: add joyeecheung as v8 currency strategic initiative champion (Joyee Cheung) [#&#8203;65965](https://github.com/nodejs/node/pull/65965)
- \[[`aa549fed0d`](https://github.com/nodejs/node/commit/aa549fed0d)] - **meta**: expand on collaborator restoration process (Chengzhong Wu) [#&#8203;65962](https://github.com/nodejs/node/pull/65962)
- \[[`593b40eb2b`](https://github.com/nodejs/node/commit/593b40eb2b)] - **meta**: add web-standards as webidl owners (Filip Skokan) [#&#8203;65856](https://github.com/nodejs/node/pull/65856)
- \[[`e711d3fef3`](https://github.com/nodejs/node/commit/e711d3fef3)] - **meta**: bump actions/checkout from 7.0.0 to 7.0.1 (dependabot\[bot]) [#&#8203;65718](https://github.com/nodejs/node/pull/65718)
- \[[`0fc8a38f5b`](https://github.com/nodejs/node/commit/0fc8a38f5b)] - **meta**: cleanup targos emeritus changes (Antoine du Hamel) [#&#8203;65738](https://github.com/nodejs/node/pull/65738)
- \[[`2ca2fd566d`](https://github.com/nodejs/node/commit/2ca2fd566d)] - **meta**: bump github/codeql-action/init from 4.37.3 to 4.37.9 (dependabot\[bot]) [#&#8203;65714](https://github.com/nodejs/node/pull/65714)
- \[[`325709818e`](https://github.com/nodejs/node/commit/325709818e)] - **meta**: bump github/codeql-action/autobuild from 4.37.3 to 4.37.9 (dependabot\[bot]) [#&#8203;65717](https://github.com/nodejs/node/pull/65717)
- \[[`8481d22f72`](https://github.com/nodejs/node/commit/8481d22f72)] - **meta**: bump actions/setup-node from 6.4.0 to 7.0.0 (dependabot\[bot]) [#&#8203;65720](https://github.com/nodejs/node/pull/65720)
- \[[`cd2bd5d9fd`](https://github.com/nodejs/node/commit/cd2bd5d9fd)] - **meta**: bump step-security/harden-runner from 2.20.0 to 2.21.0 (dependabot\[bot]) [#&#8203;65721](https://github.com/nodejs/node/pull/65721)
- \[[`fdec747105`](https://github.com/nodejs/node/commit/fdec747105)] - **meta**: bump github/codeql-action/upload-sarif from 4.37.3 to 4.37.9 (dependabot\[bot]) [#&#8203;65722](https://github.com/nodejs/node/pull/65722)
- \[[`34c2fca088`](https://github.com/nodejs/node/commit/34c2fca088)] - **meta**: bump github/codeql-action/analyze from 4.37.3 to 4.37.9 (dependabot\[bot]) [#&#8203;65723](https://github.com/nodejs/node/pull/65723)
- \[[`46d4549938`](https://github.com/nodejs/node/commit/46d4549938)] - **meta**: document collaborator automation (Filip Skokan) [#&#8203;65671](https://github.com/nodejs/node/pull/65671)
- \[[`a7f8de6362`](https://github.com/nodejs/node/commit/a7f8de6362)] - **(SEMVER-MINOR)** **net**: support sending net.BoundSocket to threads and child processes (Guy Bedford) [#&#8203;64725](https://github.com/nodejs/node/pull/64725)
- \[[`466f1f8e62`](https://github.com/nodejs/node/commit/466f1f8e62)] - **net**: fix BlockList.fromJSON for IPv4-mapped IPv6 rules (Daijiro Wachi) [#&#8203;64125](https://github.com/nodejs/node/pull/64125)
- \[[`cd04cb10d6`](https://github.com/nodejs/node/commit/cd04cb10d6)] - **net**: recognize bare IPv6 loopback addresses in isLoopback (Daijiro Wachi) [#&#8203;63619](https://github.com/nodejs/node/pull/63619)
- \[[`d983942636`](https://github.com/nodejs/node/commit/d983942636)] - **node-api**: make object property arrays const (Yilong Li) [#&#8203;65621](https://github.com/nodejs/node/pull/65621)
- \[[`cc124394cc`](https://github.com/nodejs/node/commit/cc124394cc)] - **path**: remove `StringPrototypeCharCodeAt` from some methods of `posix` (Wiyeong Seo) [#&#8203;54668](https://github.com/nodejs/node/pull/54668)
- \[[`60c3eb61bd`](https://github.com/nodejs/node/commit/60c3eb61bd)] - **(SEMVER-MINOR)** **perf_hooks**: implement SlidingWindowHistogram (James M Snell) [#&#8203;65825](https://github.com/nodejs/node/pull/65825)
- \[[`6b3e6f9d5c`](https://github.com/nodejs/node/commit/6b3e6f9d5c)] - **(SEMVER-MINOR)** **perf_hooks**: implement qrde analysis support in Histogram (James M Snell) [#&#8203;65806](https://github.com/nodejs/node/pull/65806)
- \[[`8aa870940c`](https://github.com/nodejs/node/commit/8aa870940c)] - **perf_hooks**: reuse buffer for uv metrics (Donghoon Kang) [#&#8203;65985](https://github.com/nodejs/node/pull/65985)
- \[[`9cfbfae660`](https://github.com/nodejs/node/commit/9cfbfae660)] - **perf_hooks**: validate import normalization offset (Matteo Collina) [#&#8203;65950](https://github.com/nodejs/node/pull/65950)
- \[[`75456a3512`](https://github.com/nodejs/node/commit/75456a3512)] - **(SEMVER-MINOR)** **perf_hooks**: implement Histogram meanCI API (James M Snell) [#&#8203;65606](https://github.com/nodejs/node/pull/65606)
- \[[`127cb31864`](https://github.com/nodejs/node/commit/127cb31864)] - **perf_hooks**: add missing resource timing attributes (greenhead) [#&#8203;65017](https://github.com/nodejs/node/pull/65017)
- \[[`72d1b40c56`](https://github.com/nodejs/node/commit/72d1b40c56)] - **(SEMVER-MINOR)** **perf_hooks**: add CBOR export/import for histogram exchange (James M Snell) [#&#8203;65434](https://github.com/nodejs/node/pull/65434)
- \[[`847fe4d049`](https://github.com/nodejs/node/commit/847fe4d049)] - **permission**: block FileHandle fsync and fdatasync (Rafael Gonzaga) [#&#8203;65431](https://github.com/nodejs/node/pull/65431)
- \[[`fa9188bd63`](https://github.com/nodejs/node/commit/fa9188bd63)] - **quic**: fix two small bugs in HTTP/3 stream internals (Tim Perry) [#&#8203;65970](https://github.com/nodejs/node/pull/65970)
- \[[`ee80beaa9f`](https://github.com/nodejs/node/commit/ee80beaa9f)] - **quic**: fix crash in onStreamClose (Marten Richter) [#&#8203;65861](https://github.com/nodejs/node/pull/65861)
- \[[`98486dd764`](https://github.com/nodejs/node/commit/98486dd764)] - **quic**: reject zero addressLRUSize (Christian Aurich) [#&#8203;65827](https://github.com/nodejs/node/pull/65827)
- \[[`97516fc256`](https://github.com/nodejs/node/commit/97516fc256)] - **quic**: stop guarding ngtcp2_recv_stop_sending callback field (René) [#&#8203;65688](https://github.com/nodejs/node/pull/65688)
- \[[`024bef25eb`](https://github.com/nodejs/node/commit/024bef25eb)] - **quic**: remove unused fin flag from blob reader wakeup (trivenay) [#&#8203;65315](https://github.com/nodejs/node/pull/65315)
- \[[`5468337456`](https://github.com/nodejs/node/commit/5468337456)] - **quic**: release stream arenas before cleanup (Trivikram Kamat) [#&#8203;65410](https://github.com/nodejs/node/pull/65410)
- \[[`a794e36970`](https://github.com/nodejs/node/commit/a794e36970)] - **sqlite**: throw on invalid URL path instead of abort (Guilherme Araújo) [#&#8203;66026](https://github.com/nodejs/node/pull/66026)
- \[[`f58a55b8d0`](https://github.com/nodejs/node/commit/f58a55b8d0)] - **sqlite**: add diagnostic channel (Guilherme Araújo) [#&#8203;62241](https://github.com/nodejs/node/pull/62241)
- \[[`be849bc6af`](https://github.com/nodejs/node/commit/be849bc6af)] - **sqlite**: reject connection access from authorizer callbacks (Trevor Burnham) [#&#8203;65156](https://github.com/nodejs/node/pull/65156)
- \[[`41161dda87`](https://github.com/nodejs/node/commit/41161dda87)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype.close() (Guilherme Araújo) [#&#8203;64232](https://github.com/nodejs/node/pull/64232)
- \[[`adbc757d70`](https://github.com/nodejs/node/commit/adbc757d70)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype\[Symbol.dispose]\() (Guilherme Araújo) [#&#8203;64232](https://github.com/nodejs/node/pull/64232)
- \[[`b7b18fdbc9`](https://github.com/nodejs/node/commit/b7b18fdbc9)] - **sqlite**: run backup completion in callback scope (Filip Skokan) [#&#8203;65666](https://github.com/nodejs/node/pull/65666)
- \[[`59827acd7f`](https://github.com/nodejs/node/commit/59827acd7f)] - **sqlite**: isolate applyChangeset filter errors (Trivikram Kamat) [#&#8203;64823](https://github.com/nodejs/node/pull/64823)
- \[[`5a01df2d15`](https://github.com/nodejs/node/commit/5a01df2d15)] - **sqlite**: reject deserialize() while in a callback (Trivikram Kamat) [#&#8203;64796](https://github.com/nodejs/node/pull/64796)
- \[[`c9b6e75a2e`](https://github.com/nodejs/node/commit/c9b6e75a2e)] - **sqlite**: refactor error helpers and user function pointers (Ali Hassan) [#&#8203;62794](https://github.com/nodejs/node/pull/62794)
- \[[`d4eb6c62a9`](https://github.com/nodejs/node/commit/d4eb6c62a9)] - **sqlite**: prevent database close during callbacks (Matteo Collina) [#&#8203;64743](https://github.com/nodejs/node/pull/64743)
- \[[`83b3431c25`](https://github.com/nodejs/node/commit/83b3431c25)] - **src**: detach cppgc wrappers from their Realm before it is freed (Shelley Vohr) [#&#8203;65778](https://github.com/nodejs/node/pull/65778)
- \[[`13ed7e35e7`](https://github.com/nodejs/node/commit/13ed7e35e7)] - **src**: list scripts when `--run` has no command (James Ross) [#&#8203;64606](https://github.com/nodejs/node/pull/64606)
- \[[`0f62f2b2df`](https://github.com/nodejs/node/commit/0f62f2b2df)] - **src**: print exception thrown during primordial initialization (Joyee Cheung) [#&#8203;65991](https://github.com/nodejs/node/pull/65991)
- \[[`70117640f7`](https://github.com/nodejs/node/commit/70117640f7)] - **src**: don't kill own process group on failed spawn (Lazizbek Ergashev) [#&#8203;65054](https://github.com/nodejs/node/pull/65054)
- \[[`64649abfd4`](https://github.com/nodejs/node/commit/64649abfd4)] - **src**: keep the first snapshot blob alive for later isolates (Shelley Vohr) [#&#8203;65779](https://github.com/nodejs/node/pull/65779)
- \[[`3c814e8c3c`](https://github.com/nodejs/node/commit/3c814e8c3c)] - **src**: fix Stop() terminating the next Environment on the isolate (Shelley Vohr) [#&#8203;65819](https://github.com/nodejs/node/pull/65819)
- \[[`a3ababcebb`](https://github.com/nodejs/node/commit/a3ababcebb)] - **src**: fix null pointer call when running without a startup snapshot (Shelley Vohr) [#&#8203;65820](https://github.com/nodejs/node/pull/65820)
- \[[`7331f5cfcc`](https://github.com/nodejs/node/commit/7331f5cfcc)] - **src**: stop leaking a CppHeap in CommonEnvironmentSetup (Shelley Vohr) [#&#8203;65792](https://github.com/nodejs/node/pull/65792)
- \[[`5570a84048`](https://github.com/nodejs/node/commit/5570a84048)] - **src**: fix use-after-free in CleanupHookThunkRun (Caleb Everett) [#&#8203;65630](https://github.com/nodejs/node/pull/65630)
- \[[`abe1b673e9`](https://github.com/nodejs/node/commit/abe1b673e9)] - **src**: keep global list of addon-provided cleanup hooks (Anna Henningsen) [#&#8203;63985](https://github.com/nodejs/node/pull/63985)
- \[[`2203ac9382`](https://github.com/nodejs/node/commit/2203ac9382)] - **src**: fix startup snapshot reproducibility of InternalFieldInfo (Chengzhong Wu) [#&#8203;65684](https://github.com/nodejs/node/pull/65684)
- \[[`b282765d99`](https://github.com/nodejs/node/commit/b282765d99)] - **src**: fix live lock between environments with blocked requests (Ilyas Shabi) [#&#8203;65520](https://github.com/nodejs/node/pull/65520)
- \[[`61ca3ba93c`](https://github.com/nodejs/node/commit/61ca3ba93c)] - **src**: apply IsolateSettings when using a snapshot (Shelley Vohr) [#&#8203;65407](https://github.com/nodejs/node/pull/65407)
- \[[`33b8d6e10f`](https://github.com/nodejs/node/commit/33b8d6e10f)] - **src**: add re-entrancy guard to TriggerUncaughtException (Temuulen Undrakhbayar) [#&#8203;64327](https://github.com/nodejs/node/pull/64327)
- \[[`49232db71e`](https://github.com/nodejs/node/commit/49232db71e)] - **src**: reuse cached strings in CompileSerializeMain (agape1225) [#&#8203;65453](https://github.com/nodejs/node/pull/65453)
- \[[`e3f52b80a5`](https://github.com/nodejs/node/commit/e3f52b80a5)] - **src**: report libuv error when openAsBlob cannot stat (Paul Bouchon) [#&#8203;65517](https://github.com/nodejs/node/pull/65517)
- \[[`42a5a19027`](https://github.com/nodejs/node/commit/42a5a19027)] - **src**: shave about 20 bytes off each TLSWrap instance (James M Snell) [#&#8203;65144](https://github.com/nodejs/node/pull/65144)
- \[[`a06bb51e22`](https://github.com/nodejs/node/commit/a06bb51e22)] - **src**: use UTF-8 for task runner filesystem paths (Archkon) [#&#8203;64868](https://github.com/nodejs/node/pull/64868)
- \[[`241339f072`](https://github.com/nodejs/node/commit/241339f072)] - **(SEMVER-MINOR)** **src,lib**: add util.markPromiseAsHandled (James M Snell) [#&#8203;65805](https://github.com/nodejs/node/pull/65805)
- \[[`1260642ace`](https://github.com/nodejs/node/commit/1260642ace)] - **stream**: destroy Duplex.from async function on early return (Aman Chadha(IVIXMMI)) [#&#8203;65963](https://github.com/nodejs/node/pull/65963)
- \[[`5f06defdbd`](https://github.com/nodejs/node/commit/5f06defdbd)] - **stream**: make share budget failures detach before throwing (James M Snell) [#&#8203;66028](https://github.com/nodejs/node/pull/66028)
- \[[`d1c60d898d`](https://github.com/nodejs/node/commit/d1c60d898d)] - **stream**: update broadcast to retain buffered data with zero consumers (James M Snell) [#&#8203;66028](https://github.com/nodejs/node/pull/66028)
- \[[`bbb00558c5`](https://github.com/nodejs/node/commit/bbb00558c5)] - **stream**: avoid promise allocation for parked transform writes (Matteo Collina) [#&#8203;65625](https://github.com/nodejs/node/pull/65625)
- \[[`3216bc3912`](https://github.com/nodejs/node/commit/3216bc3912)] - **stream**: keep webstream stream states in fast-mode objects (Matteo Collina) [#&#8203;65625](https://github.com/nodejs/node/pull/65625)
- \[[`70c1415686`](https://github.com/nodejs/node/commit/70c1415686)] - **stream**: reject closed only after sink abort settles (Lazizbek Ergashev) [#&#8203;65727](https://github.com/nodejs/node/pull/65727)
- \[[`f8737b8ee5`](https://github.com/nodejs/node/commit/f8737b8ee5)] - **stream**: fix ERR_INVALID_STATE when cancelling Readable.toWeb() (Richard Scarrott) [#&#8203;62773](https://github.com/nodejs/node/pull/62773)
- \[[`faa16f671c`](https://github.com/nodejs/node/commit/faa16f671c)] - **stream**: amortize writable buffer compaction (Gürgün Dayıoğlu) [#&#8203;65847](https://github.com/nodejs/node/pull/65847)
- \[[`6262e0b8c6`](https://github.com/nodejs/node/commit/6262e0b8c6)] - **stream**: create write request objects lazily (Matteo Collina) [#&#8203;64455](https://github.com/nodejs/node/pull/64455)
- \[[`0f0566de15`](https://github.com/nodejs/node/commit/0f0566de15)] - **stream**: allocate stream read buffers from a slab (Matteo Collina) [#&#8203;64455](https://github.com/nodejs/node/pull/64455)
- \[[`02c776a7c6`](https://github.com/nodejs/node/commit/02c776a7c6)] - **stream**: ensure that stateful transforms preserve this (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`4b29051971`](https://github.com/nodejs/node/commit/4b29051971)] - **stream**: fix nested async flushing with infinite sources (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`2e54186d97`](https://github.com/nodejs/node/commit/2e54186d97)] - **stream**: ensure from() observes returned rejecting promise correctly (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`fd68d5ca6a`](https://github.com/nodejs/node/commit/fd68d5ca6a)] - **stream**: apply source normalization once at call time (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`49ee85b462`](https://github.com/nodejs/node/commit/49ee85b462)] - **stream**: make pipeTo source normalization independent of Writer (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`d7d0440f08`](https://github.com/nodejs/node/commit/d7d0440f08)] - **stream**: pre-aborted pipeTo now applies dest failure handling (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`6d8e643ef3`](https://github.com/nodejs/node/commit/6d8e643ef3)] - **stream**: ensure async dispoal after endSync awaits for drain (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`a082916c00`](https://github.com/nodejs/node/commit/a082916c00)] - **stream**: ensure factory signals remain active through closing (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`38829295a7`](https://github.com/nodejs/node/commit/38829295a7)] - **stream**: skip unobserved 'readable' emission at EOF (Matteo Collina) [#&#8203;65749](https://github.com/nodejs/node/pull/65749)
- \[[`d535859c22`](https://github.com/nodejs/node/commit/d535859c22)] - **stream**: avoid per-chunk promises in webstream adapters (Matteo Collina) [#&#8203;65548](https://github.com/nodejs/node/pull/65548)
- \[[`80568f6818`](https://github.com/nodejs/node/commit/80568f6818)] - **stream**: address stream/iter review feedback (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`6952928f68`](https://github.com/nodejs/node/commit/6952928f68)] - **stream**: replace object sentinel with symbol (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`9c22c4124c`](https://github.com/nodejs/node/commit/9c22c4124c)] - **stream**: cancel active stream/iter pulls (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`24d87990cf`](https://github.com/nodejs/node/commit/24d87990cf)] - **stream**: fix merge settlement tagging and falsy error tracking (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`1e215c4b51`](https://github.com/nodejs/node/commit/1e215c4b51)] - **stream**: ensure full-close semantics when closed (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`f499d6fadf`](https://github.com/nodejs/node/commit/f499d6fadf)] - **stream**: fixup writer to terminate on consumer return/throw (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`2130738033`](https://github.com/nodejs/node/commit/2130738033)] - **stream**: ensure iterator cleanup on done, reject, etc (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`748adc6275`](https://github.com/nodejs/node/commit/748adc6275)] - **stream**: fixup cancelation handling in pull() (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`47b3f6a1fa`](https://github.com/nodejs/node/commit/47b3f6a1fa)] - **stream**: fix early drain after Utf8Stream reopen (Matteo Collina) [#&#8203;65633](https://github.com/nodejs/node/pull/65633)
- \[[`6dab5412cf`](https://github.com/nodejs/node/commit/6dab5412cf)] - **test**: skip RSA-PSS keygen deprecation tests with BoringSSL (Shelley Vohr) [#&#8203;65808](https://github.com/nodejs/node/pull/65808)
- \[[`95d9a25b61`](https://github.com/nodejs/node/commit/95d9a25b61)] - **test**: consolidate crypto provider cache coverage (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`612db6d5b2`](https://github.com/nodejs/node/commit/612db6d5b2)] - **test**: deflake user timing WPT assertions (Filip Skokan) [#&#8203;66036](https://github.com/nodejs/node/pull/66036)
- \[[`61a73d31eb`](https://github.com/nodejs/node/commit/61a73d31eb)] - **test**: fix RSA/DSA wrong-passphrase flake (Filip Skokan) [#&#8203;65983](https://github.com/nodejs/node/pull/65983)
- \[[`d9f4a3ee3e`](https://github.com/nodejs/node/commit/d9f4a3ee3e)] - **test**: reuse fixed primes in DH tests (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`a0fd0a8bd6`](https://github.com/nodejs/node/commit/a0fd0a8bd6)] - **test**: use named parameters in DH stress test (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`810a6b00ee`](https://github.com/nodejs/node/commit/810a6b00ee)] - **test**: update tests to run with OpenSSL >= 3.0 FIPS mode (Filip Skokan) [#&#8203;64960](https://github.com/nodejs/node/pull/64960)
- \[[`dc6b9ba5b2`](https://github.com/nodejs/node/commit/dc6b9ba5b2)] - **test**: deflake test-run-watch-cwd-isolation-none-\* (Antoine du Hamel) [#&#8203;66035](https://github.com/nodejs/node/pull/66035)
- \[[`0f27bd2459`](https://github.com/nodejs/node/commit/0f27bd2459)] - **test**: unskip `test-watch-create-isolation-none` (Antoine du Hamel) [#&#8203;66041](https://github.com/nodejs/node/pull/66041)
- \[[`1019f624f3`](https://github.com/nodejs/node/commit/1019f624f3)] - **test**: deflake util.throttle tests (Filip Skokan) [#&#8203;66034](https://github.com/nodejs/node/pull/66034)
- \[[`b4a6719f37`](https://github.com/nodejs/node/commit/b4a6719f37)] - **(SEMVER-MINOR)** **test**: expand histogram test coverage (James M Snell) [#&#8203;65825](https://github.com/nodejs/node/pull/65825)
- \[[`047d7c53d2`](https://github.com/nodejs/node/commit/047d7c53d2)] - **test**: implement low-risk test optimizations (James M Snell) [#&#8203;65926](https://github.com/nodejs/node/pull/65926)
- \[[`33775d2bbb`](https://github.com/nodejs/node/commit/33775d2bbb)] - **test**: prevent parser reuse across close scenarios (Filip Skokan) [#&#8203;66017](https://github.com/nodejs/node/pull/66017)
- \[[`b8c5283cbc`](https://github.com/nodejs/node/commit/b8c5283cbc)] - **test**: fix stderr Buffer assertion in exec encoding test (greenhead) [#&#8203;66008](https://github.com/nodejs/node/pull/66008)
- \[[`13a2982002`](https://github.com/nodejs/node/commit/13a2982002)] - **test**: improve sequential test performance (James M Snell) [#&#8203;65928](https://github.com/nodejs/node/pull/65928)
- \[[`a578933da0`](https://github.com/nodejs/node/commit/a578933da0)] - **test**: overlap SLH-DSA signature checks (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`bfdf20729d`](https://github.com/nodejs/node/commit/bfdf20729d)] - **test**: unref cancelled broadcast source timer (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`b29154d471`](https://github.com/nodejs/node/commit/b29154d471)] - **test**: collect timeout signals explicitly (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`384d4fe3ea`](https://github.com/nodejs/node/commit/384d4fe3ea)] - **test**: skip retries in DNS timeout coverage (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`c7323843f4`](https://github.com/nodejs/node/commit/c7323843f4)] - **test**: synchronize ordered runner events (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`625290573a`](https://github.com/nodejs/node/commit/625290573a)] - **test**: avoid idle HTTP/HTTPS connections (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`2bde68398f`](https://github.com/nodejs/node/commit/2bde68398f)] - **test**: close WebAssembly test HTTP servers (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`4c702e401b`](https://github.com/nodejs/node/commit/4c702e401b)] - **test**: deflake node-api test-free-called (Christian Aurich) [#&#8203;65948](https://github.com/nodejs/node/pull/65948)
- \[[`0b6d945ebc`](https://github.com/nodejs/node/commit/0b6d945ebc)] - **test**: skip C++ symbols in tick-processor-arguments (Philipp Dunkel) [#&#8203;65906](https://github.com/nodejs/node/pull/65906)
- \[[`e04210b383`](https://github.com/nodejs/node/commit/e04210b383)] - **test**: try fixing windows build replacing WMIC (James M Snell) [#&#8203;65949](https://github.com/nodejs/node/pull/65949)
- \[[`aed73444de`](https://github.com/nodejs/node/commit/aed73444de)] - **test**: fix flaky cleanup in http2 test (Tim Perry) [#&#8203;65701](https://github.com/nodejs/node/pull/65701)
- \[[`22f47ff728`](https://github.com/nodejs/node/commit/22f47ff728)] - **test**: update WPT WebCrypto, WebIDL and interfaces (Filip Skokan) [#&#8203;65679](https://github.com/nodejs/node/pull/65679)
- \[[`f2af511a24`](https://github.com/nodejs/node/commit/f2af511a24)] - **test**: zero-fill buffers before the string length limit check (Christian Aurich) [#&#8203;65755](https://github.com/nodejs/node/pull/65755)
- \[[`a28aad9960`](https://github.com/nodejs/node/commit/a28aad9960)] - **test**: update WPT for url to [`c23755a`](https://github.com/nodejs/node/commit/c23755a144) (Node.js GitHub Bot) [#&#8203;65651](https://github.com/nodejs/node/pull/65651)
- \[[`ba65bb149a`](https://github.com/nodejs/node/commit/ba65bb149a)] - **test**: fix recursive fs.watch error fixture (Filip Skokan) [#&#8203;65683](https://github.com/nodejs/node/pull/65683)
- \[[`f3b9f132b1`](https://github.com/nodejs/node/commit/f3b9f132b1)] - **test**: update streams WPT (Jeong SeokChan) [#&#8203;65638](https://github.com/nodejs/node/pull/65638)
- \[[`d2e0f2d3bd`](https://github.com/nodejs/node/commit/d2e0f2d3bd)] - **test**: deflake fastutf8stream destroy and reopen tests (Christian Aurich) [#&#8203;65554](https://github.com/nodejs/node/pull/65554)
- \[[`7b5896c136`](https://github.com/nodejs/node/commit/7b5896c136)] - **test**: cover Readable.from() sync iterator errors (jakecastelli) [#&#8203;65515](https://github.com/nodejs/node/pull/65515)
- \[[`66eafad642`](https://github.com/nodejs/node/commit/66eafad642)] - **test**: document WPT runner workflows (Filip Skokan) [#&#8203;65510](https://github.com/nodejs/node/pull/65510)
- \[[`2e2dc0f556`](https://github.com/nodejs/node/commit/2e2dc0f556)] - **test**: simplify test-worker-heap-profile.js (Donghoon Kang) [#&#8203;65372](https://github.com/nodejs/node/pull/65372)
- \[[`2e57caac46`](https://github.com/nodejs/node/commit/2e57caac46)] - **test**: prefer in-memory databases in sqlite tests (Paul Bouchon) [#&#8203;64701](https://github.com/nodejs/node/pull/64701)
- \[[`cef908596e`](https://github.com/nodejs/node/commit/cef908596e)] - **test**: fix typo from funciton to function (parkhojeong) [#&#8203;63403](https://github.com/nodejs/node/pull/63403)
- \[[`4c7bbd4182`](https://github.com/nodejs/node/commit/4c7bbd4182)] - **test**: widen the gap in the resolver maxTimeout comparison (Shelley Vohr) [#&#8203;65780](https://github.com/nodejs/node/pull/65780)
- \[[`25c81c9eff`](https://github.com/nodejs/node/commit/25c81c9eff)] - **test**: fix the thread-spawn handshake in the WASI threads fixture (Shelley Vohr) [#&#8203;65780](https://github.com/nodejs/node/pull/65780)
- \[[`cab5dcedbe`](https://github.com/nodejs/node/commit/cab5dcedbe)] - **test**: only count restarts after the write in watch emit-restarted test (Shelley Vohr) [#&#8203;65780](https://github.com/nodejs/node/pull/65780)
- \[[`db0ca93e94`](https://github.com/nodejs/node/commit/db0ca93e94)] - **test**: ignore tunnel resets in proxy invalid-char-in-url test (Shelley Vohr) [#&#8203;65780](https://github.com/nodejs/node/pull/65780)
- \[[`1f0087040a`](https://github.com/nodejs/node/commit/1f0087040a)] - **test**: handle EPIPE in closed channel test (Christian Aurich) [#&#8203;65770](https://github.com/nodejs/node/pull/65770)
- \[[`ed4e5df638`](https://github.com/nodejs/node/commit/ed4e5df638)] - **test**: deflake test-runner-coverage (Christian Aurich) [#&#8203;65728](https://github.com/nodejs/node/pull/65728)
- \[[`48ecb16909`](https://github.com/nodejs/node/commit/48ecb16909)] - **test**: set type=none on IBM i for empty source (Abdirahim Musse) [#&#8203;65545](https://github.com/nodejs/node/pull/65545)
- \[[`554a3fba98`](https://github.com/nodejs/node/commit/554a3fba98)] - **test**: deflake WASI poll timing checks (Filip Skokan) [#&#8203;65672](https://github.com/nodejs/node/pull/65672)
- \[[`91b5389430`](https://github.com/nodejs/node/commit/91b5389430)] - **test**: skip `fs-watch-recursive-delete-race` on AIX (Antoine du Hamel) [#&#8203;65698](https://github.com/nodejs/node/pull/65698)
- \[[`4ed0c8cc6c`](https://github.com/nodejs/node/commit/4ed0c8cc6c)] - **test**: deflake test-inspect-async-hook-setup-at-inspect (Christian Aurich) [#&#8203;65584](https://github.com/nodejs/node/pull/65584)
- \[[`500b98cc7d`](https://github.com/nodejs/node/commit/500b98cc7d)] - **test**: deflake test-watch-mode-restart-esm-loading-error (Christian Aurich) [#&#8203;65623](https://github.com/nodejs/node/pull/65623)
- \[[`099c20fcbd`](https://github.com/nodejs/node/commit/099c20fcbd)] - **test**: avoid orphaned child on Windows abort test (Kirill Saied) [#&#8203;65451](https://github.com/nodejs/node/pull/65451)
- \[[`fc9364fe55`](https://github.com/nodejs/node/commit/fc9364fe55)] - **test**: riscv64: skip node-api sea test (Stewart X Addison) [#&#8203;65569](https://github.com/nodejs/node/pull/65569)
- \[[`c9d6b5f731`](https://github.com/nodejs/node/commit/c9d6b5f731)] - **test**: mark platform-specific tests as flaky (Filip Skokan) [#&#8203;65562](https://github.com/nodejs/node/pull/65562)
- \[[`cb93d40549`](https://github.com/nodejs/node/commit/cb93d40549)] - **test,benchmark**: use OpenSSL feature helpers (Filip Skokan) [#&#8203;65762](https://github.com/nodejs/node/pull/65762)
- \[[`b4b859319d`](https://github.com/nodejs/node/commit/b4b859319d)] - **test_runner**: avoid reusing v8 serializers (Yuya Inoue) [#&#8203;65951](https://github.com/nodejs/node/pull/65951)
- \[[`b3766225e1`](https://github.com/nodejs/node/commit/b3766225e1)] - **test_runner**: fix quote escaping in JUnit (Jihwan) [#&#8203;65971](https://github.com/nodejs/node/pull/65971)
- \[[`ec37f934db`](https://github.com/nodejs/node/commit/ec37f934db)] - **tls**: propagate singleUse to the secure context (Carlos Vinicius) [#&#8203;66025](https://github.com/nodejs/node/pull/66025)
- \[[`21aec3f286`](https://github.com/nodejs/node/commit/21aec3f286)] - **tls**: defer re-entrant calls to SSL state machine from JS (Tim Perry) [#&#8203;65105](https://github.com/nodejs/node/pull/65105)
- \[[`ffd3de2831`](https://github.com/nodejs/node/commit/ffd3de2831)] - **tls**: read the peer certificate chain without consuming it (Tony Gies) [#&#8203;65602](https://github.com/nodejs/node/pull/65602)
- \[[`3481ea3c43`](https://github.com/nodejs/node/commit/3481ea3c43)] - **tls**: don't trigger SNICallback or OCSPRequest from the TLS lib stack (Tim Perry) [#&#8203;64827](https://github.com/nodejs/node/pull/64827)
- \[[`d75957f0c8`](https://github.com/nodejs/node/commit/d75957f0c8)] - **tls**: drop hand-rolled TLS client hello parser (Tim Perry) [#&#8203;64827](https://github.com/nodejs/node/pull/64827)
- \[[`c555ba0aeb`](https://github.com/nodejs/node/commit/c555ba0aeb)] - **tools**: update `tools/v8` for Python 3.13 (Richard Lau) [#&#8203;66109](https://github.com/nodejs/node/pull/66109)
- \[[`aafff27ebe`](https://github.com/nodejs/node/commit/aafff27ebe)] - **tools**: bump eslint-plugin-jsdoc in /tools/eslint in the eslint group (dependabot\[bot]) [#&#8203;66102](https://github.com/nodejs/node/pull/66102)
- \[[`7a481ebd2c`](https://github.com/nodejs/node/commit/7a481ebd2c)] - **tools**: group CodeQL GHA updates (Antoine du Hamel) [#&#8203;66057](https://github.com/nodejs/node/pull/66057)
- \[[`b2252b4074`](https://github.com/nodejs/node/commit/b2252b4074)] - **tools**: summarize auto-start-ci failures (Filip Skokan) [#&#8203;65979](https://github.com/nodejs/node/pull/65979)
- \[[`499fe73da7`](https://github.com/nodejs/node/commit/499fe73da7)] - **tools**: bump the eslint group in /tools/eslint with 6 updates (dependabot\[bot]) [#&#8203;66045](https://github.com/nodejs/node/pull/66045)
- \[[`d004d957ae`](https://github.com/nodejs/node/commit/d004d957ae)] - **tools**: update pgo build doc for linux (Chengzhong Wu) [#&#8203;66024](https://github.com/nodejs/node/pull/66024)
- \[[`bfa329dbba`](https://github.com/nodejs/node/commit/bfa329dbba)] - **tools**: correct Slack action version comments (Filip Skokan) [#&#8203;66013](https://github.com/nodejs/node/pull/66013)
- \[[`d55d30313b`](https://github.com/nodejs/node/commit/d55d30313b)] - **tools**: make checkout credential use explicit (Filip Skokan) [#&#8203;66013](https://github.com/nodejs/node/pull/66013)
- \[[`0a9e844866`](https://github.com/nodejs/node/commit/0a9e844866)] - **tools**: pass author to commit message validator (Filip Skokan) [#&#8203;66012](https://github.com/nodejs/node/pull/66012)
- \[[`f5edf1cd7c`](https://github.com/nodejs/node/commit/f5edf1cd7c)] - **tools**: reduce test runner timing overhead (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`1cb899f727`](https://github.com/nodejs/node/commit/1cb899f727)] - **tools**: bump js-yaml from 4.3.1 to 4.3.2 in /tools/eslint (dependabot\[bot]) [#&#8203;65931](https://github.com/nodejs/node/pull/65931)
- \[[`9a1d47bc53`](https://github.com/nodejs/node/commit/9a1d47bc53)] - **tools**: bump js-yaml from 4.3.1 to 4.3.2 in /tools/lint-md (dependabot\[bot]) [#&#8203;65932](https://githu…
paultibbetts pushed a commit to paultibbetts/indiekit.paultibbetts.uk that referenced this pull request Oct 27, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [node](https://nodejs.org) ([source](https://github.com/nodejs/node)) | volta | minor | [`24.17.0` → `24.22.1`](https://renovatebot.com/diffs/npm/node/v24.17.0/v24.22.1) |
| [node](https://hub.docker.com/_/node) ([source](https://github.com/nodejs/node)) | final | minor | `24.17-alpine` → `24.22-alpine` |

---

### Release Notes

<details>
<summary>nodejs/node (node)</summary>

### [`v24.22.1`](https://github.com/nodejs/node/releases/tag/v24.22.1): 2026-10-21, Version 24.22.1 'Krypton' (LTS), @&#8203;aduh95

[Compare Source](https://github.com/nodejs/node/compare/v24.22.0...v24.22.1)

This is a security release.

##### Notable Changes

- (CVE-2026-105481) http: ensure agent data guard works without I/O (James M Snell)
- (CVE-2026-105482) dns: validate resolve inputs for null bytes (James M Snell)
- (CVE-2026-105483) tls: fix ip normalization regression (James M Snell)
- (CVE-2026-106069) tls: reject non-canonical IP addresses (Matteo Collina)
- (CVE-2026-106073) permission: check permission model in realpathSync (RafaelGSS)
- (CVE-2026-106074) crypto: reset random caches across snapshots (Filip Skokan)
- (CVE-2026-111497) src: expose `BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH` (Antoine du Hamel)
- (CVE-2026-111497) deps: brotli: cherry-pick [`0ed4268`](https://github.com/nodejs/node/commit/0ed4268a4401abcb44720963) (Evgenii Kliuchnikov)
- crypto: update root certificates to NSS 3.131.1 (Antoine du Hamel)
- deps: update c-ares to 1.34.9 (Node.js GitHub Bot)
- deps: update timezone to 2026e (Node.js GitHub Bot)
- deps: upgrade openssl sources to openssl-3.5.9 (Node.js GitHub Bot)
- deps: update undici to 7.30.1 (Node.js GitHub Bot)

##### Commits

- \[[`2a73ee5a89`](https://github.com/nodejs/node/commit/2a73ee5a89)] - **crypto**: update root certificates to NSS 3.131.1 (Antoine du Hamel) [#&#8203;66877](https://github.com/nodejs/node/pull/66877)
- \[[`4d6990b33c`](https://github.com/nodejs/node/commit/4d6990b33c)] - **crypto**: reset random caches across snapshots (Filip Skokan) [nodejs-private/node-private#987](https://github.com/nodejs-private/node-private/pull/987)
- \[[`4b3c9bbf9f`](https://github.com/nodejs/node/commit/4b3c9bbf9f)] - **crypto**: harden X.509 conversion and formatting (Filip Skokan) [nodejs-private/node-private#1007](https://github.com/nodejs-private/node-private/pull/1007)
- \[[`9243b105b6`](https://github.com/nodejs/node/commit/9243b105b6)] - **crypto**: update root certificates to NSS 3.129 (Node.js GitHub Bot) [#&#8203;66496](https://github.com/nodejs/node/pull/66496)
- \[[`1e39cd53c7`](https://github.com/nodejs/node/commit/1e39cd53c7)] - **deps**: update c-ares to 1.34.9 (Node.js GitHub Bot) [#&#8203;66868](https://github.com/nodejs/node/pull/66868)
- \[[`49dff6f57a`](https://github.com/nodejs/node/commit/49dff6f57a)] - **deps**: brotli: cherry-pick [`0ed4268`](https://github.com/nodejs/node/commit/0ed4268a4401abcb44720963) (Evgenii Kliuchnikov) [nodejs-private/node-private#1002](https://github.com/nodejs-private/node-private/pull/1002)
- \[[`fca511adc5`](https://github.com/nodejs/node/commit/fca511adc5)] - **deps**: V8: backport [`93cd21e`](https://github.com/nodejs/node/commit/93cd21e8254b) (Joyee Cheung) [nodejs-private/node-private#1008](https://github.com/nodejs-private/node-private/pull/1008)
- \[[`18711c7567`](https://github.com/nodejs/node/commit/18711c7567)] - **deps**: update timezone to 2026e (Node.js GitHub Bot) [#&#8203;66419](https://github.com/nodejs/node/pull/66419)
- \[[`fa77cfb1ad`](https://github.com/nodejs/node/commit/fa77cfb1ad)] - **deps**: update timezone to 2026d (Node.js GitHub Bot) [#&#8203;66333](https://github.com/nodejs/node/pull/66333)
- \[[`b84f9f186b`](https://github.com/nodejs/node/commit/b84f9f186b)] - **deps**: update archs files for openssl-3.5.9 (Node.js GitHub Bot) [#&#8203;66396](https://github.com/nodejs/node/pull/66396)
- \[[`ff0664c3ba`](https://github.com/nodejs/node/commit/ff0664c3ba)] - **deps**: upgrade openssl sources to openssl-3.5.9 (Node.js GitHub Bot) [#&#8203;66396](https://github.com/nodejs/node/pull/66396)
- \[[`1d4c89ef87`](https://github.com/nodejs/node/commit/1d4c89ef87)] - **deps**: update undici to 7.30.1 (Node.js GitHub Bot) [#&#8203;66764](https://github.com/nodejs/node/pull/66764)
- \[[`843a1627dc`](https://github.com/nodejs/node/commit/843a1627dc)] - **dns**: validate resolve inputs for null bytes (James M Snell) [nodejs-private/node-private#984](https://github.com/nodejs-private/node-private/pull/984)
- \[[`96c3ccb1fc`](https://github.com/nodejs/node/commit/96c3ccb1fc)] - **http**: ensure agent data guard works without I/O (James M Snell) [nodejs-private/node-private#983](https://github.com/nodejs-private/node-private/pull/983)
- \[[`8dc18a6218`](https://github.com/nodejs/node/commit/8dc18a6218)] - **permission**: check permission model in realpathSync (RafaelGSS) [nodejs-private/node-private#973](https://github.com/nodejs-private/node-private/pull/973)
- \[[`b5f41529df`](https://github.com/nodejs/node/commit/b5f41529df)] - **src**: expose `BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH` (Antoine du Hamel) [nodejs-private/node-private#1002](https://github.com/nodejs-private/node-private/pull/1002)
- \[[`01acf0ee74`](https://github.com/nodejs/node/commit/01acf0ee74)] - **tls**: reject chains containing blocked public keys (Ulises Gascón) [#&#8203;66871](https://github.com/nodejs/node/pull/66871)
- \[[`935918e342`](https://github.com/nodejs/node/commit/935918e342)] - **tls**: reject non-canonical IP addresses (Matteo Collina) [nodejs-private/node-private#982](https://github.com/nodejs-private/node-private/pull/982)
- \[[`de49c913f2`](https://github.com/nodejs/node/commit/de49c913f2)] - **tls**: fix ip normalization regression (James M Snell) [nodejs-private/node-private#985](https://github.com/nodejs-private/node-private/pull/985)
- \[[`9dc4bb57f0`](https://github.com/nodejs/node/commit/9dc4bb57f0)] - **tools**: retry Gatekeeper check and stapling after notarization (Ryan Aslett) [#&#8203;66855](https://github.com/nodejs/node/pull/66855)

### [`v24.22.0`](https://github.com/nodejs/node/releases/tag/v24.22.0): 2026-10-14, Version 24.22.0 'Krypton' (LTS), @&#8203;richardlau prepared by @&#8203;aduh95

[Compare Source](https://github.com/nodejs/node/compare/v24.21.0...v24.22.0)

##### Notable Changes

- \[[`ddbf974b47`](https://github.com/nodejs/node/commit/ddbf974b47)] - **(SEMVER-MINOR)** **crypto**: add `crypto.parsePKCS12()` (Brian Muenzenmeyer) [#&#8203;65627](https://github.com/nodejs/node/pull/65627)
- \[[`c162c68ff0`](https://github.com/nodejs/node/commit/c162c68ff0)] - **(SEMVER-MINOR)** **crypto**: add a generic MAC API (Filip Skokan) [#&#8203;65553](https://github.com/nodejs/node/pull/65553)
- \[[`a4ab3d84d7`](https://github.com/nodejs/node/commit/a4ab3d84d7)] - **(SEMVER-MINOR)** **crypto**: discover ciphers from OpenSSL providers (Filip Skokan) [#&#8203;65484](https://github.com/nodejs/node/pull/65484)
- \[[`c2f1e829ea`](https://github.com/nodejs/node/commit/c2f1e829ea)] - **(SEMVER-MINOR)** **crypto**: discover hashes from OpenSSL providers (Filip Skokan) [#&#8203;65484](https://github.com/nodejs/node/pull/65484)
- \[[`51aad5a80d`](https://github.com/nodejs/node/commit/51aad5a80d)] - **(SEMVER-MINOR)** **crypto**: enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) [#&#8203;63411](https://github.com/nodejs/node/pull/63411)
- \[[`d11c65d2f2`](https://github.com/nodejs/node/commit/d11c65d2f2)] - **doc**: add araujogui to collaborators (Guilherme Araújo) [#&#8203;66090](https://github.com/nodejs/node/pull/66090)
- \[[`acc1578179`](https://github.com/nodejs/node/commit/acc1578179)] - **doc**: deprecate `Server.prototype._listen2` in `node:net` (Antoine du Hamel) [#&#8203;65593](https://github.com/nodejs/node/pull/65593)
- \[[`a7f8de6362`](https://github.com/nodejs/node/commit/a7f8de6362)] - **(SEMVER-MINOR)** **net**: support sending `net.BoundSocket` to threads and child processes (Guy Bedford) [#&#8203;64725](https://github.com/nodejs/node/pull/64725)
- \[[`60c3eb61bd`](https://github.com/nodejs/node/commit/60c3eb61bd)] - **(SEMVER-MINOR)** **perf_hooks**: implement `SlidingWindowHistogram` (James M Snell) [#&#8203;65825](https://github.com/nodejs/node/pull/65825)
- \[[`6b3e6f9d5c`](https://github.com/nodejs/node/commit/6b3e6f9d5c)] - **(SEMVER-MINOR)** **perf_hooks**: implement qrde analysis support in Histogram (James M Snell) [#&#8203;65806](https://github.com/nodejs/node/pull/65806)
- \[[`75456a3512`](https://github.com/nodejs/node/commit/75456a3512)] - **(SEMVER-MINOR)** **perf_hooks**: implement Histogram `meanCI` API (James M Snell) [#&#8203;65606](https://github.com/nodejs/node/pull/65606)
- \[[`72d1b40c56`](https://github.com/nodejs/node/commit/72d1b40c56)] - **(SEMVER-MINOR)** **perf_hooks**: add CBOR export/import for histogram exchange (James M Snell) [#&#8203;65434](https://github.com/nodejs/node/pull/65434)
- \[[`41161dda87`](https://github.com/nodejs/node/commit/41161dda87)] - **(SEMVER-MINOR)** **sqlite**: add `StatementSync.prototype.close()` (Guilherme Araújo) [#&#8203;64232](https://github.com/nodejs/node/pull/64232)
- \[[`adbc757d70`](https://github.com/nodejs/node/commit/adbc757d70)] - **(SEMVER-MINOR)** **sqlite**: add `StatementSync.prototype[Symbol.dispose]()` (Guilherme Araújo) [#&#8203;64232](https://github.com/nodejs/node/pull/64232)
- \[[`241339f072`](https://github.com/nodejs/node/commit/241339f072)] - **(SEMVER-MINOR)** **src,lib**: add `util.markPromiseAsHandled` (James M Snell) [#&#8203;65805](https://github.com/nodejs/node/pull/65805)
- \[[`63b0974d9e`](https://github.com/nodejs/node/commit/63b0974d9e)] - **(SEMVER-MINOR)** **util**: implement `util.throttle` (James M Snell) [#&#8203;65899](https://github.com/nodejs/node/pull/65899)
- \[[`a3bbb5a26f`](https://github.com/nodejs/node/commit/a3bbb5a26f)] - **(SEMVER-MINOR)** **util**: implement `debounce` (James M Snell) [#&#8203;65899](https://github.com/nodejs/node/pull/65899)

##### Commits

- \[[`e6832b2cb1`](https://github.com/nodejs/node/commit/e6832b2cb1)] - **assert**: fix TypeError on deepStrictEqual with null Map key or Set member (Sergey Sannikov) [#&#8203;64449](https://github.com/nodejs/node/pull/64449)
- \[[`a079177d9f`](https://github.com/nodejs/node/commit/a079177d9f)] - **benchmark**: add --csv option to compare.js with --analyze (James M Snell) [#&#8203;65922](https://github.com/nodejs/node/pull/65922)
- \[[`10b1a0f70f`](https://github.com/nodejs/node/commit/10b1a0f70f)] - **benchmark**: fix max-regressions detection in compare.js (James M Snell) [#&#8203;65587](https://github.com/nodejs/node/pull/65587)
- \[[`e0c7ba8ad5`](https://github.com/nodejs/node/commit/e0c7ba8ad5)] - **benchmark**: add --analyze option to benchmark/scatter.js (James M Snell) [#&#8203;65594](https://github.com/nodejs/node/pull/65594)
- \[[`21fed10bb0`](https://github.com/nodejs/node/commit/21fed10bb0)] - **benchmark**: add crypto class benchmarks (Filip Skokan) [#&#8203;65518](https://github.com/nodejs/node/pull/65518)
- \[[`fa912242b7`](https://github.com/nodejs/node/commit/fa912242b7)] - **buffer**: fix unaligned UTF-16LE decoding (Matteo Collina) [#&#8203;65905](https://github.com/nodejs/node/pull/65905)
- \[[`a6bd0c1413`](https://github.com/nodejs/node/commit/a6bd0c1413)] - **build**: suppress OpenSSL asm warnings with clang (Richard Lau) [#&#8203;66023](https://github.com/nodejs/node/pull/66023)
- \[[`94e12139ee`](https://github.com/nodejs/node/commit/94e12139ee)] - **build**: derive V8_LOGGING_LEVEL from dcheck_always_on (Joyee Cheung) [#&#8203;65744](https://github.com/nodejs/node/pull/65744)
- \[[`7a2f322943`](https://github.com/nodejs/node/commit/7a2f322943)] - **build**: fix quiet default for make builds (Shelley Vohr) [#&#8203;65826](https://github.com/nodejs/node/pull/65826)
- \[[`c280d650b0`](https://github.com/nodejs/node/commit/c280d650b0)] - **build**: allow linking shared dependencies in the GN build (Shelley Vohr) [#&#8203;65797](https://github.com/nodejs/node/pull/65797)
- \[[`4b23a4472c`](https://github.com/nodejs/node/commit/4b23a4472c)] - **build**: enable the V8 sandbox in shared-cage builds (Shelley Vohr) [#&#8203;62237](https://github.com/nodejs/node/pull/62237)
- \[[`676e15c003`](https://github.com/nodejs/node/commit/676e15c003)] - **build**: define V8_CONTIGUOUS_COMPRESSED_RO_SPACE for shared cage (Shelley Vohr) [#&#8203;65464](https://github.com/nodejs/node/pull/65464)
- \[[`f784058482`](https://github.com/nodejs/node/commit/f784058482)] - **build**: remove obsolete configure flags (Chengzhong Wu) [#&#8203;65456](https://github.com/nodejs/node/pull/65456)
- \[[`f63f37d243`](https://github.com/nodejs/node/commit/f63f37d243)] - **build**: activate correct default flags for riscv64 (Stewart X Addison) [#&#8203;65708](https://github.com/nodejs/node/pull/65708)
- \[[`da46ac075d`](https://github.com/nodejs/node/commit/da46ac075d)] - **build**: derive NODE_ARCH from target_cpu in the GN build (Shelley Vohr) [#&#8203;65491](https://github.com/nodejs/node/pull/65491)
- \[[`249e9a16dd`](https://github.com/nodejs/node/commit/249e9a16dd)] - **build,src**: gate jspi flag on V8_ENABLE_WEBASSEMBLY (Piotr Kubaj) [#&#8203;66082](https://github.com/nodejs/node/pull/66082)
- \[[`146f00f64b`](https://github.com/nodejs/node/commit/146f00f64b)] - **child_process**: clear timeout timer on spawn-time error too (kishore280) [#&#8203;65506](https://github.com/nodejs/node/pull/65506)
- \[[`13987f4418`](https://github.com/nodejs/node/commit/13987f4418)] - **crypto**: remove redundent `std::move` call (Antoine du Hamel) [#&#8203;66111](https://github.com/nodejs/node/pull/66111)
- \[[`ef957ac85f`](https://github.com/nodejs/node/commit/ef957ac85f)] - **crypto**: skip private RSA parameters in key details (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`8feccc5e22`](https://github.com/nodejs/node/commit/8feccc5e22)] - **crypto**: use provider EC group names (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`764e0d1120`](https://github.com/nodejs/node/commit/764e0d1120)] - **crypto**: fetch ciphers for private-key encoding (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`50ffed1979`](https://github.com/nodejs/node/commit/50ffed1979)] - **crypto**: decode [PKCS#1](https://github.com/PKCS/node/issues/1) keys through providers (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`56c16b2fd6`](https://github.com/nodejs/node/commit/56c16b2fd6)] - **crypto**: derive keys through EVP_KDF (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`a4effe6809`](https://github.com/nodejs/node/commit/a4effe6809)] - **crypto**: use names for asymmetric key algorithms (Filip Skokan) [#&#8203;65966](https://github.com/nodejs/node/pull/65966)
- \[[`ddbf974b47`](https://github.com/nodejs/node/commit/ddbf974b47)] - **(SEMVER-MINOR)** **crypto**: add crypto.parsePKCS12() (Brian Muenzenmeyer) [#&#8203;65627](https://github.com/nodejs/node/pull/65627)
- \[[`8e631aa48f`](https://github.com/nodejs/node/commit/8e631aa48f)] - **crypto**: add Hybrid KEMs to Web Cryptography (Filip Skokan) [#&#8203;65759](https://github.com/nodejs/node/pull/65759)
- \[[`5c51129e16`](https://github.com/nodejs/node/commit/5c51129e16)] - **crypto**: optimize private EC JWK import (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`c2ec40c2d7`](https://github.com/nodejs/node/commit/c2ec40c2d7)] - **crypto**: disable non-FIPS WebCrypto paths in FIPS mode (Filip Skokan) [#&#8203;65172](https://github.com/nodejs/node/pull/65172)
- \[[`e198aa0f79`](https://github.com/nodejs/node/commit/e198aa0f79)] - **crypto**: read RSA-PSS restrictions from provider (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`253784f0e9`](https://github.com/nodejs/node/commit/253784f0e9)] - **crypto**: optimize and benchmark key preparation (Filip Skokan) [#&#8203;65892](https://github.com/nodejs/node/pull/65892)
- \[[`80a6ad509b`](https://github.com/nodejs/node/commit/80a6ad509b)] - **crypto**: avoid EC reconstruction for signature sizing (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`5b592b772c`](https://github.com/nodejs/node/commit/5b592b772c)] - **crypto**: avoid EC raw export reconstruction (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`ee956ae3bf`](https://github.com/nodejs/node/commit/ee956ae3bf)] - **crypto**: export EC JWK coordinates directly (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`684008be58`](https://github.com/nodejs/node/commit/684008be58)] - **crypto**: read EC curve metadata directly (Filip Skokan) [#&#8203;65908](https://github.com/nodejs/node/pull/65908)
- \[[`f4665f1c41`](https://github.com/nodejs/node/commit/f4665f1c41)] - **crypto**: validate the limit of PBKDF2 iterations (Filip Skokan) [#&#8203;65704](https://github.com/nodejs/node/pull/65704)
- \[[`624abbecd7`](https://github.com/nodejs/node/commit/624abbecd7)] - **crypto**: use primordials in HKDF info validation (Filip Skokan) [#&#8203;65704](https://github.com/nodejs/node/pull/65704)
- \[[`e4d916f175`](https://github.com/nodejs/node/commit/e4d916f175)] - **crypto**: add mgf1Hash for RSA-OAEP (Adam Mcgrath) [#&#8203;65073](https://github.com/nodejs/node/pull/65073)
- \[[`db8a9162a8`](https://github.com/nodejs/node/commit/db8a9162a8)] - **crypto**: fix multi-prime RSA JWKs (Filip Skokan) [#&#8203;65649](https://github.com/nodejs/node/pull/65649)
- \[[`022ac83504`](https://github.com/nodejs/node/commit/022ac83504)] - **crypto**: cache valid ECDH key pairs (Filip Skokan) [#&#8203;65615](https://github.com/nodejs/node/pull/65615)
- \[[`c61953ebcc`](https://github.com/nodejs/node/commit/c61953ebcc)] - **crypto**: add strict mode to --force-fips (Filip Skokan) [#&#8203;65645](https://github.com/nodejs/node/pull/65645)
- \[[`db6ea132a5`](https://github.com/nodejs/node/commit/db6ea132a5)] - **crypto**: add FIPS indicator diagnostics channel (Filip Skokan) [#&#8203;65645](https://github.com/nodejs/node/pull/65645)
- \[[`c162c68ff0`](https://github.com/nodejs/node/commit/c162c68ff0)] - **(SEMVER-MINOR)** **crypto**: add a generic MAC API (Filip Skokan) [#&#8203;65553](https://github.com/nodejs/node/pull/65553)
- \[[`2b62aafd20`](https://github.com/nodejs/node/commit/2b62aafd20)] - **crypto**: validate JWK usages before key_ops (Filip Skokan) [#&#8203;65550](https://github.com/nodejs/node/pull/65550)
- \[[`ec7819db69`](https://github.com/nodejs/node/commit/ec7819db69)] - **crypto**: fix RSA-PSS oversized salt handling (Filip Skokan) [#&#8203;65550](https://github.com/nodejs/node/pull/65550)
- \[[`a4ab3d84d7`](https://github.com/nodejs/node/commit/a4ab3d84d7)] - **(SEMVER-MINOR)** **crypto**: discover ciphers from OpenSSL providers (Filip Skokan) [#&#8203;65484](https://github.com/nodejs/node/pull/65484)
- \[[`c2f1e829ea`](https://github.com/nodejs/node/commit/c2f1e829ea)] - **(SEMVER-MINOR)** **crypto**: discover hashes from OpenSSL providers (Filip Skokan) [#&#8203;65484](https://github.com/nodejs/node/pull/65484)
- \[[`51aad5a80d`](https://github.com/nodejs/node/commit/51aad5a80d)] - **(SEMVER-MINOR)** **crypto**: enable SIV and GCM-SIV modes in Cipher/Decipher APIs (Filip Skokan) [#&#8203;63411](https://github.com/nodejs/node/pull/63411)
- \[[`5a46a9acbb`](https://github.com/nodejs/node/commit/5a46a9acbb)] - **crypto**: improve SubtleCrypto.supports() accuracy (Filip Skokan) [#&#8203;65222](https://github.com/nodejs/node/pull/65222)
- \[[`191ebfb26c`](https://github.com/nodejs/node/commit/191ebfb26c)] - **crypto**: fix public PKCS8 export error (한국) [#&#8203;65609](https://github.com/nodejs/node/pull/65609)
- \[[`b6d7ed372b`](https://github.com/nodejs/node/commit/b6d7ed372b)] - **crypto**: fix private SPKI export error (Filip Skokan) [#&#8203;65550](https://github.com/nodejs/node/pull/65550)
- \[[`79509c25a4`](https://github.com/nodejs/node/commit/79509c25a4)] - **crypto**: correct CCM decryption FIPS error message (kyungrae) [#&#8203;65450](https://github.com/nodejs/node/pull/65450)
- \[[`9adc87bc16`](https://github.com/nodejs/node/commit/9adc87bc16)] - **crypto**: harden X509Certificate state (Filip Skokan) [#&#8203;65518](https://github.com/nodejs/node/pull/65518)
- \[[`c63aa331b4`](https://github.com/nodejs/node/commit/c63aa331b4)] - **crypto**: optimize key slot caching (Filip Skokan) [#&#8203;65518](https://github.com/nodejs/node/pull/65518)
- \[[`87daea43a7`](https://github.com/nodejs/node/commit/87daea43a7)] - **crypto**: add null checks for OPENSSL_INIT_new() (Nora Dossche) [#&#8203;63457](https://github.com/nodejs/node/pull/63457)
- \[[`98ca5e9358`](https://github.com/nodejs/node/commit/98ca5e9358)] - **crypto**: prevent Hmac.digest() from returning uninitialized memory (Matteo Collina) [#&#8203;65112](https://github.com/nodejs/node/pull/65112)
- \[[`0c090a28cd`](https://github.com/nodejs/node/commit/0c090a28cd)] - **crypto**: avoid throwing CryptoKey brand checks (Filip Skokan) [#&#8203;65503](https://github.com/nodejs/node/pull/65503)
- \[[`a13cc3f723`](https://github.com/nodejs/node/commit/a13cc3f723)] - **crypto**: avoid throwing KeyObject brand checks (Filip Skokan) [#&#8203;65503](https://github.com/nodejs/node/pull/65503)
- \[[`b8db0045ef`](https://github.com/nodejs/node/commit/b8db0045ef)] - **deps**: V8: cherry-pick [`ea9c016`](https://github.com/nodejs/node/commit/ea9c016f26ad) (Gundepalli Sravani) [#&#8203;66570](https://github.com/nodejs/node/pull/66570)
- \[[`ba09b53487`](https://github.com/nodejs/node/commit/ba09b53487)] - **deps**: V8: backport [`c355350`](https://github.com/nodejs/node/commit/c3553509f460) (Jakob Linke) [#&#8203;66089](https://github.com/nodejs/node/pull/66089)
- \[[`9ce8ef405b`](https://github.com/nodejs/node/commit/9ce8ef405b)] - **deps**: V8: backport [`8901c79`](https://github.com/nodejs/node/commit/8901c793e439) (Toon Verwaest) [#&#8203;66089](https://github.com/nodejs/node/pull/66089)
- \[[`fb0d0ca289`](https://github.com/nodejs/node/commit/fb0d0ca289)] - **deps**: V8: backport [`0b94a9f`](https://github.com/nodejs/node/commit/0b94a9fd23ba) (Ruan Gustavo) [#&#8203;65753](https://github.com/nodejs/node/pull/65753)
- \[[`2faca508c0`](https://github.com/nodejs/node/commit/2faca508c0)] - **deps**: update googletest to [`8eff9e3`](https://github.com/nodejs/node/commit/8eff9e336692fc95961e096564f1044c600b881d) (Node.js GitHub Bot) [#&#8203;66009](https://github.com/nodejs/node/pull/66009)
- \[[`4396c9bffe`](https://github.com/nodejs/node/commit/4396c9bffe)] - **deps**: update googletest to [`283c175`](https://github.com/nodejs/node/commit/283c17563fe7a1111cd7f581aa5d541e8baeff2f) (Node.js GitHub Bot) [#&#8203;65833](https://github.com/nodejs/node/pull/65833)
- \[[`8a5b12570c`](https://github.com/nodejs/node/commit/8a5b12570c)] - **deps**: update simdjson to 4.6.11 (Node.js GitHub Bot) [#&#8203;65834](https://github.com/nodejs/node/pull/65834)
- \[[`c47feb09e8`](https://github.com/nodejs/node/commit/c47feb09e8)] - **deps**: update zlib to 1.3.2.1-motley-285e94b (Node.js GitHub Bot) [#&#8203;65835](https://github.com/nodejs/node/pull/65835)
- \[[`9f0d905286`](https://github.com/nodejs/node/commit/9f0d905286)] - **deps**: upgrade npm to 11.19.1 (npm team) [#&#8203;65573](https://github.com/nodejs/node/pull/65573)
- \[[`373cd332d8`](https://github.com/nodejs/node/commit/373cd332d8)] - **deps**: update googletest to [`36ba75f`](https://github.com/nodejs/node/commit/36ba75f0ad5383a9759f17f3f72fd4661c72cb6d) (Node.js GitHub Bot) [#&#8203;65654](https://github.com/nodejs/node/pull/65654)
- \[[`aeed6132a7`](https://github.com/nodejs/node/commit/aeed6132a7)] - **deps**: update simdjson to 4.6.9 (Node.js GitHub Bot) [#&#8203;65655](https://github.com/nodejs/node/pull/65655)
- \[[`2583571342`](https://github.com/nodejs/node/commit/2583571342)] - **deps**: update zlib to 1.3.2.1-motley-5eb4d7e (Node.js GitHub Bot) [#&#8203;65494](https://github.com/nodejs/node/pull/65494)
- \[[`d11c65d2f2`](https://github.com/nodejs/node/commit/d11c65d2f2)] - **doc**: add araujogui to collaborators (Guilherme Araújo) [#&#8203;66090](https://github.com/nodejs/node/pull/66090)
- \[[`0a4a8d602a`](https://github.com/nodejs/node/commit/0a4a8d602a)] - **doc**: fix duplicate 'the' typo in `node_platform.cc` (Muhammad Al-Muzahid) [#&#8203;66058](https://github.com/nodejs/node/pull/66058)
- \[[`b6538138ef`](https://github.com/nodejs/node/commit/b6538138ef)] - **doc**: clarify sub-1000ms behavior in socket.setKeepAlive (Haram Jeong) [#&#8203;65869](https://github.com/nodejs/node/pull/65869)
- \[[`d319fa7de4`](https://github.com/nodejs/node/commit/d319fa7de4)] - **doc**: remove obsolete mentioning of cl.exe on windows (Chengzhong Wu) [#&#8203;66038](https://github.com/nodejs/node/pull/66038)
- \[[`67cb305b59`](https://github.com/nodejs/node/commit/67cb305b59)] - **doc**: note that default signal handling resets the signal mask (Shelley Vohr) [#&#8203;65877](https://github.com/nodejs/node/pull/65877)
- \[[`160d44e025`](https://github.com/nodejs/node/commit/160d44e025)] - **doc**: clarify QUIC async write backpressure (John Finnerty) [#&#8203;65947](https://github.com/nodejs/node/pull/65947)
- \[[`ffd47a7ee5`](https://github.com/nodejs/node/commit/ffd47a7ee5)] - **doc**: clarify permission model scope for output paths (Rafael Gonzaga) [#&#8203;66004](https://github.com/nodejs/node/pull/66004)
- \[[`2e1772a8ab`](https://github.com/nodejs/node/commit/2e1772a8ab)] - **doc**: fill in missing zstd docs (James M Snell) [#&#8203;65867](https://github.com/nodejs/node/pull/65867)
- \[[`9f88c6f8dc`](https://github.com/nodejs/node/commit/9f88c6f8dc)] - **doc**: add inoway46 as triager (Yuya Inoue) [#&#8203;65565](https://github.com/nodejs/node/pull/65565)
- \[[`c2620d01f3`](https://github.com/nodejs/node/commit/c2620d01f3)] - **doc**: document windowsHide for child_process.fork (Christopher Buss) [#&#8203;65887](https://github.com/nodejs/node/pull/65887)
- \[[`6076111e1a`](https://github.com/nodejs/node/commit/6076111e1a)] - **doc**: qualify directory read ordering for native fs (Trivikram Kamat) [#&#8203;65868](https://github.com/nodejs/node/pull/65868)
- \[[`7bf048a336`](https://github.com/nodejs/node/commit/7bf048a336)] - **doc**: add DOMException section to errors API reference (Avocado) [#&#8203;65206](https://github.com/nodejs/node/pull/65206)
- \[[`414b6bfa62`](https://github.com/nodejs/node/commit/414b6bfa62)] - **doc**: expand revert commit collaborator instructions (Mike McCready) [#&#8203;65848](https://github.com/nodejs/node/pull/65848)
- \[[`c8ac91692c`](https://github.com/nodejs/node/commit/c8ac91692c)] - **doc**: note that FreeEnvironment() runs a shared event loop (Shelley Vohr) [#&#8203;65691](https://github.com/nodejs/node/pull/65691)
- \[[`cc47cc0983`](https://github.com/nodejs/node/commit/cc47cc0983)] - **doc**: clarify security triage dispositions and permission boundaries (Rafael Gonzaga) [#&#8203;65436](https://github.com/nodejs/node/pull/65436)
- \[[`8b79a71e78`](https://github.com/nodejs/node/commit/8b79a71e78)] - **doc**: fix default limit of maxHeadersCount (Aryn H) [#&#8203;65472](https://github.com/nodejs/node/pull/65472)
- \[[`56b1252a54`](https://github.com/nodejs/node/commit/56b1252a54)] - **doc**: fix return types for sync methods (Chiang Fong Lee) [#&#8203;58575](https://github.com/nodejs/node/pull/58575)
- \[[`da0d32a333`](https://github.com/nodejs/node/commit/da0d32a333)] - **doc**: document REPL DEP0185 throws and uncaught-exception behavior (Adrián Estrada) [#&#8203;64993](https://github.com/nodejs/node/pull/64993)
- \[[`f8ab3619b6`](https://github.com/nodejs/node/commit/f8ab3619b6)] - **doc**: document close() error when in a sqlite callback (Trivikram Kamat) [#&#8203;65090](https://github.com/nodejs/node/pull/65090)
- \[[`131f1db302`](https://github.com/nodejs/node/commit/131f1db302)] - **doc**: clarify return type of `fs.mkdtemp*` (Antoine du Hamel) [#&#8203;65743](https://github.com/nodejs/node/pull/65743)
- \[[`7755e98183`](https://github.com/nodejs/node/commit/7755e98183)] - **doc**: update `changelog-maker` instructions for releasing (Juan José) [#&#8203;65707](https://github.com/nodejs/node/pull/65707)
- \[[`f982a53433`](https://github.com/nodejs/node/commit/f982a53433)] - **doc**: add stability status to `crypto.setEngine` (Antoine du Hamel) [#&#8203;65746](https://github.com/nodejs/node/pull/65746)
- \[[`17be003f7c`](https://github.com/nodejs/node/commit/17be003f7c)] - **doc**: remove outdated TLS authorized warning (Tim Perry) [#&#8203;65597](https://github.com/nodejs/node/pull/65597)
- \[[`424002232d`](https://github.com/nodejs/node/commit/424002232d)] - **doc**: fix stale TOC in maintaining-dependencies (greenhead) [#&#8203;65523](https://github.com/nodejs/node/pull/65523)
- \[[`dddb9b57a5`](https://github.com/nodejs/node/commit/dddb9b57a5)] - **doc**: refactor the AI guidelines (Joyee Cheung) [#&#8203;65269](https://github.com/nodejs/node/pull/65269)
- \[[`397b58e113`](https://github.com/nodejs/node/commit/397b58e113)] - **doc**: fix triggerAsyncId() comment in async_hooks example (soreavis) [#&#8203;64583](https://github.com/nodejs/node/pull/64583)
- \[[`338ec94d83`](https://github.com/nodejs/node/commit/338ec94d83)] - **doc**: fix fsPromises.watch overflow value (Matt Radbourne) [#&#8203;64605](https://github.com/nodejs/node/pull/64605)
- \[[`f18be21b14`](https://github.com/nodejs/node/commit/f18be21b14)] - **doc**: clarify stream direction in options.stdio note (Avocado) [#&#8203;65236](https://github.com/nodejs/node/pull/65236)
- \[[`f07c6acd8b`](https://github.com/nodejs/node/commit/f07c6acd8b)] - **doc**: clarify signal listener behavior (Som Samantray) [#&#8203;65243](https://github.com/nodejs/node/pull/65243)
- \[[`8bc17b0c7a`](https://github.com/nodejs/node/commit/8bc17b0c7a)] - **doc**: add test reporter event lifecycle diagram (sangwook) [#&#8203;63780](https://github.com/nodejs/node/pull/63780)
- \[[`452e7477d4`](https://github.com/nodejs/node/commit/452e7477d4)] - **doc**: discourage AbortSignal cleanup for long-lived resources (Efe Karasakal) [#&#8203;64342](https://github.com/nodejs/node/pull/64342)
- \[[`acc1578179`](https://github.com/nodejs/node/commit/acc1578179)] - **doc**: deprecate `Server.prototype._listen2` in `node:net` (Antoine du Hamel) [#&#8203;65593](https://github.com/nodejs/node/pull/65593)
- \[[`e7ed4361d6`](https://github.com/nodejs/node/commit/e7ed4361d6)] - **doc,test**: account for OpenSSL 4.1 behaviours (Filip Skokan) [#&#8203;65956](https://github.com/nodejs/node/pull/65956)
- \[[`c65fafeab4`](https://github.com/nodejs/node/commit/c65fafeab4)] - **errors**: validate constructor name (Christian Aurich) [#&#8203;65607](https://github.com/nodejs/node/pull/65607)
- \[[`f6b47938b7`](https://github.com/nodejs/node/commit/f6b47938b7)] - **events**: fix weak listener retention overwrite (Aryan) [#&#8203;64024](https://github.com/nodejs/node/pull/64024)
- \[[`a27db42c3e`](https://github.com/nodejs/node/commit/a27db42c3e)] - **fs**: coerce FileHandle.read length like fs.read (Xia Chao) [#&#8203;65521](https://github.com/nodejs/node/pull/65521)
- \[[`f3019b522a`](https://github.com/nodejs/node/commit/f3019b522a)] - **fs**: throw on existing dir in cpSync with errorOnExist (Daijiro Wachi) [#&#8203;64124](https://github.com/nodejs/node/pull/64124)
- \[[`cd1011458f`](https://github.com/nodejs/node/commit/cd1011458f)] - **fs**: support removing read-only files in rmSync on Windows (Sparsh :)) [#&#8203;64453](https://github.com/nodejs/node/pull/64453)
- \[[`d659dd8cd8`](https://github.com/nodejs/node/commit/d659dd8cd8)] - **fs**: give directories created by cpSync the source directory's mode (Shelley Vohr) [#&#8203;65488](https://github.com/nodejs/node/pull/65488)
- \[[`1dfb047293`](https://github.com/nodejs/node/commit/1dfb047293)] - **fs**: handle recursive watch setup races (Filip Skokan) [#&#8203;65699](https://github.com/nodejs/node/pull/65699)
- \[[`bc431c8413`](https://github.com/nodejs/node/commit/bc431c8413)] - **fs**: apply nocase to literal glob exclude patterns (Yusuke Hayashi) [#&#8203;64817](https://github.com/nodejs/node/pull/64817)
- \[[`dd5662e641`](https://github.com/nodejs/node/commit/dd5662e641)] - **fs**: do not descend into symlinks for \*\* unless following symlinks (RafaelGSS) [#&#8203;65435](https://github.com/nodejs/node/pull/65435)
- \[[`ac4cf54292`](https://github.com/nodejs/node/commit/ac4cf54292)] - **fs**: watch directories, not files, in recursive fs.watch fallback (Shelley Vohr) [#&#8203;65486](https://github.com/nodejs/node/pull/65486)
- \[[`7804bfbd71`](https://github.com/nodejs/node/commit/7804bfbd71)] - **fs**: preserve directory timestamps in cp (Abhinandan Kumar) [#&#8203;65540](https://github.com/nodejs/node/pull/65540)
- \[[`ba5ca5a1a5`](https://github.com/nodejs/node/commit/ba5ca5a1a5)] - **fs**: fix recursive watch error handling (Filip Skokan) [#&#8203;65635](https://github.com/nodejs/node/pull/65635)
- \[[`b71c4c0551`](https://github.com/nodejs/node/commit/b71c4c0551)] - **fs**: fix rmSync error messages for non-ASCII paths (Yeaseen) [#&#8203;61233](https://github.com/nodejs/node/pull/61233)
- \[[`53b4700892`](https://github.com/nodejs/node/commit/53b4700892)] - **http**: don't destroy socket after request completes (Barath Raj) [#&#8203;65952](https://github.com/nodejs/node/pull/65952)
- \[[`96d4c23f17`](https://github.com/nodejs/node/commit/96d4c23f17)] - **http**: fast-forward teardown of unread messages (Matteo Collina) [#&#8203;65732](https://github.com/nodejs/node/pull/65732)
- \[[`742b4bf5a6`](https://github.com/nodejs/node/commit/742b4bf5a6)] - **http**: coalesce chunked writes during auto-corking (GetThatCookie) [#&#8203;64987](https://github.com/nodejs/node/pull/64987)
- \[[`8921108175`](https://github.com/nodejs/node/commit/8921108175)] - **http2**: settle pending write callbacks on destroy (Matteo Collina) [#&#8203;66016](https://github.com/nodejs/node/pull/66016)
- \[[`9a2f77a3fc`](https://github.com/nodejs/node/commit/9a2f77a3fc)] - **http2**: fix onread assert when destroying session from stream handler (Sankalp Thakur) [#&#8203;65116](https://github.com/nodejs/node/pull/65116)
- \[[`99e41eb43a`](https://github.com/nodejs/node/commit/99e41eb43a)] - **http2**: error for incomplete reads on RST, auto-drain, deprecate aborted (Tim Perry) [#&#8203;63249](https://github.com/nodejs/node/pull/63249)
- \[[`d520b9601c`](https://github.com/nodejs/node/commit/d520b9601c)] - **http2**: fix write deadlock exposed by larger window sizes (Tim Perry) [#&#8203;65440](https://github.com/nodejs/node/pull/65440)
- \[[`86b2497aae`](https://github.com/nodejs/node/commit/86b2497aae)] - **http2**: fix async context loss when trailers carry END_STREAM (Orgad Shaneh) [#&#8203;63814](https://github.com/nodejs/node/pull/63814)
- \[[`536ccc7daf`](https://github.com/nodejs/node/commit/536ccc7daf)] - **https**: limit proxy CONNECT response headers (Matteo Collina) [#&#8203;64545](https://github.com/nodejs/node/pull/64545)
- \[[`fe6147832b`](https://github.com/nodejs/node/commit/fe6147832b)] - **inspector**: fix abort when two Environments own the inspector (Shelley Vohr) [#&#8203;65877](https://github.com/nodejs/node/pull/65877)
- \[[`843a27782a`](https://github.com/nodejs/node/commit/843a27782a)] - **inspector**: fix crash when the IsolateData has no platform (Shelley Vohr) [#&#8203;65818](https://github.com/nodejs/node/pull/65818)
- \[[`3f0b6d3308`](https://github.com/nodejs/node/commit/3f0b6d3308)] - **lib**: avoid repeat internal receiver checks (Filip Skokan) [#&#8203;65910](https://github.com/nodejs/node/pull/65910)
- \[[`0039479b4a`](https://github.com/nodejs/node/commit/0039479b4a)] - **lib**: fix shared buffer growability validation (Filip Skokan) [#&#8203;65845](https://github.com/nodejs/node/pull/65845)
- \[[`e7907130ae`](https://github.com/nodejs/node/commit/e7907130ae)] - **lib**: use Web IDL interface brand checks (Filip Skokan) [#&#8203;65846](https://github.com/nodejs/node/pull/65846)
- \[[`7ae085552b`](https://github.com/nodejs/node/commit/7ae085552b)] - **lib**: fix AbortSignal.any() abort propagation (Yuya Inoue) [#&#8203;66014](https://github.com/nodejs/node/pull/66014)
- \[[`01032f4fdc`](https://github.com/nodejs/node/commit/01032f4fdc)] - **lib**: fix for FileHandle.readableWebStream (Patrick Dähne) [#&#8203;58842](https://github.com/nodejs/node/pull/58842)
- \[[`60a9a28206`](https://github.com/nodejs/node/commit/60a9a28206)] - **lib**: avoid unsafe array iteration in cli table (Donghoon Kang) [#&#8203;65838](https://github.com/nodejs/node/pull/65838)
- \[[`230a7fcef0`](https://github.com/nodejs/node/commit/230a7fcef0)] - **lib**: optimize internal Web IDL dictionaries (Filip Skokan) [#&#8203;65857](https://github.com/nodejs/node/pull/65857)
- \[[`7cc02b14ec`](https://github.com/nodejs/node/commit/7cc02b14ec)] - **lib**: validate sequence iterator objects (Filip Skokan) [#&#8203;65844](https://github.com/nodejs/node/pull/65844)
- \[[`c2bb3aeccc`](https://github.com/nodejs/node/commit/c2bb3aeccc)] - **lib**: defer source map payload decoding until first use (Shelley Vohr) [#&#8203;65490](https://github.com/nodejs/node/pull/65490)
- \[[`c4b390cf17`](https://github.com/nodejs/node/commit/c4b390cf17)] - **lib**: optimize async context frame activation (Tim Perry) [#&#8203;65519](https://github.com/nodejs/node/pull/65519)
- \[[`3e4fc50a4f`](https://github.com/nodejs/node/commit/3e4fc50a4f)] - **lib**: use validateArray for array arguments (JunHwan Choi) [#&#8203;65344](https://github.com/nodejs/node/pull/65344)
- \[[`b351ac9cd4`](https://github.com/nodejs/node/commit/b351ac9cd4)] - **meta**: bump step-security/harden-runner from 2.21.0 to 2.21.1 (dependabot\[bot]) [#&#8203;66044](https://github.com/nodejs/node/pull/66044)
- \[[`693e890fec`](https://github.com/nodejs/node/commit/693e890fec)] - **meta**: bump github/codeql-action/upload-sarif from 4.37.9 to 4.38.0 (dependabot\[bot]) [#&#8203;66046](https://github.com/nodejs/node/pull/66046)
- \[[`9c2abc13c2`](https://github.com/nodejs/node/commit/9c2abc13c2)] - **meta**: bump github/codeql-action/init from 4.37.9 to 4.38.0 (dependabot\[bot]) [#&#8203;66048](https://github.com/nodejs/node/pull/66048)
- \[[`b3c5c2b91d`](https://github.com/nodejs/node/commit/b3c5c2b91d)] - **meta**: bump github/codeql-action/analyze from 4.37.9 to 4.38.0 (dependabot\[bot]) [#&#8203;66049](https://github.com/nodejs/node/pull/66049)
- \[[`2428b13b02`](https://github.com/nodejs/node/commit/2428b13b02)] - **meta**: bump github/codeql-action/autobuild from 4.37.9 to 4.38.0 (dependabot\[bot]) [#&#8203;66050](https://github.com/nodejs/node/pull/66050)
- \[[`eff5d15041`](https://github.com/nodejs/node/commit/eff5d15041)] - **meta**: add joyeecheung as v8 currency strategic initiative champion (Joyee Cheung) [#&#8203;65965](https://github.com/nodejs/node/pull/65965)
- \[[`aa549fed0d`](https://github.com/nodejs/node/commit/aa549fed0d)] - **meta**: expand on collaborator restoration process (Chengzhong Wu) [#&#8203;65962](https://github.com/nodejs/node/pull/65962)
- \[[`593b40eb2b`](https://github.com/nodejs/node/commit/593b40eb2b)] - **meta**: add web-standards as webidl owners (Filip Skokan) [#&#8203;65856](https://github.com/nodejs/node/pull/65856)
- \[[`e711d3fef3`](https://github.com/nodejs/node/commit/e711d3fef3)] - **meta**: bump actions/checkout from 7.0.0 to 7.0.1 (dependabot\[bot]) [#&#8203;65718](https://github.com/nodejs/node/pull/65718)
- \[[`0fc8a38f5b`](https://github.com/nodejs/node/commit/0fc8a38f5b)] - **meta**: cleanup targos emeritus changes (Antoine du Hamel) [#&#8203;65738](https://github.com/nodejs/node/pull/65738)
- \[[`2ca2fd566d`](https://github.com/nodejs/node/commit/2ca2fd566d)] - **meta**: bump github/codeql-action/init from 4.37.3 to 4.37.9 (dependabot\[bot]) [#&#8203;65714](https://github.com/nodejs/node/pull/65714)
- \[[`325709818e`](https://github.com/nodejs/node/commit/325709818e)] - **meta**: bump github/codeql-action/autobuild from 4.37.3 to 4.37.9 (dependabot\[bot]) [#&#8203;65717](https://github.com/nodejs/node/pull/65717)
- \[[`8481d22f72`](https://github.com/nodejs/node/commit/8481d22f72)] - **meta**: bump actions/setup-node from 6.4.0 to 7.0.0 (dependabot\[bot]) [#&#8203;65720](https://github.com/nodejs/node/pull/65720)
- \[[`cd2bd5d9fd`](https://github.com/nodejs/node/commit/cd2bd5d9fd)] - **meta**: bump step-security/harden-runner from 2.20.0 to 2.21.0 (dependabot\[bot]) [#&#8203;65721](https://github.com/nodejs/node/pull/65721)
- \[[`fdec747105`](https://github.com/nodejs/node/commit/fdec747105)] - **meta**: bump github/codeql-action/upload-sarif from 4.37.3 to 4.37.9 (dependabot\[bot]) [#&#8203;65722](https://github.com/nodejs/node/pull/65722)
- \[[`34c2fca088`](https://github.com/nodejs/node/commit/34c2fca088)] - **meta**: bump github/codeql-action/analyze from 4.37.3 to 4.37.9 (dependabot\[bot]) [#&#8203;65723](https://github.com/nodejs/node/pull/65723)
- \[[`46d4549938`](https://github.com/nodejs/node/commit/46d4549938)] - **meta**: document collaborator automation (Filip Skokan) [#&#8203;65671](https://github.com/nodejs/node/pull/65671)
- \[[`a7f8de6362`](https://github.com/nodejs/node/commit/a7f8de6362)] - **(SEMVER-MINOR)** **net**: support sending net.BoundSocket to threads and child processes (Guy Bedford) [#&#8203;64725](https://github.com/nodejs/node/pull/64725)
- \[[`466f1f8e62`](https://github.com/nodejs/node/commit/466f1f8e62)] - **net**: fix BlockList.fromJSON for IPv4-mapped IPv6 rules (Daijiro Wachi) [#&#8203;64125](https://github.com/nodejs/node/pull/64125)
- \[[`cd04cb10d6`](https://github.com/nodejs/node/commit/cd04cb10d6)] - **net**: recognize bare IPv6 loopback addresses in isLoopback (Daijiro Wachi) [#&#8203;63619](https://github.com/nodejs/node/pull/63619)
- \[[`d983942636`](https://github.com/nodejs/node/commit/d983942636)] - **node-api**: make object property arrays const (Yilong Li) [#&#8203;65621](https://github.com/nodejs/node/pull/65621)
- \[[`cc124394cc`](https://github.com/nodejs/node/commit/cc124394cc)] - **path**: remove `StringPrototypeCharCodeAt` from some methods of `posix` (Wiyeong Seo) [#&#8203;54668](https://github.com/nodejs/node/pull/54668)
- \[[`60c3eb61bd`](https://github.com/nodejs/node/commit/60c3eb61bd)] - **(SEMVER-MINOR)** **perf_hooks**: implement SlidingWindowHistogram (James M Snell) [#&#8203;65825](https://github.com/nodejs/node/pull/65825)
- \[[`6b3e6f9d5c`](https://github.com/nodejs/node/commit/6b3e6f9d5c)] - **(SEMVER-MINOR)** **perf_hooks**: implement qrde analysis support in Histogram (James M Snell) [#&#8203;65806](https://github.com/nodejs/node/pull/65806)
- \[[`8aa870940c`](https://github.com/nodejs/node/commit/8aa870940c)] - **perf_hooks**: reuse buffer for uv metrics (Donghoon Kang) [#&#8203;65985](https://github.com/nodejs/node/pull/65985)
- \[[`9cfbfae660`](https://github.com/nodejs/node/commit/9cfbfae660)] - **perf_hooks**: validate import normalization offset (Matteo Collina) [#&#8203;65950](https://github.com/nodejs/node/pull/65950)
- \[[`75456a3512`](https://github.com/nodejs/node/commit/75456a3512)] - **(SEMVER-MINOR)** **perf_hooks**: implement Histogram meanCI API (James M Snell) [#&#8203;65606](https://github.com/nodejs/node/pull/65606)
- \[[`127cb31864`](https://github.com/nodejs/node/commit/127cb31864)] - **perf_hooks**: add missing resource timing attributes (greenhead) [#&#8203;65017](https://github.com/nodejs/node/pull/65017)
- \[[`72d1b40c56`](https://github.com/nodejs/node/commit/72d1b40c56)] - **(SEMVER-MINOR)** **perf_hooks**: add CBOR export/import for histogram exchange (James M Snell) [#&#8203;65434](https://github.com/nodejs/node/pull/65434)
- \[[`847fe4d049`](https://github.com/nodejs/node/commit/847fe4d049)] - **permission**: block FileHandle fsync and fdatasync (Rafael Gonzaga) [#&#8203;65431](https://github.com/nodejs/node/pull/65431)
- \[[`fa9188bd63`](https://github.com/nodejs/node/commit/fa9188bd63)] - **quic**: fix two small bugs in HTTP/3 stream internals (Tim Perry) [#&#8203;65970](https://github.com/nodejs/node/pull/65970)
- \[[`ee80beaa9f`](https://github.com/nodejs/node/commit/ee80beaa9f)] - **quic**: fix crash in onStreamClose (Marten Richter) [#&#8203;65861](https://github.com/nodejs/node/pull/65861)
- \[[`98486dd764`](https://github.com/nodejs/node/commit/98486dd764)] - **quic**: reject zero addressLRUSize (Christian Aurich) [#&#8203;65827](https://github.com/nodejs/node/pull/65827)
- \[[`97516fc256`](https://github.com/nodejs/node/commit/97516fc256)] - **quic**: stop guarding ngtcp2_recv_stop_sending callback field (René) [#&#8203;65688](https://github.com/nodejs/node/pull/65688)
- \[[`024bef25eb`](https://github.com/nodejs/node/commit/024bef25eb)] - **quic**: remove unused fin flag from blob reader wakeup (trivenay) [#&#8203;65315](https://github.com/nodejs/node/pull/65315)
- \[[`5468337456`](https://github.com/nodejs/node/commit/5468337456)] - **quic**: release stream arenas before cleanup (Trivikram Kamat) [#&#8203;65410](https://github.com/nodejs/node/pull/65410)
- \[[`a794e36970`](https://github.com/nodejs/node/commit/a794e36970)] - **sqlite**: throw on invalid URL path instead of abort (Guilherme Araújo) [#&#8203;66026](https://github.com/nodejs/node/pull/66026)
- \[[`f58a55b8d0`](https://github.com/nodejs/node/commit/f58a55b8d0)] - **sqlite**: add diagnostic channel (Guilherme Araújo) [#&#8203;62241](https://github.com/nodejs/node/pull/62241)
- \[[`be849bc6af`](https://github.com/nodejs/node/commit/be849bc6af)] - **sqlite**: reject connection access from authorizer callbacks (Trevor Burnham) [#&#8203;65156](https://github.com/nodejs/node/pull/65156)
- \[[`41161dda87`](https://github.com/nodejs/node/commit/41161dda87)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype.close() (Guilherme Araújo) [#&#8203;64232](https://github.com/nodejs/node/pull/64232)
- \[[`adbc757d70`](https://github.com/nodejs/node/commit/adbc757d70)] - **(SEMVER-MINOR)** **sqlite**: add StatementSync.prototype\[Symbol.dispose]\() (Guilherme Araújo) [#&#8203;64232](https://github.com/nodejs/node/pull/64232)
- \[[`b7b18fdbc9`](https://github.com/nodejs/node/commit/b7b18fdbc9)] - **sqlite**: run backup completion in callback scope (Filip Skokan) [#&#8203;65666](https://github.com/nodejs/node/pull/65666)
- \[[`59827acd7f`](https://github.com/nodejs/node/commit/59827acd7f)] - **sqlite**: isolate applyChangeset filter errors (Trivikram Kamat) [#&#8203;64823](https://github.com/nodejs/node/pull/64823)
- \[[`5a01df2d15`](https://github.com/nodejs/node/commit/5a01df2d15)] - **sqlite**: reject deserialize() while in a callback (Trivikram Kamat) [#&#8203;64796](https://github.com/nodejs/node/pull/64796)
- \[[`c9b6e75a2e`](https://github.com/nodejs/node/commit/c9b6e75a2e)] - **sqlite**: refactor error helpers and user function pointers (Ali Hassan) [#&#8203;62794](https://github.com/nodejs/node/pull/62794)
- \[[`d4eb6c62a9`](https://github.com/nodejs/node/commit/d4eb6c62a9)] - **sqlite**: prevent database close during callbacks (Matteo Collina) [#&#8203;64743](https://github.com/nodejs/node/pull/64743)
- \[[`83b3431c25`](https://github.com/nodejs/node/commit/83b3431c25)] - **src**: detach cppgc wrappers from their Realm before it is freed (Shelley Vohr) [#&#8203;65778](https://github.com/nodejs/node/pull/65778)
- \[[`13ed7e35e7`](https://github.com/nodejs/node/commit/13ed7e35e7)] - **src**: list scripts when `--run` has no command (James Ross) [#&#8203;64606](https://github.com/nodejs/node/pull/64606)
- \[[`0f62f2b2df`](https://github.com/nodejs/node/commit/0f62f2b2df)] - **src**: print exception thrown during primordial initialization (Joyee Cheung) [#&#8203;65991](https://github.com/nodejs/node/pull/65991)
- \[[`70117640f7`](https://github.com/nodejs/node/commit/70117640f7)] - **src**: don't kill own process group on failed spawn (Lazizbek Ergashev) [#&#8203;65054](https://github.com/nodejs/node/pull/65054)
- \[[`64649abfd4`](https://github.com/nodejs/node/commit/64649abfd4)] - **src**: keep the first snapshot blob alive for later isolates (Shelley Vohr) [#&#8203;65779](https://github.com/nodejs/node/pull/65779)
- \[[`3c814e8c3c`](https://github.com/nodejs/node/commit/3c814e8c3c)] - **src**: fix Stop() terminating the next Environment on the isolate (Shelley Vohr) [#&#8203;65819](https://github.com/nodejs/node/pull/65819)
- \[[`a3ababcebb`](https://github.com/nodejs/node/commit/a3ababcebb)] - **src**: fix null pointer call when running without a startup snapshot (Shelley Vohr) [#&#8203;65820](https://github.com/nodejs/node/pull/65820)
- \[[`7331f5cfcc`](https://github.com/nodejs/node/commit/7331f5cfcc)] - **src**: stop leaking a CppHeap in CommonEnvironmentSetup (Shelley Vohr) [#&#8203;65792](https://github.com/nodejs/node/pull/65792)
- \[[`5570a84048`](https://github.com/nodejs/node/commit/5570a84048)] - **src**: fix use-after-free in CleanupHookThunkRun (Caleb Everett) [#&#8203;65630](https://github.com/nodejs/node/pull/65630)
- \[[`abe1b673e9`](https://github.com/nodejs/node/commit/abe1b673e9)] - **src**: keep global list of addon-provided cleanup hooks (Anna Henningsen) [#&#8203;63985](https://github.com/nodejs/node/pull/63985)
- \[[`2203ac9382`](https://github.com/nodejs/node/commit/2203ac9382)] - **src**: fix startup snapshot reproducibility of InternalFieldInfo (Chengzhong Wu) [#&#8203;65684](https://github.com/nodejs/node/pull/65684)
- \[[`b282765d99`](https://github.com/nodejs/node/commit/b282765d99)] - **src**: fix live lock between environments with blocked requests (Ilyas Shabi) [#&#8203;65520](https://github.com/nodejs/node/pull/65520)
- \[[`61ca3ba93c`](https://github.com/nodejs/node/commit/61ca3ba93c)] - **src**: apply IsolateSettings when using a snapshot (Shelley Vohr) [#&#8203;65407](https://github.com/nodejs/node/pull/65407)
- \[[`33b8d6e10f`](https://github.com/nodejs/node/commit/33b8d6e10f)] - **src**: add re-entrancy guard to TriggerUncaughtException (Temuulen Undrakhbayar) [#&#8203;64327](https://github.com/nodejs/node/pull/64327)
- \[[`49232db71e`](https://github.com/nodejs/node/commit/49232db71e)] - **src**: reuse cached strings in CompileSerializeMain (agape1225) [#&#8203;65453](https://github.com/nodejs/node/pull/65453)
- \[[`e3f52b80a5`](https://github.com/nodejs/node/commit/e3f52b80a5)] - **src**: report libuv error when openAsBlob cannot stat (Paul Bouchon) [#&#8203;65517](https://github.com/nodejs/node/pull/65517)
- \[[`42a5a19027`](https://github.com/nodejs/node/commit/42a5a19027)] - **src**: shave about 20 bytes off each TLSWrap instance (James M Snell) [#&#8203;65144](https://github.com/nodejs/node/pull/65144)
- \[[`a06bb51e22`](https://github.com/nodejs/node/commit/a06bb51e22)] - **src**: use UTF-8 for task runner filesystem paths (Archkon) [#&#8203;64868](https://github.com/nodejs/node/pull/64868)
- \[[`241339f072`](https://github.com/nodejs/node/commit/241339f072)] - **(SEMVER-MINOR)** **src,lib**: add util.markPromiseAsHandled (James M Snell) [#&#8203;65805](https://github.com/nodejs/node/pull/65805)
- \[[`1260642ace`](https://github.com/nodejs/node/commit/1260642ace)] - **stream**: destroy Duplex.from async function on early return (Aman Chadha(IVIXMMI)) [#&#8203;65963](https://github.com/nodejs/node/pull/65963)
- \[[`5f06defdbd`](https://github.com/nodejs/node/commit/5f06defdbd)] - **stream**: make share budget failures detach before throwing (James M Snell) [#&#8203;66028](https://github.com/nodejs/node/pull/66028)
- \[[`d1c60d898d`](https://github.com/nodejs/node/commit/d1c60d898d)] - **stream**: update broadcast to retain buffered data with zero consumers (James M Snell) [#&#8203;66028](https://github.com/nodejs/node/pull/66028)
- \[[`bbb00558c5`](https://github.com/nodejs/node/commit/bbb00558c5)] - **stream**: avoid promise allocation for parked transform writes (Matteo Collina) [#&#8203;65625](https://github.com/nodejs/node/pull/65625)
- \[[`3216bc3912`](https://github.com/nodejs/node/commit/3216bc3912)] - **stream**: keep webstream stream states in fast-mode objects (Matteo Collina) [#&#8203;65625](https://github.com/nodejs/node/pull/65625)
- \[[`70c1415686`](https://github.com/nodejs/node/commit/70c1415686)] - **stream**: reject closed only after sink abort settles (Lazizbek Ergashev) [#&#8203;65727](https://github.com/nodejs/node/pull/65727)
- \[[`f8737b8ee5`](https://github.com/nodejs/node/commit/f8737b8ee5)] - **stream**: fix ERR_INVALID_STATE when cancelling Readable.toWeb() (Richard Scarrott) [#&#8203;62773](https://github.com/nodejs/node/pull/62773)
- \[[`faa16f671c`](https://github.com/nodejs/node/commit/faa16f671c)] - **stream**: amortize writable buffer compaction (Gürgün Dayıoğlu) [#&#8203;65847](https://github.com/nodejs/node/pull/65847)
- \[[`6262e0b8c6`](https://github.com/nodejs/node/commit/6262e0b8c6)] - **stream**: create write request objects lazily (Matteo Collina) [#&#8203;64455](https://github.com/nodejs/node/pull/64455)
- \[[`0f0566de15`](https://github.com/nodejs/node/commit/0f0566de15)] - **stream**: allocate stream read buffers from a slab (Matteo Collina) [#&#8203;64455](https://github.com/nodejs/node/pull/64455)
- \[[`02c776a7c6`](https://github.com/nodejs/node/commit/02c776a7c6)] - **stream**: ensure that stateful transforms preserve this (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`4b29051971`](https://github.com/nodejs/node/commit/4b29051971)] - **stream**: fix nested async flushing with infinite sources (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`2e54186d97`](https://github.com/nodejs/node/commit/2e54186d97)] - **stream**: ensure from() observes returned rejecting promise correctly (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`fd68d5ca6a`](https://github.com/nodejs/node/commit/fd68d5ca6a)] - **stream**: apply source normalization once at call time (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`49ee85b462`](https://github.com/nodejs/node/commit/49ee85b462)] - **stream**: make pipeTo source normalization independent of Writer (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`d7d0440f08`](https://github.com/nodejs/node/commit/d7d0440f08)] - **stream**: pre-aborted pipeTo now applies dest failure handling (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`6d8e643ef3`](https://github.com/nodejs/node/commit/6d8e643ef3)] - **stream**: ensure async dispoal after endSync awaits for drain (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`a082916c00`](https://github.com/nodejs/node/commit/a082916c00)] - **stream**: ensure factory signals remain active through closing (James M Snell) [#&#8203;65658](https://github.com/nodejs/node/pull/65658)
- \[[`38829295a7`](https://github.com/nodejs/node/commit/38829295a7)] - **stream**: skip unobserved 'readable' emission at EOF (Matteo Collina) [#&#8203;65749](https://github.com/nodejs/node/pull/65749)
- \[[`d535859c22`](https://github.com/nodejs/node/commit/d535859c22)] - **stream**: avoid per-chunk promises in webstream adapters (Matteo Collina) [#&#8203;65548](https://github.com/nodejs/node/pull/65548)
- \[[`80568f6818`](https://github.com/nodejs/node/commit/80568f6818)] - **stream**: address stream/iter review feedback (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`6952928f68`](https://github.com/nodejs/node/commit/6952928f68)] - **stream**: replace object sentinel with symbol (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`9c22c4124c`](https://github.com/nodejs/node/commit/9c22c4124c)] - **stream**: cancel active stream/iter pulls (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`24d87990cf`](https://github.com/nodejs/node/commit/24d87990cf)] - **stream**: fix merge settlement tagging and falsy error tracking (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`1e215c4b51`](https://github.com/nodejs/node/commit/1e215c4b51)] - **stream**: ensure full-close semantics when closed (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`f499d6fadf`](https://github.com/nodejs/node/commit/f499d6fadf)] - **stream**: fixup writer to terminate on consumer return/throw (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`2130738033`](https://github.com/nodejs/node/commit/2130738033)] - **stream**: ensure iterator cleanup on done, reject, etc (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`748adc6275`](https://github.com/nodejs/node/commit/748adc6275)] - **stream**: fixup cancelation handling in pull() (James M Snell) [#&#8203;65652](https://github.com/nodejs/node/pull/65652)
- \[[`47b3f6a1fa`](https://github.com/nodejs/node/commit/47b3f6a1fa)] - **stream**: fix early drain after Utf8Stream reopen (Matteo Collina) [#&#8203;65633](https://github.com/nodejs/node/pull/65633)
- \[[`6dab5412cf`](https://github.com/nodejs/node/commit/6dab5412cf)] - **test**: skip RSA-PSS keygen deprecation tests with BoringSSL (Shelley Vohr) [#&#8203;65808](https://github.com/nodejs/node/pull/65808)
- \[[`95d9a25b61`](https://github.com/nodejs/node/commit/95d9a25b61)] - **test**: consolidate crypto provider cache coverage (Filip Skokan) [#&#8203;66108](https://github.com/nodejs/node/pull/66108)
- \[[`612db6d5b2`](https://github.com/nodejs/node/commit/612db6d5b2)] - **test**: deflake user timing WPT assertions (Filip Skokan) [#&#8203;66036](https://github.com/nodejs/node/pull/66036)
- \[[`61a73d31eb`](https://github.com/nodejs/node/commit/61a73d31eb)] - **test**: fix RSA/DSA wrong-passphrase flake (Filip Skokan) [#&#8203;65983](https://github.com/nodejs/node/pull/65983)
- \[[`d9f4a3ee3e`](https://github.com/nodejs/node/commit/d9f4a3ee3e)] - **test**: reuse fixed primes in DH tests (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`a0fd0a8bd6`](https://github.com/nodejs/node/commit/a0fd0a8bd6)] - **test**: use named parameters in DH stress test (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`810a6b00ee`](https://github.com/nodejs/node/commit/810a6b00ee)] - **test**: update tests to run with OpenSSL >= 3.0 FIPS mode (Filip Skokan) [#&#8203;64960](https://github.com/nodejs/node/pull/64960)
- \[[`dc6b9ba5b2`](https://github.com/nodejs/node/commit/dc6b9ba5b2)] - **test**: deflake test-run-watch-cwd-isolation-none-\* (Antoine du Hamel) [#&#8203;66035](https://github.com/nodejs/node/pull/66035)
- \[[`0f27bd2459`](https://github.com/nodejs/node/commit/0f27bd2459)] - **test**: unskip `test-watch-create-isolation-none` (Antoine du Hamel) [#&#8203;66041](https://github.com/nodejs/node/pull/66041)
- \[[`1019f624f3`](https://github.com/nodejs/node/commit/1019f624f3)] - **test**: deflake util.throttle tests (Filip Skokan) [#&#8203;66034](https://github.com/nodejs/node/pull/66034)
- \[[`b4a6719f37`](https://github.com/nodejs/node/commit/b4a6719f37)] - **(SEMVER-MINOR)** **test**: expand histogram test coverage (James M Snell) [#&#8203;65825](https://github.com/nodejs/node/pull/65825)
- \[[`047d7c53d2`](https://github.com/nodejs/node/commit/047d7c53d2)] - **test**: implement low-risk test optimizations (James M Snell) [#&#8203;65926](https://github.com/nodejs/node/pull/65926)
- \[[`33775d2bbb`](https://github.com/nodejs/node/commit/33775d2bbb)] - **test**: prevent parser reuse across close scenarios (Filip Skokan) [#&#8203;66017](https://github.com/nodejs/node/pull/66017)
- \[[`b8c5283cbc`](https://github.com/nodejs/node/commit/b8c5283cbc)] - **test**: fix stderr Buffer assertion in exec encoding test (greenhead) [#&#8203;66008](https://github.com/nodejs/node/pull/66008)
- \[[`13a2982002`](https://github.com/nodejs/node/commit/13a2982002)] - **test**: improve sequential test performance (James M Snell) [#&#8203;65928](https://github.com/nodejs/node/pull/65928)
- \[[`a578933da0`](https://github.com/nodejs/node/commit/a578933da0)] - **test**: overlap SLH-DSA signature checks (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`bfdf20729d`](https://github.com/nodejs/node/commit/bfdf20729d)] - **test**: unref cancelled broadcast source timer (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`b29154d471`](https://github.com/nodejs/node/commit/b29154d471)] - **test**: collect timeout signals explicitly (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`384d4fe3ea`](https://github.com/nodejs/node/commit/384d4fe3ea)] - **test**: skip retries in DNS timeout coverage (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`c7323843f4`](https://github.com/nodejs/node/commit/c7323843f4)] - **test**: synchronize ordered runner events (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`625290573a`](https://github.com/nodejs/node/commit/625290573a)] - **test**: avoid idle HTTP/HTTPS connections (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`2bde68398f`](https://github.com/nodejs/node/commit/2bde68398f)] - **test**: close WebAssembly test HTTP servers (Filip Skokan) [#&#8203;65980](https://github.com/nodejs/node/pull/65980)
- \[[`4c702e401b`](https://github.com/nodejs/node/commit/4c702e401b)] - **test**: deflake node-api test-free-called (Christian Aurich) [#&#8203;65948](https://github.com/nodejs/node/pull/65948)
- \[[`0b6d945ebc`](https://github.com/nodejs/node/commit/0b6d945ebc)] - **test**: skip C++ symbols in tick-processor-arguments (Philipp Dunkel) [#&#8203;65906](https://github.com/nodejs/node/pull/65906)
- \[[`e04210b383`](https://github.com/nodejs/node/commit/e04210b383)] - **test**: try fixing windows build replacing WMIC (James M Snell) [#&#8203;65949](https://github.com/nodejs/node/pull/65949)
- \[[`aed73444de`](https://github.com/nodejs/node/commit/aed73444de)] - **test**: fix flaky cleanup in http2 test (Tim Perry) [#&#8203;65701](https://github.com/nodejs/node/pull/65701)
- \[[`22f47ff728`](https://github.com/nodejs/node/commit/22f47ff728)] - **test**: update WPT WebCrypto, WebIDL and interfaces (Filip Skokan) [#&#8203;65679](https://github.com/nodejs/node/pull/65679)
- \[[`f2af511a24`](https://github.com/nodejs/node/commit/f2af511a24)] - **test**: zero-fill buffers before the string length limit check (Christian Aurich) [#&#8203;65755](https://github.com/nodejs/node/pull/65755)
- \[[`a28aad9960`](https://github.com/nodejs/node/commit/a28aad9960)] - **test**: update WPT for url to [`c23755a`](https://github.com/nodejs/node/commit/c23755a144) (Node.js GitHub Bot) [#&#8203;65651](https://github.com/nodejs/node/pull/65651)
- \[[`ba65bb149a`](https://github.com/nodejs/node/commit/ba65bb149a)] - **test**: fix recursive fs.watch error fixture (Filip Skokan) [#&#8203;65683](https://github.com/nodejs/node/pull/65683)
- \[[`f3b9f132b1`](https://github.com/nodejs/node/commit/f3b9f132b1)] - **test**: update streams WPT (Jeong SeokChan) [#&#8203;65638](https://github.com/nodejs/node/pull/65638)
- \[[`d2e0f2d3bd`](https://github.com/nodejs/node/commit/d2e0f2d3bd)] - **test**: deflake fastutf8stream destroy and reopen tests (Christian Aurich) [#&#8203;65554](https://github.com/nodejs/node/pull/65554)
- \[[`7b5896c136`](https://github.com/nodejs/node/commit/7b5896c136)] - **test**: cover Readable.from() sync iterator errors (jakecastelli) [#&#8203;65515](https://github.com/nodejs/node/pull/65515)
- \[[`66eafad642`](https://github.com/nodejs/node/commit/66eafad642)] - **test**: document WPT runner workflows (Filip Skokan) [#&#8203;65510](https://github.com/nodejs/node/pull/65510)
- \[[`2e2dc0f556`](https://github.com/nodejs/node/commit/2e2dc0f556)] - **test**: simplify test-worker-heap-profile.js (Donghoon Kang) [#&#8203;65372](https://github.com/nodejs/node/pull/65372)
- \[[`2e57caac46`](https://github.com/nodejs/node/commit/2e57caac46)] - **test**: prefer in-memory databases in sqlite tests (Paul Bouchon) [#&#8203;64701](https://github.com/nodejs/node/pull/64701)
- \[[`cef908596e`](https://github.com/nodejs/node/commit/cef908596e)] - **test**: fix typo from funciton to function (parkhojeong) [#&#8203;63403](https://github.com/nodejs/node/pull/63403)
- \[[`4c7bbd4182`](https://github.com/nodejs/node/commit/4c7bbd4182)] - **test**: widen the gap in the resolver maxTimeout comparison (Shelley Vohr) [#&#8203;65780](https://github.com/nodejs/node/pull/65780)
- \[[`25c81c9eff`](https://github.com/nodejs/node/commit/25c81c9eff)] - **test**: fix the thread-spawn handshake in the WASI threads fixture (Shelley Vohr) [#&#8203;65780](https://github.com/nodejs/node/pull/65780)
- \[[`cab5dcedbe`](https://github.com/nodejs/node/commit/cab5dcedbe)] - **test**: only count restarts after the write in watch emit-restarted test (Shelley Vohr) [#&#8203;65780](https://github.com/nodejs/node/pull/65780)
- \[[`db0ca93e94`](https://github.com/nodejs/node/commit/db0ca93e94)] - **test**: ignore tunnel resets in proxy invalid-char-in-url test (Shelley Vohr) [#&#8203;65780](https://github.com/nodejs/node/pull/65780)
- \[[`1f0087040a`](https://github.com/nodejs/node/commit/1f0087040a)] - **test**: handle EPIPE in closed channel test (Christian Aurich) [#&#8203;65770](https://github.com/nodejs/node/pull/65770)
…
jkleinsc pushed a commit to electron/electron that referenced this pull request Oct 29, 2026
Node.js 26 writes files (fs.writeFile, fs.appendFile and their
fsPromises versions) with a native WriteFileJob, and copies directory
trees for fs.cp() / fsPromises.cp() with a native CpDirJob, instead of
going through binding.open() and the fs.promises walk the asar wrapper
already handles. Writes into archives therefore failed with ENOTDIR
instead of EACCES (and missed unpacked entries), and fs.cp() of an
archive directory failed with ENOTDIR.

Give binding.WriteFileJob the same archive checks as open(), wrap
fs.writeFile() for archive paths since lib/fs.js captured the native
job at startup, and copy archive trees for CpDirJob with the walk
cpSync() already uses, which now also stamps directories with
preserveTimestamps like the native walk.

Ref: nodejs/node#65489
Ref: nodejs/node#65488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU
jkleinsc pushed a commit to electron/electron that referenced this pull request Oct 29, 2026
The asar wrapper replaced fsPromises.stat() and fsPromises.lstat() with
promisified callback versions for every path, so they ran as callback
requests (FSREQCALLBACK) instead of fsPromises' own. Node.js 26's
fsPromises.cp() checks its paths with them before handing the copy to a
native job, and parallel/test-fs-cp-async-destination-appears-late
tells the two apart. Use the wrapper only for paths inside archives.

Ref: nodejs/node#65488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU
jkleinsc pushed a commit to electron/electron that referenced this pull request Oct 30, 2026
nodejs/node#65488 (fs: copy directory trees for fs.cp() on the thread
pool) made fs.cp() and fsPromises.cp() copy a new destination directory
with a native CpDirJob. The job walks the tree on the thread pool and
calls ondone once. Electron's override for archive sources ran the
synchronous fs.cpSync() walk in a single process.nextTick, so an
asynchronous cp of a directory out of an archive blocked the event loop
until the whole tree had been copied.

Give the job an asynchronous version of the walk. It goes through the
fs.promises overrides, so packed files use the existing asynchronous
copyFile path, and it keeps the same ordering, force/errorOnExist,
symlink and preserveTimestamps handling and errors as the sync walk.
The job still reports through ondone exactly once. fs.cpSync() keeps
the synchronous walk.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU
MarshallOfSound pushed a commit to electron/electron that referenced this pull request Oct 30, 2026
* chore: bump node in DEPS to v26.12.1

* chore: bump node in DEPS to v26.13.0

* fix(patch): build: add simdutf dir to include path in GN build

Keep upstream's simdutf include dir in the node_js2c include_dirs and
add "tools" next to it. The patch's FixedArray::Get(context, i) change
in node_builtins.cc is no longer needed: upstream made the same change
in nodejs/node#61898.

Ref: nodejs/node#65382

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): vfs: integrate with CJS and ESM module loaders

Upstream moved the native legacyMainResolve call from esm/resolve.js
into the loaderMethods table in internal/modules/helpers.js, so pass the
asar-aware fileExists callback from there instead.

Ref: nodejs/node#63653

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): src: let embedders supply a builtin code cache without a snapshot

BuiltinLoader::RefreshCodeCache() now merges with insert_or_assign
upstream, so drop that hunk from the patch.

Ref: nodejs/node#65352

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): src: move import.meta initializer to native land

PathHelpersLazyGetter moved from node_modules.cc to module_wrap.cc and
gained a sibling ImportMetaResolveLazyGetter; switch both to Holder().
Also follow the DatabaseSyncLimits -> DatabaseLimits rename in
node_sqlite.cc (nodejs/node#65988) and the
Null(isolate) cleanup in node_constants.cc
(nodejs/node#59805).

Ref: nodejs/node#60603

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): src: fix usage of deprecated V8 API

Upstream switched to Get/SetContinuationPreservedEmbedderDataV2(), which
Chromium's V8 marks deprecated in favor of the unsuffixed names. Use the
unsuffixed getter and setter.

Ref: nodejs/node#60174

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): src: rename legacy trace event headers

The TRACING_CATEGORY_NODE* macros moved from node_internals.h to
tracing/trace_event.h, so define NODE_TRACE_CATEGORY_ENABLED there.
Agent::CreateDefault() picks the legacy agent again when V8_USE_PERFETTO
is unset (nodejs/node#64053), so only the
Perfetto branch is gated on NODE_USE_PERFETTO_SDK.

node.gyp now lists the Perfetto sources in
node_tracing_perfetto_sources. Add them, with V8's tracing target and
config, to the GN libnode target. The removed perfetto backport patch
used to carry that wiring.

Ref: nodejs/node#64565

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): src: let embedders exempt linked bindings from the addon permission

Upstream added EnvironmentFlags::kNoAddonPermissionForLinkedBindings
around the same check. Keep the electron_* exemption alongside it and
note in the patch description that the patch can be dropped once
Electron sets the new flag.

Ref: nodejs/node#66067

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* chore: remove upstreamed patches

* support_v8_sandboxed_pointers.patch
  Ref: nodejs/node#62237
* refactor_attach_cppgc_heap_on_v8_isolate_creation.patch
  Ref: nodejs/node#58070
* test_accomodate_v8_thenable_stack_trace_change_in_snapshot.patch
  Ref: nodejs/node#59805
* api_remove_deprecated_getisolate.patch
  Ref: nodejs/node#59805
  Ref: nodejs/node#60223
* api_delete_deprecated_fields_on_v8_isolate.patch
  Ref: nodejs/node#60488
* api_promote_deprecation_of_v8_context_and_v8_object_api_methods.patch
  Ref: nodejs/node#60602
* src_refactor_module_wrap_cc_to_update_fixedarray_get_params.patch
  Ref: nodejs/node#61898
* src_refactor_wasmstreaming_finish_to_accept_a_callback.patch
  Ref: nodejs/node#61898
* src_stop_using_v8_propertycallbackinfo_t_this.patch
  Ref: nodejs/node#61898
* fix_add_externalpointertypetag_to_v8_external_api_calls.patch
  Ref: nodejs/node#61898
* src_stop_using_removed_v8_promise_reject_events.patch
  Ref: nodejs/node#62336
* src_backport_the_perfetto_trace_agent.patch
  Ref: nodejs/node#64565
  Ref: nodejs/node#64721
* test_account_for_libc_rm_error_on_electron_linux.patch
  Ref: nodejs/node#66065
* fix_do_not_pass_removed_jspi_v8_flag.patch
  Ref: nodejs/node#60014
* test_drop_removed_wasm_rab_integration_flag.patch
  The v26 version of nodejs/node#65845 never
  added the flag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* chore: update patches (trivial only)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* chore: bump @types/node to v26

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* chore: update filenames.auto.gni

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* chore: remove deleted specs

Upstream deleted parallel/test-promise-swallowed-event and
parallel/test-warn-multipleResolves when the multipleResolves event
reached end-of-life.

Ref: nodejs/node#58707

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: clear crash dumps with fs.rmSync instead of recursive rmdir

Node.js v25 moved the fs.rmdir recursive option to end-of-life, so
fs.rmdirSync(dir, { recursive: true }) now throws and @types/node v26
no longer accepts the option.

Ref: nodejs/node#58616

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: listen on IncomingMessage unions through EventEmitter

With @types/node v26, http.IncomingMessage declares typed `on`
overloads that do not unify with Electron.IncomingMessage's, so
collectStreamBodyBuffer() no longer type-checks when calling `on` on
the union.

Ref: Unable to locate reference

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: pass an ArrayBuffer-backed view to subtle.digest in asar wrapper

@types/node v26 types webcrypto's BufferSource as views over an
ArrayBuffer only, so a Uint8Array<ArrayBufferLike> no longer
type-checks. Archive reads never use a SharedArrayBuffer, so narrow the
type at the call site.

Ref: Unable to locate reference

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* node#64565: src: rename legacy trace event headers

Node.js renamed src/tracing/trace_event_common.h to trace_event_legacy.h
and moved the legacy trace macros out of trace_event.h into
trace_event_legacy_inl.h, so feed both to electron_generate_node_defines
instead of the removed header. The generated push/undef set matches the
previous one apart from header guards, NODE_TRACE_CATEGORY_ENABLED and
INTERNAL_DECLARE_SET_TRACE_VALUE_INT, which Node.js no longer defines.

Ref: nodejs/node#64565

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): src: add perfetto trace agent

Upstream's trace_event_perfetto.h includes the amalgamated "perfetto.h"
SDK header, which Chromium's Perfetto does not provide, so libnode fails
to compile. Include the Perfetto public headers Chromium ships instead
(as the removed backport patch did), add the tracing/trace_config
includes agent_perfetto.h relied on, and skip Node's TrackEvent category
definitions when Chromium's built-in categories are already in scope.

Ref: nodejs/node#64565

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): src: handle indexed properties in `process.env`

Upstream added indexed interceptors for process.env. Migrate the new
EnvSetterIndexed and EnvDefinerIndexed callbacks to
PropertyCallbackInfo<Boolean> like their named counterparts, since
Chromium's V8 only accepts the Boolean-returning indexed setter and
definer callbacks.

Ref: nodejs/node#60826

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: read the whole heap snapshot stream

Since Node.js 26, readable.read() returns one buffered chunk at a time
instead of concatenating everything buffered, so takeHeapSnapshot()
parsed only the first 64 KiB of the snapshot. Read readableLength bytes,
as upstream test/common/heap.js now does.

Ref: nodejs/node#60441

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: use --trace-warnings in the node-options-parsing crash case

Node.js 26 throws ERR_MISSING_OPTION('--permission') when a boolean
permission flag such as --allow-addons is set without --permission
(previously only the fs flags were checked), so the utility process in
this fixture exited before reaching options.js. Repeat --trace-warnings
instead; the case still checks that disallowed NODE_OPTIONS are stripped
from a list with repeated options.

Ref: nodejs/node#62072

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): restore user timing trace events

The usertiming.js hunk that emits node.perf.usertiming trace events for
performance.mark() and performance.measure() lived in the perfetto
backport patch, which was removed as upstreamed. Upstream Node.js never
had it (Electron added it in #50591), so carry it in
fix_use_embedder_perfetto_client_when_available.patch.

Ref: #50591

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: trigger the V8 sandbox fatal error from V8 directly

Since Node.js 26, node::Buffer::New() copies memory allocated outside
the V8 sandbox into it instead of handing it to
v8::ArrayBuffer::NewBackingStore(), so the external-ab addon no longer
crashed the utility process and "emits 'error' when fatal error is
triggered from V8" timed out. Call NewBackingStore() from the addon so
the same v8_ArrayBuffer_NewBackingStore fatal error is still raised.

Ref: nodejs/node#62237

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: delete directories with rm instead of recursive rmdir

Node.js 26 removed the recursive option of fs.rmdir(), fs.rmdirSync()
and fsPromises.rmdir() (DEP0147), so they now throw
ERR_INVALID_ARG_VALUE. Use rmSync() and promises.rm(), and put an
archive in the directory so the tests delete what their titles say.

Ref: nodejs/node#58616

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* node#64894: worker: add support for Web Workers

Node.js 26 adds a Web Worker API and its pre-execution deletes
globalThis.Worker unless --experimental-web-worker is set, without
checking noBrowserGlobals, so renderers and web workers with Node
integration lost Blink's Worker. Pass the flag in those processes, as
is already done for --experimental-eventsource; Node's own Worker is not
installed under kNoBrowserGlobals.

Ref: nodejs/node#64894

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* node#61803: module: remove --experimental-transform-types

Node.js 26 removed the flag, so passing it now fails with "bad option"
(exit code 9). Stop forwarding it to Node.js, drop it from the
command-line switch docs, document the removal as a 46.0 breaking
change, and remove the spec and fixture that exercised it. The spec
that checks TypeScript-only syntax is not transformed stays.

Ref: nodejs/node#61803

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* node#65589: src: disable V8 external memory reasonable size check

Node.js now passes --external-memory-max-reasonable-size=0 to V8 in
every process that initializes it, which changes FlagList::Hash() and
so the code-cache key. Add the flag to the build-time js2c code cache
flavors that initialize Node.js and to electron_xcache's default flags,
so their caches keep being accepted (xcache.spec.ts failed on the flag
hash).

Ref: nodejs/node#65589

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: route Node.js 26's one-shot fs jobs through the asar wrapper

Node.js 26 writes files (fs.writeFile, fs.appendFile and their
fsPromises versions) with a native WriteFileJob, and copies directory
trees for fs.cp() / fsPromises.cp() with a native CpDirJob, instead of
going through binding.open() and the fs.promises walk the asar wrapper
already handles. Writes into archives therefore failed with ENOTDIR
instead of EACCES (and missed unpacked entries), and fs.cp() of an
archive directory failed with ENOTDIR.

Give binding.WriteFileJob the same archive checks as open(), wrap
fs.writeFile() for archive paths since lib/fs.js captured the native
job at startup, and copy archive trees for CpDirJob with the walk
cpSync() already uses, which now also stamps directories with
preserveTimestamps like the native walk.

Ref: nodejs/node#65489
Ref: nodejs/node#65488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): do not leak NodePlatform's default TracingController

The NodePlatform hunk that owns the v8::TracingController it creates
when the embedder passes none lived in the perfetto backport patch,
which was removed as upstreamed, but upstream still allocates it with a
bare new. With the perfetto agent, ELECTRON_RUN_AS_NODE passes no
controller, so LeakSanitizer failed every run-as-node spec on ASan
builds. Carry the hunk in
fix_use_embedder_perfetto_client_when_available.patch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: keep fsPromises.stat() and lstat() native outside archives

The asar wrapper replaced fsPromises.stat() and fsPromises.lstat() with
promisified callback versions for every path, so they ran as callback
requests (FSREQCALLBACK) instead of fsPromises' own. Node.js 26's
fsPromises.cp() checks its paths with them before handing the copy to a
native job, and parallel/test-fs-cp-async-destination-appears-late
tells the two apart. Use the wrapper only for paths inside archives.

Ref: nodejs/node#65488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: match Node.js 26 recursive readdir in the asar wrapper

Node.js 26 accepts Buffer paths for recursive readdir, keeps parentPath
a Buffer for them and for the 'buffer' encoding, and walks the tree
breadth-first, following links to directories without stat()ing every
entry. The asar wrapper's own walks (which also descend into archives)
broke on Buffer paths and differed in order and parentPath, failing the
new parallel/test-fs-readdir-recursive-* tests. Replace the three walks
with one breadth-first walk shaped like Node's, which still lists and
descends into archives as directories, and lets errors from any
directory reach the caller.

Ref: nodejs/node#65487

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* node#66138: src: add --process-timeout=N

Node.js starts the --process-timeout watchdog in
NodeMainInstance::Run(), which ELECTRON_RUN_AS_NODE does not use, so
the option was accepted but never applied: parallel/test-process-timeout-*
failed, and the fixtures that block the main thread hung the Node.js
test job until it was cancelled. Start and stop the watchdog around the
event loop in NodeMain() the same way.

Ref: nodejs/node#66138

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: close the FileHandle in the stale asar descriptor spec

Node.js 26 made closing a FileHandle on garbage collection an error
(DEP0137 end-of-life). The 'handle' variant of "does not capture a
descriptor number that was closed behind its back" dropped its
FileHandle, so the renderer running the asar specs later died with an
uncaught ERR_INVALID_STATE and every remaining asar spec failed with
"Render frame was disposed". Close the handle like the other variants
close their descriptors.

Ref: nodejs/node#58536

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: allow ArrayBuffers above 2 GiB in Node.js-enabled isolates

Node.js 26 allocates Buffer.allocUnsafe(), Buffer.allocUnsafeSlow() and
the copies made by AdoptIntoBackingStore() through the isolate's
ArrayBuffer::Allocator (nodejs/node#61480, nodejs/node#62237). Electron's
sandboxed-pointers patch for Node.js 24 sent those through
ArrayBuffer::Allocator::NewDefaultAllocator() instead, which reaches
Electron's in-sandbox allocator, and that serves requests beyond
PartitionAlloc's single-allocation cap (2 GiB - 2 MiB) from sandbox
pages. The isolates of the browser process, the utility-process node
service and ELECTRON_RUN_AS_NODE use gin's ArrayBufferAllocator, which
has no such fallback, so with Node.js 26 a Buffer.allocUnsafe() of more
than 2 GiB - 2 MiB in those processes failed with
ERR_MEMORY_ALLOCATION_FAILED, where Electron 45 and 46 allowed up to
32 GiB - 1 (parallel/test-fs-write-buffer-large).

Give those isolates an allocator that delegates to gin's partition up to
the cap and serves larger requests from sandbox pages, sharing the page
bookkeeping with the in-sandbox allocator. Buffer.alloc() and
new ArrayBuffer() above the cap now work there as well. The page map is
only locked while a page allocation is live. Renderers are unaffected:
Blink's isolate allocator already allows giga allocations.

Ref: nodejs/node#61480

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: include node_watchdog.h only where --process-timeout is wired

node_watchdog.h chooses between its POSIX and Windows members with
Node's __POSIX__ define, which Node's own targets set but Electron's do
not, so including it from node_includes.h broke every electron_lib
source on Linux ("unknown type name 'BOOL'"). Include it in node_main.cc
alone, with __POSIX__ set around it on POSIX so the class matches Node's
own build.

Ref: nodejs/node#66138

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: let Node.js 26's virtual file system answer recursive readdir

Node.js 26 adds an experimental virtual file system that fs functions
consult (vfsState.handlers) before the real one. The asar wrapper walks
recursive readdir itself and never asked it, so with a VFS mounted
fs.readdir(..., { recursive: true }) and its sync and promise forms
listed the real path behind the mount (parallel/test-vfs-reserved-root,
parallel/test-vfs-zip-provider-readdir-recursive failed with ENOTDIR).
Ask the VFS first, as Node does.

Ref: nodejs/node#63537

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: do not log terminated Electron init scripts as errors

CompileAndCall() logged an error whenever running one of Electron's
bundled init scripts threw, including when execution was terminated
because the environment was being torn down. A Worker that is stopped,
or whose process exits, while it is still bootstrapping is not an
error. On Node.js 26 the unref()'d Worker spawned by
module-hooks/test-async-loader-hooks-with-worker-permission-allowed
reaches that point while node_init runs, and the log line broke the
test's empty-stderr check. Only log real exceptions.

Ref: Unable to locate reference

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix(patch): expect the Wasm Global setter WPT to pass with Chromium V8

Chromium's V8 passes "Calling setter without argument" in the Wasm
jsapi WPT global/value-get-set.any.js, which Node's own V8 still fails
and lists as an expected failure, so the run failed on an unexpected
pass.

Ref: Unable to locate reference

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: honor --no-node-snapshot under ELECTRON_RUN_AS_NODE

ELECTRON_RUN_AS_NODE accepted --no-node-snapshot but always created its
isolate from the embedded Node startup snapshot, and Node worker
threads inherit that snapshot from their parent. Since Node.js 26 a
worker deserializes the whole bootstrapped context from it, so
parallel/test-worker-nearheaplimit-deadlock, which passes
--no-node-snapshot so that its 0 MB-heap worker does not run out of
memory during that deserialization, crashed with SIGSEGV. Skip the
snapshot when Node's options turn it off, as node::Start() does; the
process then boots from the V8 context snapshot like a build without a
Node snapshot. The browser process and the node service parse Node's
options only after creating their isolate, so they are unaffected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* build: fetch Perfetto trace_processor_shell for the Node.js tests

nodejs/node#66068 (test: enable trace_events tests with perfetto) moved
the trace_events tests from test/parallel into a new test/trace_events
suite. When Node.js is built with Perfetto (process.config.variables
.v8_use_perfetto, which Electron's build sets), those tests write binary
.pftrace files and convert them back to JSON with Perfetto's
trace_processor_shell, through test/common/trace_events.js. Without the
tool, all 17 trace_events/* tests in nn-test fail with
"trace_processor_shell is missing".

The same PR added tools/perfetto/get_trace_processor, which upstream's
Makefile and CI use to fetch it. Run that script in the Node.js test job.
It downloads the Perfetto release matching the vendored
deps/perfetto/VERSION (v58.2) from Perfetto's GitHub releases to
tools/perfetto/trace_processor_shell, which is the default path the test
helper resolves, so TRACE_PROCESSOR_SHELL_PATH is not needed. Cache the
binary keyed on that VERSION file. Upstream pins only the version, not a
checksum.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: disable Node.js source phase import and process-timeout report tests

Electron always passes --no-js-source-phase-imports. In renderers Blink
owns that V8 flag and freezes it before Node.js starts, and the other
process types match it, so the flag is consistent across processes and
the embedded code cache, which is keyed on V8's flag hash, stays valid.
nodejs/node#60364 made Node.js honour that opt-out instead of always
enabling the flag. The es-module/test-esm-wasm-*source-phase* tests are
already disabled for the same reason. Node.js 26 brings more tests that
need source phase imports:

- es-module/test-esm-wasm-jitless (nodejs/node#66533) calls
  import.source() and fails with "SyntaxError: Unexpected identifier
  'source'".
- The wasm/jsapi WPT suite, test/wpt/test-wasm-jsapi.mjs
  (nodejs/node#59034), is new to Electron with this upgrade. Its
  esm-integration/source-phase*.tentative cases use import.source() and
  fail with the same SyntaxError. Its module/moduleSource.tentative cases
  expect the %AbstractModuleSource% intrinsic, which V8 only installs
  when the flag is on. Each case runs as an .any.html and an .any.worker.html
  variant, so that is 8 entries.

nodejs/node#66138 added --process-timeout and
report/test-report-process-timeout. nodejs/node#66428 split out
report/test-report-process-timeout-worker. Both validate the generated
report with test/common/report.js, which expects
header.componentVersions to equal process.versions. In Electron,
process.versions also has chrome and electron, so the comparison fails.
The other report tests that use this helper are already disabled for
the same reason. The process timeout itself works, and both tests get
as far as the report check.

The WPT cases are listed as wpt/<test file>/<case id>, which is how
tools/test.py names them and matches --skip-tests. Teach
--validateDisabled to check the test file for these entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: resolve V8's NewBackingStore by Electron's export name on Windows

The external-ab addon now calls v8::ArrayBuffer::NewBackingStore()
itself, but on Windows it is built with MSVC's standard library while
Electron is built with Chromium's libc++, and MSVC mangles return types
into symbol names. electron.exe exports the function as returning
std::__Cr::unique_ptr, so the addon's import of the std::unique_ptr
variant never resolved, the utility process died without a V8 fatal
error and "emits 'error' when fatal error is triggered from V8" timed
out on windows-x64. Look the function up by Electron's exported name
there instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: only reference std-free V8 exports from the external-ab addon

On macOS and Linux the addon is built against a different libc++ ABI
namespace than Electron's std::__Cr, so v8::ArrayBuffer::New(isolate,
std::shared_ptr<BackingStore>) is an import that cannot bind. It only
went unnoticed because NewBackingStore() raises the fatal error first.
Stop after NewBackingStore(), whose mangled name has no standard
library types, and throw if it ever returns, as on Windows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* Revert "build: fetch Perfetto trace_processor_shell for the Node.js tests"

This reverts commit 8920a7c.

Node.js uses trace_processor_shell only to read back the trace file that
a process started with --trace-event-categories writes. Electron never
writes that file: Chromium owns tracing, and Electron does not start
Node.js's file-based tracing agent. Every trace_events/* test fails
before it reaches trace_processor_shell, because no trace file exists
or, in test-trace-events-api, because getEnabledCategories() is
undefined in the child. Those tests are disabled again in the next
commit, so no Node.js test needs trace_processor_shell, and downloading
it would only add a network fetch to the job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: disable the Node.js trace_events tests in their new directory

nodejs/node#66068 (test: enable trace_events tests with perfetto) moved
17 test-trace-events-* tests out of test/parallel into a new
test/trace_events suite. That took them out from under Electron's
"parallel/test-trace-events" entry, which --skip-tests matches as a
substring. Electron has never run these tests. They were disabled one by
one when Electron started running the Node.js tests (1d06f67) and
folded into the parallel/ prefix in #49467.

They start Node.js with --trace-event-categories and read back the trace
file it writes. Electron does not start Node.js's file-based tracing
agent, because Chromium owns tracing, so no trace file is ever written.
In nn-test, all 17 fail on a missing trace file, and
test-trace-events-api also finds getEnabledCategories() undefined in its
child.

Add the matching "trace_events/test-trace-events" prefix. It covers all
17 files in test/trace_events. Keep the parallel/ entry, which still
matches the 13 test-trace-events-* tests that stayed in test/parallel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: copy directory trees out of archives without blocking fs.cp()

nodejs/node#65488 (fs: copy directory trees for fs.cp() on the thread
pool) made fs.cp() and fsPromises.cp() copy a new destination directory
with a native CpDirJob. The job walks the tree on the thread pool and
calls ondone once. Electron's override for archive sources ran the
synchronous fs.cpSync() walk in a single process.nextTick, so an
asynchronous cp of a directory out of an archive blocked the event loop
until the whole tree had been copied.

Give the job an asynchronous version of the walk. It goes through the
fs.promises overrides, so packed files use the existing asynchronous
copyFile path, and it keeps the same ordering, force/errorOnExist,
symlink and preserveTimestamps handling and errors as the sync walk.
The job still reports through ondone exactly once. fs.cpSync() keeps
the synchronous walk.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: trigger the utility process V8 fatal error from the testing binding

The utilityProcess 'error' event from #43774 reports any V8 fatal error.
Its spec raised one with the external-ab native addon, which handed V8
memory from outside the sandbox. Node.js 26 makes every Buffer site
sandbox compatible, so that no longer happens through Node.js APIs. The
earlier commits on this branch made the addon call V8 directly, and
that needed ABI workarounds on Windows and for libc++.

As Deepak suggested in review, drop the addon and its workspace entries.
Add triggerV8FatalError() to the electron_common_testing binding, which
is only built when DCHECKs are on. It fails a V8 API check by setting an
internal field on a plain object, so it does not depend on the V8
sandbox. The spec keeps #43774's checks on the event type, location and
report trigger, also checks the report's event message, and now runs
wherever the testing binding exists, including Windows on Arm.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* test: wait for the utility process exit only after its 'error' event

events.once(emitter, 'exit') also listens for 'error' and rejects with
its first argument. The previous commit started waiting for 'exit'
before the 'error' event arrived, so the utility process's
'FatalError' rejected that promise and the spec failed with
"Unknown Error: FatalError". Wait for 'exit' after 'error' has been
received, as the spec from #43774 did.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* refactor: use one d8-style PartitionAlloc allocator inside the V8 sandbox

Following Deepak's review, replace the sandbox-page fallback added for
nodejs/node#61480 and the older InSandboxAllocator with a single
PAInSandboxAllocator, modelled on d8's.

nodejs/node#61480 moved Buffer.allocUnsafe() onto the isolate's
ArrayBuffer allocator. gin's partition caps a single allocation at
partition_alloc::MaxAllocationSize() (2 GiB - 2 MiB), so Buffers above
that size failed. The previous fix served those requests from whole
sandbox pages and tracked them in a separate map.

PAInSandboxAllocator owns a PartitionAlloc partition in the configurable
pool, which gin::V8Initializer::Initialize() places inside the V8
sandbox. The partition is created lazily, after the pool exists. It has
allow_giga_allocations set and allocates with kAllowGigaAllocations,
along with kNoOverrideHooks and kNoMemoryToolOverride, as gin does. A
single ArrayBuffer can therefore reach MaxGigaAllocationSize()
(16 GiB - 2 MiB on 64-bit) without the page fallback. It is both the
ArrayBuffer allocator for JavascriptEnvironment isolates and V8's
in-sandbox allocator, so Node.js worker_threads isolates use it through
NewDefaultAllocator(). Builds without the V8 sandbox keep gin's
allocator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

* fix: reject instead of throwing in asar fs.promises.stat/lstat wrappers

The new fs.promises.stat/lstat wrappers call splitPath() before deciding
whether to use fsPromises' own implementation. For a URL, splitPath()
runs getValidatedPath(), which throws for a non-file: URL, so the error
escaped synchronously instead of rejecting the returned promise as it did
with util.promisify(fs.stat) on main and as Node's fsPromises does. Make
the wrappers async so every input error rejects, and add a spec for it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vf2yMuJ7XxvNktpKuiMPzU

---------

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author ready PRs with CI started, the required approvals, and no outstanding review comments. c++ Issues and PRs that require attention from people who are familiar with C++. commit-queue-rebase PRs the Commit Queue should land as multiple self-contained commits. fs Issues and PRs related to file-system APIs and the fs module. needs-ci PRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants