Node.js Closes Its Contested AI-Assisted Mega-PR After the Code Lands in Core, Then Codifies an AI Use Policy
Node.js closed the 19,000-line VFS pull request that split the project over AI-generated code, after its functionality shipped through smaller PRs and the TSC adopted a formal AI use policy.
Overview
Matteo Collina, the Node.js Technical Steering Committee member whose 19,000-line, Claude Code-assisted pull request to add a virtual file system to Node.js core triggered a project-wide fight over AI-generated code, has closed that pull request. “Closing this. Most of it has been implemented and it landed in core,” Collina wrote in the pull request on September 4, 2026. The functionality did not disappear — it shipped piece by piece through a series of smaller, separately reviewed pull requests, and the governance question the original PR forced open has since been answered with a formal, written policy rather than the up-or-down vote that was originally called for.
What We Know
- PR #61478, titled “Virtual File System for Node.js,” was opened by Collina on January 22, 2026, carrying the disclaimer: “I’ve used a significant amount of Claude Code tokens to create this PR. I’ve reviewed all changes myself.” Its own FAQ section justified the AI usage by pointing to scale: “No one tackled this problem before because of its sheer size. AI made it possible. Adding 164+ integrations points by hand is extremely laborious,” according to the pull request.
- Rather than merging the original PR wholesale, Collina extracted a stripped-down core into a new, separate pull request. “I’ve extracted https://github.com/nodejs/node/pull/63115 from this PR. It includes only the addition and no integration points,” he wrote in the original thread on May 6, 2026, according to the pull request.
- PR #63115, “vfs: add minimal node:vfs subsystem,” describes itself as adding “an experimental
node:vfsbuiltin (gated behind--experimental-vfs) withVirtualFileSystem,VirtualProvider,MemoryProvider, andRealFSProvider,” with integration intonode:fs, the module loader, and Single Executable Applications explicitly deferred to “follow-up PRs.” It merged on May 23, 2026, according to the pull request. - A follow-up, PR #63537, “vfs: dispatch fs/promises to mounted VFS instances,” merged May 29, 2026, adding “mount/unmount on
VirtualFileSystemplus a handler registry consulted bylib/fs.js,lib/internal/fs/promises.js, andlib/internal/fs/dir.js” so that “the publicfs.*andfs/promisesAPIs (sync, callback, promise, streams,fs.watch,opendir) dispatch to the mounted provider and fall through to the real filesystem otherwise,” according to the pull request. - Node’s official API documentation now lists a
node:vfsmodule at “Stability: 1 - Experimental,” with the notation “Added in: v26.4.0,” and states the module “is only available under thenode:scheme, and only when Node.js is started with the--experimental-vfsflag,” according to Node.js’snode:vfsdocumentation. - Node.js 26.4.0 itself shipped on June 24, 2026, according to the official release notes.
- Separately from the code, the governance question the PR forced open has been resolved through documentation rather than a floor vote. Node.js TSC member Matteo Collina opened nodejs/TSC issue #1831, “Vote on AI contributions,” on March 17, 2026, writing that the project should “schedule a vote” and that he was “working with the Board to provide a legal/high-ground answer to the question of the DCO’s compatibility with AI-assisted engineering.” Fellow TSC member James Snell replied the same day: “Agreed, let’s push it to a vote,” according to the issue.
- That vote never happened as a standalone up-or-down decision. Instead, on May 13, 2026, Node.js collaborator Joyee Cheung wrote in the same issue: “Switching label to https://github.com/nodejs/node/pull/62105,” redirecting the governance discussion to a documentation pull request already in progress, according to the issue.
- PR #62105, “doc: create ai-guidelines and include to CONTRIBUTING,” was opened by contributor RafaelGSS on March 4, 2026, with the note “As discussed in today’s TSC meeting.” It merged on August 12, 2026, according to the pull request.
- The resulting document,
doc/contributing/ai-guidelines.md, states the project’s position plainly: “The Node.js project does not prohibit the use of AI tools in contributions, but when the contribution is generated with AI, the contributor should disclose the use of such tools, and what the contributor does to personally verify the generated output,” according to the guidelines. - The guidelines set an explicit enforcement line: “Pull requests with AI-generated code that the contributor has not personally understood, tested, and verified waste collaborator time and will be subject to closure without additional review. Contributors who repeatedly submit such changes, show no understanding of the project or its processes, or are dishonest about the use of automated assistance may be blocked from further contributions,” according to the guidelines.
- The document also draws a specific carve-out for newcomer-labeled issues: “It’s prohibited to use AI to automate fixes to issues marked as ‘good first issue’. These issues are meant to help new human contributors, not an AI, learn about the code base and the contribution processes,” and it separately bars automated submissions outright: “Pull requests must not be opened by automated tooling, unless specifically approved in advance by the project,” according to the guidelines.
- The guidelines note their own lineage: “This document aligns with the OpenJS Foundation AI Coding Assistants Policy,” the same foundation policy Collina had pointed to in the TSC issue in March, according to the guidelines.
What We Don’t Know
The closed PR’s own thread and the merged guidelines document do not state what became of Fedor Indutny’s petition against AI-generated code in Node.js core, or whether Indutny — who was asked in the TSC discussion to formally register his objection through the standard “request changes” review mechanism — did so before the underlying functionality shipped. Neither source specifies whether every one of the original 164-plus interception points from PR #61478 has now landed in core through the smaller follow-up PRs, or whether some scope was dropped rather than merged. It also remains unclear whether any additional TSC discussion or informal consensus check preceded the closure of issue #1831, beyond the label switch to the guidelines PR recorded in the thread.
Analysis
The resolution charts a middle path between the two positions that defined the original controversy. Node.js did not adopt Fedor Indutny’s proposed blanket ban on AI-generated core contributions, nor did it simply wave through Collina’s 19,000-line PR as submitted. Instead, the functionality was broken into smaller, individually reviewable pull requests — the pattern several reviewers had asked for in the original thread — while the project separately wrote down, for the first time, what disclosure and verification AI-assisted contributors owe the codebase. The virtual file system itself remains behind an experimental flag, and continued to see active development as recently as Node.js 26.9.0 in September, which added VFS integration with Node’s CommonJS and ESM module loaders. Both threads — the code and the policy — took roughly seven months from the PR’s January opening to reach their present state, longer than the “binding vote” originally proposed for the spring, but arriving at an outcome that gives the wider open-source ecosystem a concrete, written reference point rather than a single project’s yes-or-no precedent.