0002. Node 26 floor with isolated-vm 7
- Status: accepted
- Date: 2026-07-18
Context
Section titled “Context”isolated-vm embeds V8 for this executor, as a native addon compiled against the host Node’s V8 headers. isolated-vm 6 does not install on Node 26; isolated-vm 7 does. That pairs the addon version and the runtime version into a single choice, not two independent ones.
An unsupported runtime is not a soft problem here. Native addons that install against the wrong V8 fail at the moment an isolate is created, deep inside a child process, a long way from the install that caused it. Failure has to arrive at install time. Otherwise it arrives at the worst time. The obvious enforcement does not work: engine-strict in .npmrc is npm’s setting, and pnpm 11 only warns on it.
Decision
Section titled “Decision”Node 26 is the floor for every part of the workspace that touches the isolate, paired with isolated-vm 7.
engines.nodeis">=26"on the root and on every project except the client package: that one is pure JavaScript for any runtime and stays engine-unrestricted.engineStrict: trueinpnpm-workspace.yamlturns an install on an older Node into a hardERR_PNPM_UNSUPPORTED_ENGINEfailure..nvmrcpins26so local shells and CI resolve the same major.- The daemon image is committed to a Node 26 base.
Consequences
Section titled “Consequences”Installing on Node 24 fails outright. It never produces a workspace that breaks later, somewhere unrelated. That pin is a property of the project, not of any machine, so no version manager is required beyond reading .nvmrc. CI installs Node from .nvmrc for the required verify lane, and it runs a second advisory lane on the latest Node. So a regression on a future major shows up as a warning long before it becomes a floor decision.
Consumers of the published executor inherit the floor through engines. But the client package deliberately does not, because it speaks the wire protocol from any JavaScript runtime and has no native dependency to compile. If the pairing ever fails a containment gate, the recorded fallbacks are Node 24 with isolated-vm 6, or the Deno path named in 0001.