node-pinned + bun-pinned conformance lanes - #109
Merged
Conversation
Two new pinned lanes in the tools/shell driver, running the SAME bundle as the jsshell lanes via an unbundled host preamble (tools/shell/host-node.mjs: binary reads that copy out of node's pooled Buffer, print -> console.log; dist/entry.mjs is a byte-identical copy because node parses bare .js as CJS): * node-pinned — node v26.7.0, REQUIRED gate, both arches. Exact Deno-lane parity with no flags (JSPI default-on in >= 26): 1254/0/95, full capability matrix. Node 24 LTS deliberately not laned: JSPI is flag-gated there and its older V8 13.6 vintage deviates on 2 dont-block-start commands (recorded in the expectation header). * bun-pinned — bun v1.3.14, findings-only until a track record (the WebKit-lane precedent). Exact Deno-lane parity under BUN_JSC_useWasmMultiMemory=1 (driver-set; stock bun ships wasm multi-memory off and fails 174 commands — the CABI needs >1 memory per core module). JSPI is on by default in stock bun. Both fetched sha256-verified from official release channels (pins.json). docs/architecture.md §3's Node row revised: these lanes add EMBEDDING coverage (module loading, event loop, pooled-Buffer I/O), not engine coverage — V8/JSC were already exercised. Measured on this box (linux-arm64): all three shells-recipe lanes OK, 59/59 files each, sub-second corpus runs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Node.js and Bun as pinned conformance lanes in the existing
tools/shelldriver — investigation first (per dispatch), then implementation once both proved blocker-free: both runtimes run the unmodified shell bundle at exact Deno-lane parity (1254/0/95, 59/59 files, sub-second).What
node-pinned— node v26.7.0 (nodejs.org tarball, sha256-verified, both linux arches), required gate injust shells. Exact parity with zero flags: wasm JSPI is default-on in node ≥ 26, asdocs/architecture.md§3's table already recorded.bun-pinned— bun v1.3.14 (GitHub release zip, sha256-verified, both arches), findings-only until it has a CI track record (the WebKit-lane precedent), riding injust shellswith exit-0-on-deviation.How
One bundle, every lane: node/bun run
tools/shell/host-node.mjs, an unbundled ~30-line preamble that installs the entry's two host capabilities (binary reads,print) and importsdist/entry.mjs(byte-identical copy; bare.jsparses as CJS under node with no package.json above it).entry.tsgains first-classnode/bunengine detection and identity reporting. No changes toharness/src/,runtime/src/, or contracts.Empirical record (linux-arm64 dev box, 2026-08-11)
--experimental-wasm-jspiasync/dont-block-start— V8 13.6's older JSPI vintage); deliberately not laned, recorded in the expectation headerBUN_JSC_useWasmMultiMemory=1(driver-set)The bun flag is an unstable surface (bun warns so); the pin freezes it, and the expectation header requires re-verification on any re-pin.
memory64/relaxedSimdprobe false on bun — nothing in the current corpus needs either.Why lanes at all (docs revision)
docs/architecture.md§3 previously ruled Node "not a lane — Deno substitutes". These lanes add embedding coverage, not engine coverage: module loading, event-loop integration, and runtime I/O quirks — e.g. node's pooledBuffer, whose pool-backed.buffermust never reach WebAssembly APIs (handled + documented in the host preamble).Gates run
just shells— sm-pinned OK, node-pinned OK, bun-pinned OK (jsc-pinned arch-skipped here; x64 leg covers it in CI)just conformance— Deno lane green (69 passed)deno checkclean on all touched TS;deno lintfindings in tools/shell are pre-existing (no-import-prefixon files this PR didn't introduce)