From 4ba3f29b95d0cd548dfc67884c3b18e2e4681333 Mon Sep 17 00:00:00 2001 From: William Callahan Date: Sun, 1 Nov 2026 04:00:38 -0800 Subject: [PATCH 1/2] fix(frontend): reject an @types/node major that differs from the runtime verify-node-version.mjs held .nvmrc, the lockfile, the Dockerfile and the docs to engines.node but not the types, so a grouped bump left @types/node on 26 under a Node 24 runtime. It now fails when the @types/node major differs from the engines.node major. Agent-Session: f6561fed-d6d9-4fd1-a9d3-9db9f9613f55 --- frontend/scripts/verify-node-version.mjs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/scripts/verify-node-version.mjs b/frontend/scripts/verify-node-version.mjs index 3e62c412..2c0d5f0d 100644 --- a/frontend/scripts/verify-node-version.mjs +++ b/frontend/scripts/verify-node-version.mjs @@ -39,5 +39,11 @@ if (!dockerfile.includes(expectedDockerImage)) { if (!gettingStartedGuide.includes(expectedDocumentationVersion)) { throw new Error(`docs/getting-started.md must name ${expectedDocumentationVersion}`); } +// Types from a newer Node major type-check APIs this runtime lacks. +const nodeTypesMajor = frontendPackage.devDependencies?.["@types/node"]?.replace(/^[\^~]/, "").split(".")[0]; +const runtimeMajor = canonicalNodeVersion.split(".")[0]; +if (nodeTypesMajor !== undefined && nodeTypesMajor !== runtimeMajor) { + throw new Error(`frontend/package.json @types/node must stay on the Node ${runtimeMajor} major`); +} console.log(`Node ${canonicalNodeVersion} projections are synchronized.`); From 04355af036ad72b11a64c0bd630bf59c493beecc Mon Sep 17 00:00:00 2001 From: William Callahan Date: Sun, 1 Nov 2026 04:10:19 -0800 Subject: [PATCH 2/2] style(frontend): format the @types/node major check oxfmt --check rejected the single-line @types/node lookup added in 4ba3f29b, failing Build & Test run 41304637085; this applies the formatter. Agent-Session: f6561fed-d6d9-4fd1-a9d3-9db9f9613f55 --- frontend/scripts/verify-node-version.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/scripts/verify-node-version.mjs b/frontend/scripts/verify-node-version.mjs index 2c0d5f0d..494a00ab 100644 --- a/frontend/scripts/verify-node-version.mjs +++ b/frontend/scripts/verify-node-version.mjs @@ -40,7 +40,9 @@ if (!gettingStartedGuide.includes(expectedDocumentationVersion)) { throw new Error(`docs/getting-started.md must name ${expectedDocumentationVersion}`); } // Types from a newer Node major type-check APIs this runtime lacks. -const nodeTypesMajor = frontendPackage.devDependencies?.["@types/node"]?.replace(/^[\^~]/, "").split(".")[0]; +const nodeTypesMajor = frontendPackage.devDependencies?.["@types/node"] + ?.replace(/^[\^~]/, "") + .split(".")[0]; const runtimeMajor = canonicalNodeVersion.split(".")[0]; if (nodeTypesMajor !== undefined && nodeTypesMajor !== runtimeMajor) { throw new Error(`frontend/package.json @types/node must stay on the Node ${runtimeMajor} major`);