Skip to content

Support linked npm workflows with persistent WASI symlinks - #126

Draft
noise64 wants to merge 1 commit into
gol-58-npm-hardeningfrom
gol-388-symlinked-npm-exec
Draft

Support linked npm workflows with persistent WASI symlinks#126
noise64 wants to merge 1 commit into
gol-58-npm-hardeningfrom
gol-388-symlinked-npm-exec

Conversation

@noise64

@noise64 noise64 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor
  • resolves GOL-388
  • replaces runtime-local symlink placeholders with persistent relative WASI filesystem symlinks shared across fresh execution runtimes
  • enables local npm exec, npx, workspace links, npm link, registry-acquired bins, and representative pnpm-style package layouts
  • preserves linked CommonJS package identity while keeping module-resolution candidate probing on direct filesystem checks
  • rejects rooted symlink targets atomically with EINVAL, and documents the production, macOS/Linux, and Windows privilege boundaries
  • adds P2/P3 filesystem, execution, npm workflow, module identity, broken-link, cycle, rename, and unlink coverage
  • stacked on Run npm package-management workflows inside wasm-rquickjs #125; rebase onto main after that PR merges
  • TODO: GOL-427 tracks Windows linked workflows without Developer Mode or equivalent symlink privilege

Node compatibility

  • primary CI-enforced: 3217/4391 (73.3%)3206/4391 (73.0%)
  • full public: 3217/5750 (55.9%)3206/5750 (55.8%)
  • fs: 373 passing / 12 gaps369 passing / 16 gaps
  • module: 129 passing / 25 gaps122 passing / 32 gaps
  • the passing inventory decreases because 11 vendored tests require rooted symlink targets that WASI cannot honestly provide; persistent relative-link behavior is covered by focused runtime tests instead

@blacksmith-sh

blacksmith-sh Bot commented Aug 12, 2026

Copy link
Copy Markdown

Found 60 test failures on Blacksmith runners:

Failures

Test View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fail/+sync throw fail View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at first View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
subtest sync throw fails/sync throw fails at second View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs
top level/+long running View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant