The plugin-vscode target currently verifies and packages through npx vsce during build, and falls back to a global npm install -g @vscode/vsce if the availability check fails.\n\nThat is surprising for validation/dry-run contexts because the shared harness sets dryRun: true specifically so adapters can avoid network/exec side effects. For this target, a dry-run build can still fetch a CLI or try a global install before users are ready to package.\n\nProposed fix:\n\n- when ctx.dryRun is set, write a deterministic package plan artifact instead of invoking vsce\n- keep real builds on the existing npx --yes vsce package path\n- add tests proving dry-run builds do not call exec and real builds still do\n\nThis keeps target validation safe while preserving the real packaging behavior.
The plugin-vscode target currently verifies and packages through
npx vsceduringbuild, and falls back to a globalnpm install -g @vscode/vsceif the availability check fails.\n\nThat is surprising for validation/dry-run contexts because the shared harness setsdryRun: truespecifically so adapters can avoid network/exec side effects. For this target, a dry-run build can still fetch a CLI or try a global install before users are ready to package.\n\nProposed fix:\n\n- whenctx.dryRunis set, write a deterministic package plan artifact instead of invokingvsce\n- keep real builds on the existingnpx --yes vsce packagepath\n- add tests proving dry-run builds do not callexecand real builds still do\n\nThis keeps target validation safe while preserving the real packaging behavior.