From f7f1bd4496f64e7519ef76713cc0ac26c08b2012 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sun, 11 Oct 2026 11:51:06 +0200 Subject: [PATCH 1/2] fix(pnpm): pass skipIfHasSideEffectsCache to the engine rebuild fusepm rebuilds the pending packages of every capsule with skipIfHasSideEffectsCache set, so that a package whose build the side-effects cache holds is restored instead of built again. lynx dropped the option, as the engine had none until @pnpm/napi 12.11.0, and every capsule ran the install scripts of packages like esbuild again. Co-Authored-By: Claude Opus 5.5 --- scopes/dependencies/pnpm/lynx.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scopes/dependencies/pnpm/lynx.ts b/scopes/dependencies/pnpm/lynx.ts index 463a37784f62..a79ca407984f 100644 --- a/scopes/dependencies/pnpm/lynx.ts +++ b/scopes/dependencies/pnpm/lynx.ts @@ -493,10 +493,9 @@ export async function install( } return { dependenciesChanged, - // The engine has no skipIfHasSideEffectsCache selector; a pending rebuild - // is expressed as a selection of the packages the lockfile records as - // needing a build. - rebuild: async ({ pending } = {}) => { + // A pending rebuild is expressed as a selection of the packages the + // lockfile records as needing a build. + rebuild: async ({ pending, skipIfHasSideEffectsCache } = {}) => { const selectedNames = pending ? await pendingBuildNames(rootDir, depsRequiringBuild) : undefined; if (selectedNames?.length === 0) return; // Reached without an install of its own after a dry run. @@ -513,6 +512,9 @@ export async function install( ...installOptions, storeDir: resolvedStoreDir, reporter: options.hidePackageManagerOutput ? undefined : toReporterOptions(rebuildReportOptions), + // A selected package the side-effects cache already holds a build + // of is restored from it instead of running its scripts again. + skipIfHasSideEffectsCache, }, undefined, selectedNames, From 43ac4902ff04bcc2ce964369fbde95b71e1eb0e5 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sun, 11 Oct 2026 13:31:40 +0200 Subject: [PATCH 2/2] chore(deps): bump @pnpm/napi to 12.12.1 12.12.1 includes pnpm/pnpm#16843: a rebuild with skipIfHasSideEffectsCache skips a package whose cached build changed nothing inside it, such as ssh2 when its optional native binding cannot compile. Before, such a package ran its install script in every fusepm capsule. Co-Authored-By: Claude Opus 5.5 --- pnpm-lock.yaml | 152 ++++++++++++++++++++++++------------------------ workspace.jsonc | 2 +- 2 files changed, 77 insertions(+), 77 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 971372d94e68..5d5b5a66bbd3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -150,8 +150,8 @@ importers: specifier: 1100.0.19 version: 1100.0.19 '@pnpm/napi': - specifier: 12.12.0 - version: 12.12.0 + specifier: 12.12.1 + version: 12.12.1 '@pnpm/network.ca-file': specifier: 3.0.3 version: 3.0.3 @@ -18348,8 +18348,8 @@ importers: scopes/dependencies/dependency-resolver: dependencies: '@pnpm/napi': - specifier: 12.12.0 - version: 12.12.0 + specifier: 12.12.1 + version: 12.12.1 '@pnpm/network.ca-file': specifier: 3.0.3 version: 3.0.3 @@ -18506,8 +18506,8 @@ importers: specifier: 1100.0.19 version: 1100.0.19 '@pnpm/napi': - specifier: 12.12.0 - version: 12.12.0 + specifier: 12.12.1 + version: 12.12.1 '@pnpm/plugin-trusted-deps': specifier: 0.2.2 version: 0.2.2 @@ -22227,8 +22227,8 @@ importers: scopes/pkg/pkg: dependencies: '@pnpm/napi': - specifier: 12.12.0 - version: 12.12.0 + specifier: 12.12.1 + version: 12.12.1 '@teambit/bit-error': specifier: ~0.0.404 version: 0.0.404 @@ -29320,85 +29320,85 @@ packages: resolution: {integrity: sha512-A3bRMTIZ5ptDPAE/KsDeY1J5UqqOiyo66+k/mUvaVjx++OJdMbp9If5kisEq9ljAV5r5TRpkxsJbSdrdJ5WtzQ==} engines: {node: '>=22.13'} - '@pnpm/napi.android-arm64@12.12.0': - resolution: {integrity: sha512-Z9U3y5c/XBcRpsm521rgDA28V2vAZ05lfVZbaPpCXxZvntFelex2V6YhTkPEGXCJbyQxI0rb0C12sv1idRJwrA==} + '@pnpm/napi.android-arm64@12.12.1': + resolution: {integrity: sha512-pnnpuLDRoqXTKGte1Hh+wmV5qAOLHKhIvLA0iR9J0A4BkHjZ3ki78+lXxWQ2d3HbwDTAi0F5MA1DG1IzTNd7Ww==} cpu: [arm64] os: [android] - '@pnpm/napi.android-x64@12.12.0': - resolution: {integrity: sha512-ZOTHO0kCLzBR3Ty/Nej4Z4Iy7RoKnnYLoFBeJXNdKUOqd0nTeTteaWtWryGfBBMnVGRHiawupIgUE15dq7Sogw==} + '@pnpm/napi.android-x64@12.12.1': + resolution: {integrity: sha512-jtulZfsm61b7vVLZhpDd7v+Zrodpyz8zuG/SMLRj/d1MCi+17es5l35VAtGif82Hc3oqmC3yjlblY5blHXD23g==} cpu: [x64] os: [android] - '@pnpm/napi.darwin-arm64@12.12.0': - resolution: {integrity: sha512-xHquLvBWYH96tUUVYhHjtXzj7evJCX2qrCw/37rKyQfXjSHH5ogzZPngsJcSaUhTcuEmK5ftzpidhgrC6Vkp6Q==} + '@pnpm/napi.darwin-arm64@12.12.1': + resolution: {integrity: sha512-j7cFSJEX2KfxkHcISi6M3qFQcx6C3uulwqlPPC3/U9WbAQOJ/ouo8WISpdFBWiU5Ll7IhzDgs2RQZmZG/YiJTw==} cpu: [arm64] os: [darwin] - '@pnpm/napi.darwin-x64@12.12.0': - resolution: {integrity: sha512-ZkHl6IsB4pwutgIYTWMOokeA4SaKO+cTkqkXY1smVaQTeb2gnXJ6YPD9qoLMBQ8UVKCqZBSqSpE755eX/SESPA==} + '@pnpm/napi.darwin-x64@12.12.1': + resolution: {integrity: sha512-nJc6d3J/4B8RFA0fdAdHhZIgPPYd3Gaq7bR4oVtAKu6TUo6zzuMCOZK0Dk3Cbct75M81fZE9ZaPXef4Vmn7e5g==} cpu: [x64] os: [darwin] - '@pnpm/napi.freebsd-x64@12.12.0': - resolution: {integrity: sha512-Q/1aCOhibjz0yUWimBYGjs8zswIgq4JinpKmZH4ake0htJOrEQWdUPyq6qKt2zY3yZdwgcGKUrTA8BIJvfG/dg==} + '@pnpm/napi.freebsd-x64@12.12.1': + resolution: {integrity: sha512-RRIVEfOwi5b+Q/grmc4Eit6J2KwRJRismI2nEjuBfzjkhRjDOyfySZvEBv2u/WaQughoHQphRw/4+QK0QEf9dA==} cpu: [x64] os: [freebsd] - '@pnpm/napi.linux-arm64-musl@12.12.0': - resolution: {integrity: sha512-GrnyemVA02tbHcPkw5bUg/nXXM0PIEZgFb19r6Zh8A5IKOfOWdc9RIU3Z4aYsfEg0/vWJUDOvmqVsD8MBctMIg==} + '@pnpm/napi.linux-arm64-musl@12.12.1': + resolution: {integrity: sha512-JT3ffviogPYmwG+yMUpDDxYANiTmLHxsQ3Ix01XP1IkZtQ3g7RnqonljRw1IcDq0gOlDT4soKp0+jHGxVdeWdg==} cpu: [arm64] os: [linux] libc: [musl] - '@pnpm/napi.linux-arm64@12.12.0': - resolution: {integrity: sha512-grhAATkYfVZfs5HCydpwhen7aee9LdAh8SIlhZUc0rB2d4QfynT0s3vMov+QHLQl4GOOOhC49qbpSZ05D07WLA==} + '@pnpm/napi.linux-arm64@12.12.1': + resolution: {integrity: sha512-Uud5eXbtoVy3fux/UG6T3ttXL9VqvRUSa3/sEEadb/z5bGFHxjp3S5aZGvXfEb5Osi8kt5LFYUDisZHGIKFzuQ==} cpu: [arm64] os: [linux] libc: [glibc] - '@pnpm/napi.linux-ppc64@12.12.0': - resolution: {integrity: sha512-rAGw6HaI0qhqM7G8+KRM/3W4fwO8MXzGz7TMTBbyFmBEHKAXNx6r75fB4zLY0CdQc5xdhAszfeVAe6JosTgveQ==} + '@pnpm/napi.linux-ppc64@12.12.1': + resolution: {integrity: sha512-P/VSeF4Aap4Gj4LSynUipP5Jn3U1WPFzdESGknWimnsdec9GGpoK/zArSxmuJnTlNMkcPuEf1WM9vwYRdkeiZw==} cpu: [ppc64] os: [linux] libc: [glibc] - '@pnpm/napi.linux-riscv64@12.12.0': - resolution: {integrity: sha512-f20DL+DNwE1LYn/cE2KXYRZiBn3sWz3p7MGOi5k+NfDkykjwJ48LnkgTdb+rYXPvwSQIiMjN6WzznY9Z8h2hzA==} + '@pnpm/napi.linux-riscv64@12.12.1': + resolution: {integrity: sha512-xuJPrglGv9rwl70qeopy9CrvkyZRiqlKbWh6GYqNn8mvQe3iQ0cDieqOZPUGPnla2XhHsyp4NKj85b+XEK45Wg==} cpu: [riscv64] os: [linux] libc: [glibc] - '@pnpm/napi.linux-s390x@12.12.0': - resolution: {integrity: sha512-UwjxS4XXaEztdSOLywiuunekhSLMz2O9JLMwO2bTsyCyn1Os+Q42mraqYJLONvA/w/XCvEUKKmWZqzg1ndYCPQ==} + '@pnpm/napi.linux-s390x@12.12.1': + resolution: {integrity: sha512-zdB/esQy5lWmlgYIMQEelPUC5xMv5Oy/qDQYgaNgIDN7QQxxas5F0zG3En5LdpbynZ941LtLRvoRJP6Cl03WFQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@pnpm/napi.linux-x64-musl@12.12.0': - resolution: {integrity: sha512-eqI5wJI5yY0Q0Bt9+cgV5XhWzGUTEt0SNjSXl3RL693j+DrUKxMQq726J3G7nlI0KGqsADq5MslEyTQ5RfZ/Kg==} + '@pnpm/napi.linux-x64-musl@12.12.1': + resolution: {integrity: sha512-UR578maK1HMgyw6GWGM7LU+eLI2eUPA+EasOrG2sKmuzVgUthtY/0Q/GW5BDG/DEsPWgigl5a8gOpyEBq6nkhg==} cpu: [x64] os: [linux] libc: [musl] - '@pnpm/napi.linux-x64@12.12.0': - resolution: {integrity: sha512-KRnplVrzHEbJYsvWVzUzYcc8j7sy/8Ha1OuKJr9mh176IyZSkaOlQRQchXwpNz3rpCdveMFrImVAThyvDycE/Q==} + '@pnpm/napi.linux-x64@12.12.1': + resolution: {integrity: sha512-l8OoZ1+QIuCSD9WbisptmBPfWc/aZt8ALhl8CtYsBrB7rwISG26GlpWTDZ/yq9t4q0RH1Y/ADst5L4xAH+HnXQ==} cpu: [x64] os: [linux] libc: [glibc] - '@pnpm/napi.win32-arm64@12.12.0': - resolution: {integrity: sha512-gAoeTaF79FUnsiaKdb7tY5TWRQ81oUbgVV2W49AfsvO4cJi1DApwz22VZc3y1AaVkaAAZA1+00KSoIl7NdHfTw==} + '@pnpm/napi.win32-arm64@12.12.1': + resolution: {integrity: sha512-SEfESbE5UtkSspDoestN2BG+mIdHAfUslREbmXmIg2j4uIUkLJRf1+g8Jl3sxpkse5vYnjVsj/uE77Pb2Fg/6g==} cpu: [arm64] os: [win32] - '@pnpm/napi.win32-x64@12.12.0': - resolution: {integrity: sha512-nf4yhaafORp+gGSqx+/laHv1dGAfwIoOLLqXma74D/kT4LJkoEYMnkmOaFgsGplh5djxJp95I/qxGQWGczlufA==} + '@pnpm/napi.win32-x64@12.12.1': + resolution: {integrity: sha512-LfpOSr5CfqRubUM0clPVw2XMuPp82tKCWZuGw8tufxGPV+ScjXMS2sNRyQOY6hVx5tVaHu9y6kLEg3PXmGq2nQ==} cpu: [x64] os: [win32] - '@pnpm/napi@12.12.0': - resolution: {integrity: sha512-f5mzwzh2TtWFzgK00MrLnkXqSjGjGs82dD73WV4wW03Fyg/5NT7Ajc/8V77cWAGqZd0/Wmr9sE1HqsmlafiAVw==} + '@pnpm/napi@12.12.1': + resolution: {integrity: sha512-RpGzz8YP1EklV0ALFZSl1A488GnyrlIRh0PSuKQStZajBXRSRxCEPwkfUih1l0iQq2xCwg29pGIatT1pYIu2Cw==} engines: {node: '>=18.*'} '@pnpm/network.agent@0.1.0': @@ -51716,64 +51716,64 @@ snapshots: bole: 5.0.29 split2: 4.2.0 - '@pnpm/napi.android-arm64@12.12.0': + '@pnpm/napi.android-arm64@12.12.1': optional: true - '@pnpm/napi.android-x64@12.12.0': + '@pnpm/napi.android-x64@12.12.1': optional: true - '@pnpm/napi.darwin-arm64@12.12.0': + '@pnpm/napi.darwin-arm64@12.12.1': optional: true - '@pnpm/napi.darwin-x64@12.12.0': + '@pnpm/napi.darwin-x64@12.12.1': optional: true - '@pnpm/napi.freebsd-x64@12.12.0': + '@pnpm/napi.freebsd-x64@12.12.1': optional: true - '@pnpm/napi.linux-arm64-musl@12.12.0': + '@pnpm/napi.linux-arm64-musl@12.12.1': optional: true - '@pnpm/napi.linux-arm64@12.12.0': + '@pnpm/napi.linux-arm64@12.12.1': optional: true - '@pnpm/napi.linux-ppc64@12.12.0': + '@pnpm/napi.linux-ppc64@12.12.1': optional: true - '@pnpm/napi.linux-riscv64@12.12.0': + '@pnpm/napi.linux-riscv64@12.12.1': optional: true - '@pnpm/napi.linux-s390x@12.12.0': + '@pnpm/napi.linux-s390x@12.12.1': optional: true - '@pnpm/napi.linux-x64-musl@12.12.0': + '@pnpm/napi.linux-x64-musl@12.12.1': optional: true - '@pnpm/napi.linux-x64@12.12.0': + '@pnpm/napi.linux-x64@12.12.1': optional: true - '@pnpm/napi.win32-arm64@12.12.0': + '@pnpm/napi.win32-arm64@12.12.1': optional: true - '@pnpm/napi.win32-x64@12.12.0': + '@pnpm/napi.win32-x64@12.12.1': optional: true - '@pnpm/napi@12.12.0': + '@pnpm/napi@12.12.1': optionalDependencies: - '@pnpm/napi.android-arm64': 12.12.0 - '@pnpm/napi.android-x64': 12.12.0 - '@pnpm/napi.darwin-arm64': 12.12.0 - '@pnpm/napi.darwin-x64': 12.12.0 - '@pnpm/napi.freebsd-x64': 12.12.0 - '@pnpm/napi.linux-arm64': 12.12.0 - '@pnpm/napi.linux-arm64-musl': 12.12.0 - '@pnpm/napi.linux-ppc64': 12.12.0 - '@pnpm/napi.linux-riscv64': 12.12.0 - '@pnpm/napi.linux-s390x': 12.12.0 - '@pnpm/napi.linux-x64': 12.12.0 - '@pnpm/napi.linux-x64-musl': 12.12.0 - '@pnpm/napi.win32-arm64': 12.12.0 - '@pnpm/napi.win32-x64': 12.12.0 + '@pnpm/napi.android-arm64': 12.12.1 + '@pnpm/napi.android-x64': 12.12.1 + '@pnpm/napi.darwin-arm64': 12.12.1 + '@pnpm/napi.darwin-x64': 12.12.1 + '@pnpm/napi.freebsd-x64': 12.12.1 + '@pnpm/napi.linux-arm64': 12.12.1 + '@pnpm/napi.linux-arm64-musl': 12.12.1 + '@pnpm/napi.linux-ppc64': 12.12.1 + '@pnpm/napi.linux-riscv64': 12.12.1 + '@pnpm/napi.linux-s390x': 12.12.1 + '@pnpm/napi.linux-x64': 12.12.1 + '@pnpm/napi.linux-x64-musl': 12.12.1 + '@pnpm/napi.win32-arm64': 12.12.1 + '@pnpm/napi.win32-x64': 12.12.1 '@pnpm/network.agent@0.1.0(supports-color@9.4.0)': dependencies: @@ -64019,7 +64019,7 @@ snapshots: '@teambit/dependency-resolver@file:scopes/dependencies/dependency-resolver(@teambit/documenter.theme.theme-compositions@4.1.5)(@teambit/mdx.ui.mdx-layout@1.0.14)(chai@4.3.0)(domexception@4.0.0)(graphql@15.8.0)(react@18.3.1)(supports-color@9.4.0)': dependencies: - '@pnpm/napi': 12.12.0 + '@pnpm/napi': 12.12.1 '@pnpm/network.ca-file': 3.0.3 '@pnpm/types': 1101.9.0 '@teambit/bit-error': 0.0.404 @@ -64081,7 +64081,7 @@ snapshots: '@teambit/dependency-resolver@file:scopes/dependencies/dependency-resolver(@teambit/documenter.theme.theme-compositions@4.1.5)(@teambit/mdx.ui.mdx-layout@1.0.14)(chai@4.3.0)(domexception@4.0.0)(graphql@15.8.0)(react@19.2.7)(supports-color@9.4.0)': dependencies: - '@pnpm/napi': 12.12.0 + '@pnpm/napi': 12.12.1 '@pnpm/network.ca-file': 3.0.3 '@pnpm/types': 1101.9.0 '@teambit/bit-error': 0.0.404 @@ -64143,7 +64143,7 @@ snapshots: '@teambit/dependency-resolver@file:scopes/dependencies/dependency-resolver(@teambit/documenter.theme.theme-compositions@4.1.5)(@teambit/mdx.ui.mdx-layout@1.0.14)(chai@5.2.1)(domexception@4.0.0)(graphql@15.8.0)(react@19.2.7)(supports-color@9.4.0)': dependencies: - '@pnpm/napi': 12.12.0 + '@pnpm/napi': 12.12.1 '@pnpm/network.ca-file': 3.0.3 '@pnpm/types': 1101.9.0 '@teambit/bit-error': 0.0.404 @@ -75822,7 +75822,7 @@ snapshots: '@teambit/pkg@file:scopes/pkg/pkg(chai@4.3.0)(domexception@4.0.0)(graphql@15.8.0)(react@18.3.1)(supports-color@9.4.0)': dependencies: - '@pnpm/napi': 12.12.0 + '@pnpm/napi': 12.12.1 '@teambit/bit-error': 0.0.404 '@teambit/component-id': 1.2.5 '@teambit/component-issues': file:components/component-issues @@ -75865,7 +75865,7 @@ snapshots: '@teambit/pkg@file:scopes/pkg/pkg(chai@4.3.0)(domexception@4.0.0)(graphql@15.8.0)(react@19.2.7)(supports-color@9.4.0)': dependencies: - '@pnpm/napi': 12.12.0 + '@pnpm/napi': 12.12.1 '@teambit/bit-error': 0.0.404 '@teambit/component-id': 1.2.5 '@teambit/component-issues': file:components/component-issues @@ -75908,7 +75908,7 @@ snapshots: '@teambit/pkg@file:scopes/pkg/pkg(chai@5.2.1)(domexception@4.0.0)(graphql@15.8.0)(react@19.2.7)(supports-color@9.4.0)': dependencies: - '@pnpm/napi': 12.12.0 + '@pnpm/napi': 12.12.1 '@teambit/bit-error': 0.0.404 '@teambit/component-id': 1.2.5 '@teambit/component-issues': file:components/component-issues @@ -75953,7 +75953,7 @@ snapshots: dependencies: '@pnpm/deps.path': 1100.1.0 '@pnpm/lockfile.types': 1100.0.19 - '@pnpm/napi': 12.12.0 + '@pnpm/napi': 12.12.1 '@pnpm/plugin-trusted-deps': 0.2.2 '@pnpm/types': 1101.9.0 '@teambit/bit-error': 0.0.404 @@ -75991,7 +75991,7 @@ snapshots: dependencies: '@pnpm/deps.path': 1100.1.0 '@pnpm/lockfile.types': 1100.0.19 - '@pnpm/napi': 12.12.0 + '@pnpm/napi': 12.12.1 '@pnpm/plugin-trusted-deps': 0.2.2 '@pnpm/types': 1101.9.0 '@teambit/bit-error': 0.0.404 @@ -76029,7 +76029,7 @@ snapshots: dependencies: '@pnpm/deps.path': 1100.1.0 '@pnpm/lockfile.types': 1100.0.19 - '@pnpm/napi': 12.12.0 + '@pnpm/napi': 12.12.1 '@pnpm/plugin-trusted-deps': 0.2.2 '@pnpm/types': 1101.9.0 '@teambit/bit-error': 0.0.404 diff --git a/workspace.jsonc b/workspace.jsonc index 0e1e3b7dbf82..eef680cf148b 100644 --- a/workspace.jsonc +++ b/workspace.jsonc @@ -57,7 +57,7 @@ "@pnpm/deps.path": "1100.1.0", "@pnpm/error": "1100.1.1", "@pnpm/lockfile.types": "1100.0.19", - "@pnpm/napi": "12.12.0", + "@pnpm/napi": "12.12.1", "@pnpm/network.ca-file": "3.0.3", "@pnpm/network.fetch": "1100.1.11", "@pnpm/node-fetch": "^1.0.0",