Purpose
A measured, reproducible starting point for js/node parity. Every previous run of the scanner on macOS reported every file as a crash (it bounded runs with coreutils timeout, which macOS does not ship), so there was no usable baseline. That is fixed in 475621266/acbe0c0c8; this issue records what the corrected tool actually finds and tracks the remainder.
Baseline
Build: zig build debug -Denable_jsc=true at native artifact source pin 4982b91e3702094330f3be3883354c52b8c01323, WebKit cd821fecca0d39c8, Darwin arm64.
scripts/vm-corpus-scan.sh js/node <out.tsv> 25267 files: 233 pass / 25 fail / 6 crash / 3 hang.
Fixed while establishing it (each verified against the pinned Bun control, not just "no longer crashes"):
c90e1c7b0—path.formatoverran its buffer by the dotformatExtinserts.js/node/pathis now 19/19.47586f1ee— HTTP/2 header padding could push a single-frame header block onto the CONTINUATION path, which then sliced a full frame payload out of a shorter block.node-http2-continuation.test.ts9/9, matching Bun.6492703f7—BlockList.checkchose the IPv4 mask whenever both addresses answeredas_v4(), so an IPv4-mapped IPv6 subnet reached it with an IPv6 prefix and underflowed32 - prefix.node-net.test.ts40 pass / 4 skip / 0 fail, matching Bun.
Remaining crashes and hangs
| file | status | note |
|---|---|---|
js/node/http2/node-http2.test.js | crash | #620 — loader refuses require() of a linked ESM record; Bun runs 287 tests here |
js/node/http/node-http.test.ts | crash | not yet triaged |
js/node/http/node-http-agent-tls-options.test.mts | crash | not yet triaged |
js/node/process/process.test.js | crash | not yet triaged |
js/node/util/bun-inspect.test.ts | crash | not yet triaged |
js/node/vm/happy-dom-vm-16277.test.ts | crash | not yet triaged |
js/node/dns/node-dns.test.js | hang | exceeds a 25s bound |
js/node/http/node-http-backpressure-max.test.ts | hang | exceeds a 25s bound |
js/node/worker_threads/worker_heap_snapshot_gc.test.ts | hang | exceeds a 25s bound |
Notes on the failures
Several of the 25 fail rows are dependency provisioning, not runtime behaviour — Could not resolve: "verdaccio/bin/verdaccio", ENOENT ... 'body-parser', bun install failed. Those belong to #618 and should not be counted as parity gaps. The rest are genuine assertion differences and want individual triage.
How to use this
Classify each remaining row against the pinned Bun control before treating it as a Home gap — a build of the pin lives at ~/Code/bun/build/release/bun and several corpus expectations fail there too. Crashes first: they are memory-safety defects, and all three fixed above turned out to be small, self-contained divergences from a correction Bun had already made on its Rust side.
Parent parity tracker: #66