From ac50c1872e12ea2c76fa3edd15ba23bf31678922 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 15:44:43 +0200 Subject: [PATCH 1/4] chore: align the toolchain across the estate One pnpm version (11.25.0) and Node 24 everywhere, and the two dead keys go: pnpm 11 replaced packageManagerStrict/packageManagerStrictVersion with pmOnFail and warned about them on every install, in twenty of twenty-four repositories. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 39c0e71..48e1b67 100644 --- a/package.json +++ b/package.json @@ -81,5 +81,5 @@ "engines": { "node": ">=24" }, - "packageManager": "pnpm@11.24.0" + "packageManager": "pnpm@11.25.0" } From e13b7403a565c889a839812d868a4ba9ef441fa5 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 16:31:22 +0200 Subject: [PATCH 2/4] chore!: move to pnpm 12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Rust rewrite, stable since 2026-08-26. Verified in kirchDev/workflows first: Dependabot reads the two-document lockfile pnpm 12 writes, installs 12.2.1 from the packageManager field itself, and produced a full dependency snapshot from it. None of pnpm 12's breaking changes apply here — no git dependency to re-resolve, --resolution-only used nowhere, Node 16 long gone. The lockfile diff is purely additive: pnpm records itself and its per-platform binaries, nothing else moves. BREAKING CHANGE: this repository now requires pnpm 12. --- package.json | 2 +- pnpm-lock.yaml | 101 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 48e1b67..7a4e37e 100644 --- a/package.json +++ b/package.json @@ -81,5 +81,5 @@ "engines": { "node": ">=24" }, - "packageManager": "pnpm@11.25.0" + "packageManager": "pnpm@12.2.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d199f08..89260ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,3 +1,104 @@ +--- +lockfileVersion: '9.0' + +importers: + + .: + configDependencies: {} + packageManagerDependencies: + pnpm: + specifier: 12.2.1 + version: 12.2.1 + +packages: + + '@pnpm/exe.darwin-arm64@12.2.1': + resolution: {integrity: sha512-efC1yfz2xbyHiMLrQAYtnoo5XP20LeAiYYcyL1962qQagZrMXIB0BoQYeZoPTLggLh0Q4MD7jpZUInU5fWxCgQ==} + cpu: [arm64] + os: [darwin] + + '@pnpm/exe.darwin-x64@12.2.1': + resolution: {integrity: sha512-0bloFmxrvYY5LYex5V6SZySwg+egBk0pOW+YUeOm9fiG2U1wv+qRVLBOUvIzLAeJE7vBlAzxUwXkQAYtr12n+Q==} + cpu: [x64] + os: [darwin] + + '@pnpm/exe.linux-arm64-musl@12.2.1': + resolution: {integrity: sha512-AZl7apVZC4TV1/vTp/bS16XUsHeqx9AHsU4V55joiGR+iR6vl+WF0WlGvGCTjqjICS4q/kThpgNrtG8aqQ9seQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-arm64@12.2.1': + resolution: {integrity: sha512-S36+tMEGrPz3nwtfFU9kYxbHoi8sV7WJfMO9njEL4jRaShTNaLRERMAqyI2DUCiA5QCr6/a50lt4+pKCV2mCvw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-x64-musl@12.2.1': + resolution: {integrity: sha512-4MQClkAk1em55LFZJpeIqb7j+gEqCgX8yC42j9DFWL42q1uMX1e1tvTy2Dtd4NoWQqgdkLxOStZ+D9CYC+28ow==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-x64@12.2.1': + resolution: {integrity: sha512-A/AlR71Leph7qgB3ThSU9yU/vLfre4HmP6nbt3/qt51fzAjQ0xuq7j+cw0f1yDskzOsGzmo5uD6ruefCwLK5uQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.win32-arm64@12.2.1': + resolution: {integrity: sha512-TEGUmroT6NGfo2O2+tHK9Zr1lhP1zLzpwx+QAQV19l8V4ljUoMfz8Os5V9zzNCtIpzyKcK7SuG7fkVbxFgRMzg==} + cpu: [arm64] + os: [win32] + + '@pnpm/exe.win32-x64@12.2.1': + resolution: {integrity: sha512-V2Q+AF8fCsw8/CC3bWF8kopOmH0aAjgk9m7H7uAQNulOYIJs9YJBiAlgByswmt+igV9axc4dBI//ZlK2NKpDcw==} + cpu: [x64] + os: [win32] + + pnpm@12.2.1: + resolution: {integrity: sha512-9Vymiqy561q2nGb4KKmK+JoyKGcDrvH42hMcp+q01nfzS/qF4YZGepGcB5nfi29KokD33CkZszsycxkBBBYmFg==} + engines: {node: '>=18.*'} + hasBin: true + +snapshots: + + '@pnpm/exe.darwin-arm64@12.2.1': + optional: true + + '@pnpm/exe.darwin-x64@12.2.1': + optional: true + + '@pnpm/exe.linux-arm64-musl@12.2.1': + optional: true + + '@pnpm/exe.linux-arm64@12.2.1': + optional: true + + '@pnpm/exe.linux-x64-musl@12.2.1': + optional: true + + '@pnpm/exe.linux-x64@12.2.1': + optional: true + + '@pnpm/exe.win32-arm64@12.2.1': + optional: true + + '@pnpm/exe.win32-x64@12.2.1': + optional: true + + pnpm@12.2.1: + optionalDependencies: + '@pnpm/exe.darwin-arm64': 12.2.1 + '@pnpm/exe.darwin-x64': 12.2.1 + '@pnpm/exe.linux-arm64': 12.2.1 + '@pnpm/exe.linux-arm64-musl': 12.2.1 + '@pnpm/exe.linux-x64': 12.2.1 + '@pnpm/exe.linux-x64-musl': 12.2.1 + '@pnpm/exe.win32-arm64': 12.2.1 + '@pnpm/exe.win32-x64': 12.2.1 + +--- lockfileVersion: '9.0' settings: From 097a03cdb357f820f89928578a6c5c66060d06e9 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 16:45:37 +0200 Subject: [PATCH 3/4] revert: go back to pnpm 11.25.0 kirchDev/app's dev deploy failed on the Forge server: .local/share/pnpm/.tools/pnpm/12.2.1/bin/pnpm: 4: Syntax error: ")" unexpected pnpm 12's launcher is not POSIX-sh compatible and the deploy runs it through the server's /bin/sh, which is dash. The pilot could not have caught this: the pilot repository has no deploy, so pnpm 12 was only ever proven against CI and Dependabot, never against a server. Reverted estate-wide rather than only where it broke: one version everywhere was the point, and a split is worse than either uniform state. --- package.json | 2 +- pnpm-lock.yaml | 101 ------------------------------------------------- 2 files changed, 1 insertion(+), 102 deletions(-) diff --git a/package.json b/package.json index 7a4e37e..48e1b67 100644 --- a/package.json +++ b/package.json @@ -81,5 +81,5 @@ "engines": { "node": ">=24" }, - "packageManager": "pnpm@12.2.1" + "packageManager": "pnpm@11.25.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 89260ba..d199f08 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,104 +1,3 @@ ---- -lockfileVersion: '9.0' - -importers: - - .: - configDependencies: {} - packageManagerDependencies: - pnpm: - specifier: 12.2.1 - version: 12.2.1 - -packages: - - '@pnpm/exe.darwin-arm64@12.2.1': - resolution: {integrity: sha512-efC1yfz2xbyHiMLrQAYtnoo5XP20LeAiYYcyL1962qQagZrMXIB0BoQYeZoPTLggLh0Q4MD7jpZUInU5fWxCgQ==} - cpu: [arm64] - os: [darwin] - - '@pnpm/exe.darwin-x64@12.2.1': - resolution: {integrity: sha512-0bloFmxrvYY5LYex5V6SZySwg+egBk0pOW+YUeOm9fiG2U1wv+qRVLBOUvIzLAeJE7vBlAzxUwXkQAYtr12n+Q==} - cpu: [x64] - os: [darwin] - - '@pnpm/exe.linux-arm64-musl@12.2.1': - resolution: {integrity: sha512-AZl7apVZC4TV1/vTp/bS16XUsHeqx9AHsU4V55joiGR+iR6vl+WF0WlGvGCTjqjICS4q/kThpgNrtG8aqQ9seQ==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@pnpm/exe.linux-arm64@12.2.1': - resolution: {integrity: sha512-S36+tMEGrPz3nwtfFU9kYxbHoi8sV7WJfMO9njEL4jRaShTNaLRERMAqyI2DUCiA5QCr6/a50lt4+pKCV2mCvw==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@pnpm/exe.linux-x64-musl@12.2.1': - resolution: {integrity: sha512-4MQClkAk1em55LFZJpeIqb7j+gEqCgX8yC42j9DFWL42q1uMX1e1tvTy2Dtd4NoWQqgdkLxOStZ+D9CYC+28ow==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@pnpm/exe.linux-x64@12.2.1': - resolution: {integrity: sha512-A/AlR71Leph7qgB3ThSU9yU/vLfre4HmP6nbt3/qt51fzAjQ0xuq7j+cw0f1yDskzOsGzmo5uD6ruefCwLK5uQ==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@pnpm/exe.win32-arm64@12.2.1': - resolution: {integrity: sha512-TEGUmroT6NGfo2O2+tHK9Zr1lhP1zLzpwx+QAQV19l8V4ljUoMfz8Os5V9zzNCtIpzyKcK7SuG7fkVbxFgRMzg==} - cpu: [arm64] - os: [win32] - - '@pnpm/exe.win32-x64@12.2.1': - resolution: {integrity: sha512-V2Q+AF8fCsw8/CC3bWF8kopOmH0aAjgk9m7H7uAQNulOYIJs9YJBiAlgByswmt+igV9axc4dBI//ZlK2NKpDcw==} - cpu: [x64] - os: [win32] - - pnpm@12.2.1: - resolution: {integrity: sha512-9Vymiqy561q2nGb4KKmK+JoyKGcDrvH42hMcp+q01nfzS/qF4YZGepGcB5nfi29KokD33CkZszsycxkBBBYmFg==} - engines: {node: '>=18.*'} - hasBin: true - -snapshots: - - '@pnpm/exe.darwin-arm64@12.2.1': - optional: true - - '@pnpm/exe.darwin-x64@12.2.1': - optional: true - - '@pnpm/exe.linux-arm64-musl@12.2.1': - optional: true - - '@pnpm/exe.linux-arm64@12.2.1': - optional: true - - '@pnpm/exe.linux-x64-musl@12.2.1': - optional: true - - '@pnpm/exe.linux-x64@12.2.1': - optional: true - - '@pnpm/exe.win32-arm64@12.2.1': - optional: true - - '@pnpm/exe.win32-x64@12.2.1': - optional: true - - pnpm@12.2.1: - optionalDependencies: - '@pnpm/exe.darwin-arm64': 12.2.1 - '@pnpm/exe.darwin-x64': 12.2.1 - '@pnpm/exe.linux-arm64': 12.2.1 - '@pnpm/exe.linux-arm64-musl': 12.2.1 - '@pnpm/exe.linux-x64': 12.2.1 - '@pnpm/exe.linux-x64-musl': 12.2.1 - '@pnpm/exe.win32-arm64': 12.2.1 - '@pnpm/exe.win32-x64': 12.2.1 - ---- lockfileVersion: '9.0' settings: From 590d1b73c68fed0d918f1556179ca5e83ac94356 Mon Sep 17 00:00:00 2001 From: Titus Kirch Date: Wed, 2 Sep 2026 17:10:12 +0200 Subject: [PATCH 4/4] chore!: move to pnpm 12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Rust rewrite, stable since 2026-08-26. kirchDev/app is deliberately excluded and stays on 11.25.0: it is the only repository in the estate that deploys to a server we run, and pnpm 12 breaks exactly that path. When pnpm provisions ITSELF from the packageManager field it follows the `bin` entry of the `pnpm` npm package, which ships a prose placeholder that a preinstall script is supposed to replace with the native binary — and no preinstall runs during that provisioning. The placeholder's fourth line ends in `)`, so dash reports `Syntax error: ")" unexpected`. Upstream: pnpm/pnpm#14346. Every other path is unaffected and was verified: corepack keeps its own cache and starts bin/pnpm.mjs through Node, pnpm/action-setup installs regularly with scripts, and Dependabot read the two-document lockfile and produced a full dependency snapshot from it. --- package.json | 2 +- pnpm-lock.yaml | 101 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 48e1b67..7a4e37e 100644 --- a/package.json +++ b/package.json @@ -81,5 +81,5 @@ "engines": { "node": ">=24" }, - "packageManager": "pnpm@11.25.0" + "packageManager": "pnpm@12.2.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d199f08..89260ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,3 +1,104 @@ +--- +lockfileVersion: '9.0' + +importers: + + .: + configDependencies: {} + packageManagerDependencies: + pnpm: + specifier: 12.2.1 + version: 12.2.1 + +packages: + + '@pnpm/exe.darwin-arm64@12.2.1': + resolution: {integrity: sha512-efC1yfz2xbyHiMLrQAYtnoo5XP20LeAiYYcyL1962qQagZrMXIB0BoQYeZoPTLggLh0Q4MD7jpZUInU5fWxCgQ==} + cpu: [arm64] + os: [darwin] + + '@pnpm/exe.darwin-x64@12.2.1': + resolution: {integrity: sha512-0bloFmxrvYY5LYex5V6SZySwg+egBk0pOW+YUeOm9fiG2U1wv+qRVLBOUvIzLAeJE7vBlAzxUwXkQAYtr12n+Q==} + cpu: [x64] + os: [darwin] + + '@pnpm/exe.linux-arm64-musl@12.2.1': + resolution: {integrity: sha512-AZl7apVZC4TV1/vTp/bS16XUsHeqx9AHsU4V55joiGR+iR6vl+WF0WlGvGCTjqjICS4q/kThpgNrtG8aqQ9seQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-arm64@12.2.1': + resolution: {integrity: sha512-S36+tMEGrPz3nwtfFU9kYxbHoi8sV7WJfMO9njEL4jRaShTNaLRERMAqyI2DUCiA5QCr6/a50lt4+pKCV2mCvw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.linux-x64-musl@12.2.1': + resolution: {integrity: sha512-4MQClkAk1em55LFZJpeIqb7j+gEqCgX8yC42j9DFWL42q1uMX1e1tvTy2Dtd4NoWQqgdkLxOStZ+D9CYC+28ow==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@pnpm/exe.linux-x64@12.2.1': + resolution: {integrity: sha512-A/AlR71Leph7qgB3ThSU9yU/vLfre4HmP6nbt3/qt51fzAjQ0xuq7j+cw0f1yDskzOsGzmo5uD6ruefCwLK5uQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@pnpm/exe.win32-arm64@12.2.1': + resolution: {integrity: sha512-TEGUmroT6NGfo2O2+tHK9Zr1lhP1zLzpwx+QAQV19l8V4ljUoMfz8Os5V9zzNCtIpzyKcK7SuG7fkVbxFgRMzg==} + cpu: [arm64] + os: [win32] + + '@pnpm/exe.win32-x64@12.2.1': + resolution: {integrity: sha512-V2Q+AF8fCsw8/CC3bWF8kopOmH0aAjgk9m7H7uAQNulOYIJs9YJBiAlgByswmt+igV9axc4dBI//ZlK2NKpDcw==} + cpu: [x64] + os: [win32] + + pnpm@12.2.1: + resolution: {integrity: sha512-9Vymiqy561q2nGb4KKmK+JoyKGcDrvH42hMcp+q01nfzS/qF4YZGepGcB5nfi29KokD33CkZszsycxkBBBYmFg==} + engines: {node: '>=18.*'} + hasBin: true + +snapshots: + + '@pnpm/exe.darwin-arm64@12.2.1': + optional: true + + '@pnpm/exe.darwin-x64@12.2.1': + optional: true + + '@pnpm/exe.linux-arm64-musl@12.2.1': + optional: true + + '@pnpm/exe.linux-arm64@12.2.1': + optional: true + + '@pnpm/exe.linux-x64-musl@12.2.1': + optional: true + + '@pnpm/exe.linux-x64@12.2.1': + optional: true + + '@pnpm/exe.win32-arm64@12.2.1': + optional: true + + '@pnpm/exe.win32-x64@12.2.1': + optional: true + + pnpm@12.2.1: + optionalDependencies: + '@pnpm/exe.darwin-arm64': 12.2.1 + '@pnpm/exe.darwin-x64': 12.2.1 + '@pnpm/exe.linux-arm64': 12.2.1 + '@pnpm/exe.linux-arm64-musl': 12.2.1 + '@pnpm/exe.linux-x64': 12.2.1 + '@pnpm/exe.linux-x64-musl': 12.2.1 + '@pnpm/exe.win32-arm64': 12.2.1 + '@pnpm/exe.win32-x64': 12.2.1 + +--- lockfileVersion: '9.0' settings: