net.SocketAddress and net.BlockList were refused at compile time. They are now native checked-dynamic handles in scr_net.c, so their getters and methods also work on untyped values, and they match Node 24: - new SocketAddress(options) checks the options in Node's order (ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE for the family, ERR_SOCKET_BAD_PORT, ERR_OUT_OF_RANGE for the flow label) and throws ERR_INVALID_ADDRESS for an address that does not parse. parse() reads URL.parse(`http://${input}`)'s hostname and port and answers undefined on failure; isSocketAddress(), toJSON() and util.inspect match. - BlockList takes address, range, subnet and CIDR rules (addAddress, addAddresses, addRange, addSubnet, addCIDR, addCIDRs), removes them (removeAddress, removeRange, removeSubnet, removeCIDR, clear) and lists them in Node's order: IPv4 addresses, IPv6 addresses, subnets, then ranges, each newest first, with a repeated address kept once. - check() compares across families through the IPv4-mapped IPv6 form, as Node's SocketAddress::compare and is_in_network do, and answers false for a string that does not parse in the given family. - rules, size, toJSON(), fromJSON() (Node's rule patterns), isBlockList(), PRIVATE_RANGES, instanceof and util.inspect match, with the validation errors of lib/internal/blocklist.js. Corpus 5659 and the node-types fixture net-blocklist.ts cover both classes. The compatibility registry lists the BlockList methods and SocketAddress.parse as supported, and both classes as partial: their structured clone and worker transfer forms are not modeled.
Node compatibility ledger
This workspace package owns scriptc's Node.js parity system.
node-v24.jsonpins the Node release tag, commit, and canonical docs/source inputs.static-support.jsonoverlays dedicated compiler paths and their internal test evidence on the compiler's generated surface manifest.generated/node-v24-internal.jsonis the engineering ledger, including implementation evidence and repository test paths.generated/node-v24-backlog.jsonis the internal tier-specific work queue. It separates verification, implementation, explicit-refusal replacement, and partial-surface audit work, and prioritizes stable Node APIs above experimental, deprecated, and legacy APIs.docs/src/generated/node-v24-compatibility.jsonis the stripped public artifact consumed by the docs website. It contains compiler-relevant runtime APIs, statuses, verification bases, and user-facing details; documentation, metadata, command-line/configuration entries, and rows that are N/A for native execution remain internal.
Statuses are evidence-aware: supported and partial require test evidence; refused requires an explicit compiler diagnostic or native throwing stub; not-implemented is the actionable backlog for an owned API family with no implementation match; by-design records an architectural exclusion; unreviewed still needs classification; and not-applicable is not a runtime API for that execution tier.
Run pnpm node-compat:backlog from the repository root for a summary. The filters --tier, --action, --priority, --chapter, and --status compose; use --format=json or --format=tsv for tooling.
Run pnpm node-compat from the repository root after changing the Node pin or the support manifest. pnpm node-compat:check is the offline drift/evidence gate; pnpm --filter @internal/compatibility check:upstream additionally verifies the pinned upstream inputs over the network.