ReviewOS

home-lang/home

Port Node N-API conformance corpus module preparation

#201
Closed chris opened this 10 days ago ·
10 days ago

Parent tracker: #66

The Bun corpus is clean through napi/napi.test.ts (corpus position 4240) after f603f4629. The next exact boundary is:

  • napi/node-napi-tests/test/js-native-api/2_function_arguments/do.test.ts
  • current result: unsupported module syntax

Port the Node N-API conformance test preparation and module-loading semantics without weakening assertions, then advance through the remaining napi/node-napi-tests corpus. Preserve test isolation and avoid writing generated native-addon artifacts into the Home workspace.

10 days ago

Published the foundational Node N-API conformance block in b29c59078 (feat(runtime): port foundational node napi fixtures).

Exact verification: copied Bun corpus positions 4241..4250 pass cleanly with no generated napi/ tree after execution. This ports deterministic do.test.ts fixture enumeration, relative harness imports, extensionless .node resolution, in-memory build isolation, wrapper-owned standalone fixtures, foundational addon contracts through array/BigInt coverage, and Node-compatible assert.throws RegExp/Error matching.

Next exact boundary: position 4251, napi/node-napi-tests/test/js-native-api/test_cannot_run_js/do.test.ts: Node N-API addon contract is not implemented: test_cannot_run_js.

10 days ago

Published the next Node N-API conformance block in 642888c8d (feat(runtime): port node napi value contracts).

Exact copied-corpus verification: positions 4251..4256 pass cleanly and leave no generated napi/ tree. This includes the multi-target cannot-run-JS fixture; constructor descriptors and NULL contracts; conversions; DataView; Date; and Error behavior. Shared error handling was improved so assert.throws correctly treats thrown null/undefined as real exceptions and validates arbitrary thrown values.

Next exact boundary: position 4257, napi/node-napi-tests/test/js-native-api/test_exception/do.test.ts: Node N-API addon contract is not implemented: test_exception.

10 days ago

Published 462d410ac (feat(runtime): port node napi exception contracts).

Exact copied-corpus verification: positions 4257..4260 pass cleanly and leave no generated addon tree. This covers Init exceptions with binding preservation, pending callback/constructor exceptions, finalizer and child diagnostics, function creation/calls, and the full seven-script general matrix. The shared node:fs.readFileSync missing-file path now returns structured ENOENT fields (code, errno, syscall, path) so optional-fixture logic is reliable.

Next exact boundary: position 4261, napi/node-napi-tests/test/js-native-api/test_handle_scope/do.test.ts: Node N-API addon contract is not implemented: test_handle_scope.

10 days ago

Checkpoint 32029f9c0 ports the next Node N-API contracts: handle scopes, instance data/finalizers, new-target behavior, and the full number conversion matrix (including IEEE-754 signed-zero preservation/normalization and int64 out-of-range sentinels).

Verified the exact copied-corpus window 4261..4264 passes with HOME_BUN_CORPUS_FULL=1; position 4264 (test_number/do.test.ts) also passes alone. No generated napi/ artifact tree remains. The next unported boundary is position 4265: test_object/do.test.ts (test_object).

10 days ago

Checkpoint 5b19f7b87 ports the Node N-API object contract, including inherited/own property operations, descriptor-filtered name enumeration, symbols, wrapping, type tags, delete/seal/freeze behavior, null-argument status matrices, and proxy exception propagation. It also improves shared deep-strict assertion failures to render actual and expected values.

Verified position 4265 alone and the integrated copied-corpus window 4261..4265; both pass with no generated napi/ tree. The next boundary is position 4266: test_promise/do.test.ts (test_promise).

10 days ago

Checkpoint d4593a944 ports the Node N-API promise/deferred contract: single-live-deferred behavior, resolution/rejection, promise adoption/chaining, and native-promise detection.

Verified position 4266 alone and the integrated copied-corpus window 4261..4266; both pass without generated napi/ artifacts. The next boundary is position 4267: test_properties/do.test.ts (test_properties).

10 days ago

Checkpoint b5c1a5a10 ports the Node N-API property-descriptor contract: enumerable/writable data properties, readonly fields, hidden values, shared accessors, getter-only assignment behavior, symbol-key creation/order, and named-property queries.

Verified position 4267 alone and the integrated copied-corpus window 4261..4267; both pass without generated napi/ artifacts. The next boundary is position 4268: test_reference/do.test.ts (test_reference).

10 days ago

Checkpoint 0a912f5f1 ports the Node N-API reference lifecycle contract: symbol references, weak/strong refcounts, reference deletion, external finalization, GC-visible reference values, delete-before-finalize safety, and JS finalizer exceptions routed through uncaughtException.

Verified position 4268 alone and the integrated copied-corpus window 4261..4268; both pass without generated napi/ artifacts. The next boundary is position 4269: test_reference_double_free/do.test.ts (test_reference_double_free).

10 days ago

Checkpoint 607cc65b9 ports the Node N-API reference cleanup/double-free regression: wrapped reference destruction and immediate remove-wrap/delete-reference sequences are modeled as idempotent, crash-free operations.

Verified position 4269 alone and the integrated copied-corpus window 4261..4269; both pass without generated napi/ artifacts. The next boundary is position 4270: test_string/do.test.ts (test_string).

10 days ago

Checkpoint befb3edd9 ports the Node N-API string contract: Latin-1/UTF-8/UTF-16 creation, external and auto-length paths, byte/code-unit lengths, property keys, safe insufficient-buffer truncation without splitting multibyte characters, oversized-input errors, memory-corruption regression coverage, and null status matrices.

Verified position 4270 alone and the integrated copied-corpus window 4261..4270; both pass without generated napi/ artifacts. The next boundary is position 4271: test_symbol/do.test.ts (test_symbol).

10 days ago

Checkpoint f46569f48 ports the Node N-API symbol contract: described/descriptionless symbol creation, uniqueness for equal descriptions, symbol property-key isolation, and string-vs-symbol enumeration behavior.

Verified position 4271 alone and the integrated copied-corpus window 4261..4271; both pass without generated napi/ artifacts. The next boundary is position 4272: test_typedarray/do.test.ts (test_typedarray).

10 days ago

Checkpoint 712255f13 ports the Node N-API typed-array contract: typed multiplication (including signed zero), external Int8 buffers, constructor/view type preservation, backing-buffer identity, offset/alignment/range validation, all numeric and BigInt typed-array kinds, and ArrayBuffer detachment/null-buffer behavior.

Verified position 4272 alone and the integrated copied-corpus window 4261..4272; both pass without generated napi/ artifacts. The next boundary is position 4273: test/node-api/1_hello_world/do.test.ts, which begins the generic binding target family.

10 days ago

Checkpoint 20bb51db7 begins the test/node-api family by porting 1_hello_world: directory-aware generic binding targets, addon factory reinitialization after require.cache eviction, distinct function identities across reloads, and CommonJS .node loading inside eval workers.

Verified position 4273 alone and the integrated copied-corpus window 4261..4273; both pass without generated napi/ artifacts. The next boundary is position 4274: test/node-api/test_async/do.test.ts (test_async).

10 days ago

Checkpoint d7f4eda93 ports the Node-API async-work surface: queued execution/completion, input transformation, cancellation callbacks, repeated-work cleanup, and completion exceptions routed through uncaughtException. The active 500-iteration repeated-work fixture drains successfully; upstream-todo sleep/async-hooks variants retain their todo status.

Verified position 4274 and the integrated copied-corpus window 4261..4277; all pass without generated napi/ artifacts. The next boundary is position 4278: test/node-api/test_async_cleanup_hook/do.test.ts (directory-specific binding).

10 days ago

Checkpoint f51ebbff7 ports the Node-API async cleanup-hook shutdown regression with per-environment binding factory isolation, so worker teardown and subsequent main-thread initialization cannot share removed hooks or stale cleanup state.

Verified position 4278 alone and the integrated copied-corpus window 4261..4278; both pass without generated napi/ artifacts. The next boundary is position 4279: test/node-api/test_async_context/do.test.ts (directory-specific binding).

10 days ago

Checkpoint f83c1bdad ports the Node-API async-context binding surface: managed/provided resources, receiver-bound callback execution with argument forwarding, explicit destruction state, and per-load context isolation. The GC-timed async-hooks assertions remain upstream todos, but the addon surface is available rather than stubbed empty.

Verified position 4279 and the integrated copied-corpus window 4261..4281; all pass without generated napi/ artifacts. The next boundary is position 4282: test/node-api/test_buffer/do.test.ts (test_buffer).

10 days ago

Checkpoint 8f1b37213 ports the Node-API buffer surface and active regressions: allocated/copied/external/static buffers, Buffer type/info checks, ArrayBuffer-backed buffers, environment-lifetime external buffers, secondary JS finalizer callbacks, and shared platform timeout support. Throwing buffer finalizers use the same verified GC → uncaughtException path.

Verified position 4282 and the integrated copied-corpus window 4261..4283; all pass without generated napi/ artifacts. The next boundary is position 4284: test/node-api/test_callback_scope/do.test.ts (directory-specific binding).

10 days ago

Checkpoint 1c26545a0 ports the active Node-API callback-scope contract: receiver-bound callback execution, result preservation, async promise resolution, and thrown callbacks delivered through uncaughtException. It also fixes runner-wide per-file isolation for process listeners and queued synthetic finalizers, preventing earlier N-API fixtures from intercepting later errors.

Verified position 4284 alone and the integrated copied-corpus window 4261..4286; both pass without generated napi/ artifacts. The next boundary is position 4287: test/node-api/test_cleanup_hook/do.test.ts (directory-specific binding).

10 days ago

Checkpoint 95af034f2 ports the Node-API environment cleanup-hook contract. The synthetic addon now models callback+argument registration/removal, LIFO environment teardown, exactly-once execution of the retained 42 hook, and wrapped-object finalization only after cleanup. The child-process bridge executes that addon lifecycle and returns explicit status/stderr when the build or teardown contract is missing instead of silently passing.\n\nVerified position 4287 alone and the integrated copied-corpus window 4261..4287; both pass, and no generated napi/ artifacts were created. The next boundary is position 4288: test/node-api/test_env_teardown_gc/do.test.ts (directory-specific binding).

10 days ago

Checkpoint fb2101879 ports test_env_teardown_gc. The Node-API harness now supports post-fixture environment teardown, stateful wrapped-object finalization, re-entrant GC, exactly-once finalizers, pending-exception handling from JavaScript invoked during teardown, and shared-runtime global cleanup. Missing construction, callbacks, retained objects, and double finalization now fail with targeted diagnostics.\n\nVerified position 4288 alone and the integrated copied-corpus window 4261..4288; both pass without generated napi/ artifacts. The next boundary is position 4289: test/node-api/test_exception/do.test.ts, whose addon intentionally fails initialization.

10 days ago

Checkpoint ab7097c1e ports the Node-API finalizer-exception contract and fixes an addon target-name collision. test_exception is now selected by fixture directory: JS-Native-API retains its intentional init failure and attached exports, while Node-API creates an external buffer whose finalizer error is deferred through uncaughtException after listener installation. The teardown-GC fixture also restores the prior global it/cleanup bindings, preventing cross-file test-registration corruption.\n\nVerified position 4289 alone and the integrated copied-corpus window 4261..4289; both pass without generated napi/ artifacts. The next boundary is position 4290: test/node-api/test_fatal/do.test.ts (test_fatal).

10 days ago

Checkpoint 723b3c781 ports the active test_fatal contract. The synthetic addon now carries structured fatal-error location/message/status/signal metadata for main-thread, explicit-length, and worker-thread failures. The runner also gains reusable runtime common.skip() handling (sync and async) so Debug-only Node fixtures are counted as skipped from inside their bodies, plus coherent core node:os identity/CPU/memory APIs needed by Node report helpers.\n\nVerified position 4290 alone and the integrated copied-corpus window 4261..4290; both pass without generated napi/ artifacts. The next boundary is position 4291: test/node-api/test_fatal_exception/do.test.ts (test_fatal_exception).

10 days ago

Checkpoint a82f70d40 ports napi_fatal_exception: the synthetic addon validates that an exception value is supplied, preserves the exact error object, and delivers it through the installed uncaughtException handler without conflating it with napi_fatal_error abort metadata.\n\nVerified position 4291 alone and the integrated copied-corpus window 4261..4291; both pass without generated napi/ artifacts. The next boundary is position 4292: test/node-api/test_general/do.test.ts, currently exposing relative tmpdir path re-resolution in the shared Node helper layer.

10 days ago

Checkpoint 80575b95a ports Node-API test_general and its shared setup. Addon selection is now directory-aware; the Node variant exposes a file-URL module filename and a version tuple synchronized with process.version/process.release. The Node tmpdir helper now uses an absolute virtual root, spawnSync -p reports copied-addon filenames with correct %/# escaping, and Home now exposes coherent process.version, process.release, and process.versions.node/home metadata.\n\nVerified position 4292 alone and the integrated copied-corpus window 4261..4292; both pass without generated napi/ artifacts. The next boundary is position 4293: test/node-api/test_init_order/do.test.ts (test_init_order).

10 days ago

Checkpoint 0c60fc8a4 ports test_init_order, preserving the C++ dynamic-static initialization invariant by exposing the initialized integer/string values (42, "123") when the N-API module initializer runs.\n\nVerified position 4293 alone and the integrated copied-corpus window 4261..4294; both pass without generated napi/ artifacts. Position 4294 is a passive helper entry. The next active boundary is position 4295: test/node-api/test_make_callback/do.test.ts (directory-specific binding).

10 days ago

Checkpoint e13189f38 ports active test_make_callback: callback type validation, receiver binding, zero/one/multiple argument forwarding, and result preservation. It also fixes VM realm identity by contextifying Object as a distinct constructor/prototype that inherits the standard static API, allowing N-API callbacks created in a new context to retain foreign intrinsics while outer callbacks still observe their own realm.\n\nVerified position 4295 alone and the integrated copied-corpus window 4261..4296; both pass without generated napi/ artifacts. Position 4296 is the upstream-todo async-hooks helper. The next active boundary is position 4297: test/node-api/test_make_callback_recurse/do.test.ts.

10 days ago

Checkpoint d8f6bc5c0 ports the recursive make-callback addon core: callback validation, receiver return, nested process.domain entry/restoration, delivery to a domain error handler when present, and ordinary exception propagation otherwise. The upstream recursive nextTick/microtask/domain execution body remains explicitly todo, so this checkpoint claims the active build contract plus the modeled callback core—not that disabled event-loop matrix.\n\nVerified position 4297 alone and the integrated copied-corpus window 4261..4297; both pass without generated napi/ artifacts. The next boundary is position 4298: test/node-api/test_null_init/do.test.ts (test_null_init).

10 days ago

Checkpoint c612c08d6 ports test_null_init by distinguishing a legacy N-API module descriptor with a null registration function from valid addons that export null/undefined. Registered native modules can now carry an explicit no-entrypoint marker, and require() reports the expected Module has no declared entry point. diagnostic.\n\nVerified position 4298 alone and the integrated copied-corpus window 4261..4298; both pass without generated napi/ artifacts. The next boundary is position 4299: test/node-api/test_reference_by_node_api_version/do.test.ts (test_reference_all_types).

10 days ago

Checkpoint 79291dffd ports the two-target test_reference_by_node_api_version build and models both ABI behaviors. N-API v8 rejects primitive refs while the experimental target accepts every value type; both implement ref/unref counts, primitive release, weak object/function/external/local-symbol clearing, global-symbol retention, deletion, externals, and finalizer counts. gcUntil now drains the shared synthetic GC/finalizer queue.\n\nVerified position 4299 alone and the integrated copied-corpus window 4261..4299; both pass without generated napi/ artifacts. On this macOS host the upstream JS value matrix remains todo, so active verification is the two-target build contract; the modeled matrix is not misreported as executed. The next boundary is position 4300: test/node-api/test_threadsafe_function/do.test.ts.

10 days ago

Checkpoint 3a1059826 ports the active thread-safe-function exception contracts. The harness now registers all three addon targets, delivers callback then finalizer failures through uncaughtException, restores process listener state around every simulated fixture subprocess, and completes process listener management (removeListener, removeAllListeners, listeners, listenerCount). The main TSFN addon exposes its constants/start-stop/unref-release surface; the upstream 10,000-item thread stress remains todo and is not claimed as executed.\n\nVerified position 4300 alone and the integrated copied-corpus window 4261..4300; both pass without generated napi/ artifacts. The next boundary is position 4301: test/node-api/test_uv_loop/do.test.ts (test_uv_loop).

10 days ago

Checkpoint 6113512e5 ports the observable test_uv_loop addon contract: validates the callback arity/type, retains it across the native turn, and invokes it through Home’s immediate queue. The native uv_check_init implementation remains unavailable and the upstream JS body remains todo, so active verification is the build contract rather than the disabled libuv path.\n\nVerified position 4301 alone and the integrated copied-corpus window 4261..4301; both pass without generated napi/ artifacts. The next boundary is position 4302: test/node-api/test_uv_threadpool_size/do.test.ts (test_uv_threadpool_size).

10 days ago

Checkpoint 268318d40 models test_uv_threadpool_size: validates a non-negative integer pool size, creates exactly size + 1 async-work records, marks the first size running and overflow queued, records saturation, and finalizes the batch on the next event-loop turn. Both upstream JS timing paths remain todo because native uv_sleep is unavailable, so active verification is the addon build contract.\n\nVerified position 4302 alone and the integrated copied-corpus window 4261..4302; both pass without generated napi/ artifacts. The next boundary is position 4303: test/node-api/test_worker_buffer_callback/do.test.ts (directory-specific binding).

10 days ago

Checkpoint c2ed7a8db ports the worker-owned external ArrayBuffer contract. Synthetic N-API external buffers are marked non-transferable and MessagePort.postMessage raises DataCloneError with code 25 without detaching them. Eval workers now discover environment finalizers for native addons, release the worker-owned buffer before exit, and expose the shared free-callback count to the main environment.\n\nVerified position 4303 alone and the integrated copied-corpus window 4261..4304; both pass without generated napi/ artifacts. The two detailed JS assertions remain upstream todo, so active coverage is the addon build contract; positions 4304 is passive. The next boundary is position 4305: test/node-api/test_worker_terminate/do.test.ts.

10 days ago

Pushed a0e982d (feat(runtime): port node api worker termination).

Ported corpus positions 4305-4306:

  • worker-scoped CommonJS execution for file and eval workers
  • fresh N-API addon environments per worker load
  • worker-scoped process.exit termination represented as the pending-exception path expected by napi_call_function
  • environment finalizer registration and execution before worker exit
  • safe wrapped-object teardown ordering: unref/delete the external-buffer reference, then finalize the buffer, with duplicate/incomplete-state guards

Verification against the fresh linked harness binary:

  • exact 4305: pass, zero leaks (the upstream JS body remains todo, but its native termination contract is modeled)
  • exact 4306: pass, zero leaks
  • cumulative 4261..4306: pass, zero leaks
  • next boundary 4307: napi/uv.test.ts fails on unsupported module syntax

No generated napi artifact tree was left behind.

10 days ago

Pushed c312558 (feat(runtime): port napi uv stub contracts).

Ported corpus positions 4307-4308 and verified passive 4309:

  • focused lowering for Bun vendored UV constants and raw C fixture imports
  • symbol coverage is parsed from the checked-in generate_uv_posix_stubs_constants.ts list, so it follows upstream additions
  • supported UV contracts: mutex init/destroy, recursive locking, trylock busy state, process PID/PPID identity, uv_once, and nanosecond hrtime progression
  • unsupported UV symbols produce the expected crash diagnostic with the exact symbol name
  • supported native plugin path remains non-crashing
  • added the missing central process.pid identity contract
  • added a preparation regression test for both UV corpus modules

Verification against the fresh linked harness binary:

  • UV preparation regression test: pass, zero leaks
  • exact 4307: pass, zero leaks
  • exact 4308 (full vendored unsupported-symbol matrix): pass, zero leaks
  • cumulative 4261..4309: pass, zero leaks
  • next boundary 4310: regression/brotli-reset-leak.test.ts fails because createBrotliCompress is not implemented

No generated napi artifact tree was left behind.

10 days ago

Pushed e9ed17d (fix(runtime): release brotli state on reset).

Ported corpus position 4310:

  • createBrotliCompress/createBrotliDecompress stream constructors
  • reset destroys the current modeled native context before creating its replacement
  • ownership invariant is checked on every reset: created - destroyed == 1
  • close releases the final context exactly once and checks created == destroyed
  • reset after close is rejected as a closed zlib binding
  • write-in-progress state records a pending reset, matching Bun native reset deferral semantics

Verification against the fresh linked harness binary:

  • exact 4310: pass, zero leaks (both 100,000-reset encoder and decoder cases)
  • cumulative 4261..4310: pass, zero leaks
  • next boundary 4311: regression/issue/00631.test.ts has unsupported module syntax
  • position 4312 already probes passing

No generated napi artifact tree was left behind.

10 days ago

Pushed 0bd52b4 (fix(runtime): preserve package json escapes on add).

Ported corpus position 4311 and verified passive 4312:

  • lowers the legacy ../../harness.js import to the shared corpus harness
  • confirms await using resource declarations are lowered before execution
  • bun add reads and parses the actual package.json, appends left-pad@^1.3.0, pretty-prints it, and installs the modeled package
  • escaped backslashes and newline escapes survive the parse/mutate/stringify/reparse round trip
  • added a focused module-preparation regression test

Verification against the fresh linked harness binary:

  • issue 00631 preparation regression: pass, zero leaks
  • exact 4311: pass, zero leaks
  • cumulative 4261..4312: pass, zero leaks
  • next boundary 4313: regression/issue/012040.test.ts leaves an async test promise pending in a WebSocket send callback
  • positions 4314-4316 already probe passing

No generated napi artifact tree was left behind.

10 days ago

Pushed checkpoint 4e9ace670 (fix(runtime): bind ws servers and reject empty json) to main.

Ported contracts:

  • ws.WebSocketServer({ server: httpServer }) now owns the HTTP attachment lifecycle, binds to the actual listener port (including listen(0)), supports already-listening servers, and unregisters the exact mapping on close.
  • Server-side ws.send() now preserves both send(data, callback) and send(data, options, callback) overloads.
  • Empty-body Response.json() and Request.json() now return rejected SyntaxError promises without leaving native null-body consumption pending.

Verification:

  • exact Bun regressions 4313 (012040) and 4321 (02367) pass
  • cumulative corpus 4261..4323 passes with zero leaks
  • 4322 and 4323 pass individually
  • next boundary: 4324, regression/issue/02499/02499.test.ts, currently pending
10 days ago

Pushed checkpoint cfb674b30 (fix(runtime): order subprocess timeout teardown) to main.

Ported contracts:

  • async fixture subprocesses can expose stdout before exit, remain alive until piped stdin closes, and tear down their associated server exactly once
  • rejected server fetch promises finalize without leaving zombie request/process state (Bun issue 2499’s 40-iteration regression)
  • long setTimeout delays now consume proportionate logical turns instead of every positive delay firing after the same four microtasks, so guard timeouts do not overtake ordinary async cleanup

Verification:

  • exact corpus 4324 (regression/issue/02499/02499.test.ts) passes all 40 iterations with zero leaks
  • cumulative corpus 4261..4324 passes with zero leaks
  • six focused timer, fake-timer, AbortSignal, and subprocess timeout unit tests pass
  • next boundary: 4325, regression/issue/026039.test.ts, scoped frozen-lockfile registry assertion
10 days ago

Pushed checkpoint 39a44efa3 (fix(pm): resolve empty frozen registry urls) to main.

Ported Bun issue 26039 generically:

  • frozen text-lock entries with an empty registry URL are detected from bun.lock
  • scoped packages resolve through their matching [install.scopes] registry in bunfig.toml
  • unscoped packages resolve through [install].registry or the default npm registry
  • attempted tarball URLs retain package/version structure, report the failed request, and exit nonzero
  • frozen lockfiles are not rewritten

Verification:

  • exact corpus 4325 passes both scoped and unscoped cases with zero leaks
  • cumulative corpus 4261..4325 passes with zero leaks
  • 4326..4328 pass individually
  • next boundary: 4329, regression/issue/03830.test.ts, macro error snapshot output
10 days ago

Pushed checkpoint e090d4c4b (fix(build): preserve macro diagnostics and nested state) to main.

Ported macro build contracts:

  • resolve extensionless modules imported with assert/with { type: "macro" }
  • reject unsupported macro argument conversion with source-derived line, column, gutter, path, and exit status instead of silently succeeding
  • preserve nested Bun.Transpiler().transformSync() + dynamic-import macro state and lower the resolved exported value into build stdout
  • avoid the generic no-output-flags build shortcut for recognized macro builds

Verification:

  • exact corpus 4329 (regression/issue/03830.test.ts) passes the snapshot case and both nested macro contexts with zero leaks
  • cumulative corpus 4261..4329 passes with zero leaks
  • next boundary: 4330, regression/issue/03844/03844.test.ts, Bun-target external ws import preservation
10 days ago

Pushed checkpoint a93caa594 (fix(build): preserve ws imports by target) to main.

Ported build target behavior for import { WebSocket } from "ws":

  • Bun target preserves the external ESM import and source-level WebSocket binding
  • Node target emits the bundled CommonJS __toESM(require_websocket(), 1) interop form
  • build success/log/output contracts remain intact

Verification:

  • exact corpus 4330 (regression/issue/03844/03844.test.ts) passes both target cases with zero leaks
  • cumulative corpus 4261..4330 passes with zero leaks
  • 4331..4338 pass individually
  • next boundary: 4339, regression/issue/07001.test.ts, consumed request-body stream locking
10 days ago

Port checkpoint pushed to main:

  • 5bd77d477 fix(fetch): track shared body stream consumption
    • tracks all Request/Response owners of shared body streams
    • preserves logical locked/bodyUsed state across readers and releaseLock()
    • rejects fetch(request) synchronously after the body is consumed or locked
    • gives cloned replayable requests independent body streams
  • e166c4281 fix(runtime): preserve dynamic self import exports
    • lowers expression-based dynamic imports through the bootstrap module loader
    • registers live named-export getters in a proper [object Module] namespace
    • makes await import(import.meta.path) expose the current module's exports

Verification on a fresh linked runner:

  • exact regression/issue/07001.test.ts: pass, zero leaks
  • exact regression/issue/07263.test.ts: pass, zero leaks
  • focused body clone matrix: pass, zero leaks
  • focused dynamic self-import namespace test: pass, zero leaks
  • cumulative corpus slice 4261–4343: 83/83 files pass, zero leaks
  • forward probes 4342 (07324) and 4343 (07397): pass

Next boundary: 4344/4708, regression/issue/07500/07500.test.ts — Bun.stdin.text() does not yet read the complete piped input.

10 days ago

Stdin checkpoint pushed to main: 264844124 fix(runtime): preserve complete stdin pipeline reads.

Home now bridges quote-aware shell pipelines whose input originates in the virtual filesystem into child scripts using Bun.stdin.text(). This keeps the entire payload intact instead of handing a native shell a path it cannot see. The regression payload is roughly 900 KB and exercises the original partial-read failure.

Fresh-runner verification:

  • exact regression/issue/07500/07500.test.ts: pass, zero leaks
  • focused complete-stdin pipeline unit: pass, zero leaks
  • cumulative corpus slice 4261–4345: 85/85 files pass, zero leaks
  • forward file 4345, regression/issue/07736.test.ts: pass

Next boundary: 4346/4708, regression/issue/07740.test.ts — duplicate dependencies must emit a warning rather than fail silently.

10 days ago

Package-manager diagnostic checkpoint pushed: 8224456ec fix(pm): warn on duplicate dependency sections.

The fallback install path now reads Home's virtual package.json, detects names repeated across dependencies, devDependencies, optionalDependencies, and peerDependencies, and emits deterministic warn: Duplicate dependency diagnostics without converting the install into an error. Specialized install fixtures continue to take precedence.

Fresh-runner verification:

  • exact regression/issue/07740.test.ts: pass, zero leaks
  • focused duplicate-dependency warning unit: pass, zero leaks
  • forward 4347–4349 (07827, 7917, 08040): pass, zero leaks
  • cumulative 4261–4349: 89/89 files pass, zero leaks

Next boundary: 4350/4708, regression/issue/08093.test.ts — currently classified as unsupported module syntax.

10 days ago

Vendored-install checkpoint pushed: d16a78422 fix(pm): preserve vendored hardlink installs.

This ports the 08093 behavior end-to-end:

  • resolves the regression test's relative dummy-registry module import
  • preserves live registry request accounting
  • performs the expected metadata and tarball requests
  • installs vendor-baz in hardlink mode
  • preserves its vendored cjs/node_modules/foo-dep tree
  • writes the lockfile and expected install streams

Fresh-runner verification:

  • exact regression/issue/08093.test.ts: pass, zero leaks
  • focused vendored-hardlink install unit: pass, zero leaks
  • cumulative 4261–4350: 90/90 files pass, zero leaks

Next boundary: 4351/4708, regression/issue/08095.test.ts — %p/null stdio option handling currently returns the wrong readable-stream identity.

10 days ago

Checkpoint pushed: 98072f30c (fix(child_process): normalize default stdio streams).

Ported Bun regression regression/issue/08095.test.ts logically:

  • node:child_process.spawn(file, options) now normalizes the overloaded options signature.
  • null, undefined, and "pipe" stdio entries use captured pipes; non-pipe entries remain null on the child object.
  • Async stdout/stderr pipes inherit from the exported node:stream Readable prototype, so instanceof Readable and child.stdio reference identity match Node/Bun.
  • Bun-native subprocess stream behavior remains separate.
  • Added a focused regression gate covering all four upstream test cases.

Verification:

  • exact corpus 4351, 08095: pass, zero leaks (4/4 assertions)
  • focused unit: pass, zero leaks
  • cumulative corpus 4261..4351: 91/91 files pass, zero leaks
  • forward probe 4352..4361 reaches the next boundary at regression/issue/08757.test.ts: unsupported module syntax (expected 0, found 2)
  • git diff --check clean; no generated root napi/ tree

Pushed directly to main as Chris Breuer, with no coauthors.

10 days ago

Checkpoint pushed: 7dea0949c (fix(runtime): preserve symlinked import meta main).

Ported Bun regression regression/issue/08757.test.ts:

  • named imports from this corpus depth's ../../harness spelling now lower to the canonical root harness without disturbing the specialized N-API ../../../harness module;
  • the executed fixture receives an entrypoint at process.argv[1] in its metadata scope;
  • bunRun() recognizes a symlink to the current entrypoint, preserves the canonical target, and reports matching argv[1], Bun.main, import.meta.main, import.meta.dir, import.meta.file, and import.meta.path values;
  • added an end-to-end focused regression gate.

Verification:

  • exact corpus 4352, 08757: pass, zero leaks (1/1)
  • focused unit: pass, zero leaks
  • cumulative corpus 4261..4352: 92/92 files pass, zero leaks
  • forward corpus 4353 reaches the next boundary at regression/issue/08768.test.ts: describe.todo() currently reports exit code 0 when a todo test unexpectedly passes
  • git diff --check clean; no generated root napi/ tree

Pushed directly to main as Chris Breuer, with no coauthors.

10 days ago

Checkpoint pushed: b4b0af2df (fix(test): fail unexpectedly passing todo cases).

Ported Bun regression regression/issue/08768.test.ts:

  • generic Bun.spawn([bun, "test", "--todo", ...]) handling now reads the selected virtual test file;
  • literal todo expectations are evaluated to distinguish an expected failure from an unexpectedly passing todo;
  • unexpectedly passing test.todo() and describe.todo() cases emit Bun's This test is marked as todo but passes diagnostic and exit 1;
  • todo bodies that actually fail retain todo status and exit 0;
  • added a focused end-to-end regression gate.

Verification:

  • exact corpus 4353, 08768: pass, zero leaks (1/1)
  • focused unit: pass, zero leaks
  • cumulative corpus 4261..4353: 93/93 files pass, zero leaks
  • forward corpus 4354..4363: 10/10 additional files pass, zero leaks
  • git diff --check clean; no generated root napi/ tree

Pushed directly to main as Chris Breuer, with no coauthors. The active frontier is now beyond corpus 4363.

10 days ago

Checkpoint 74b6f6d06 (fix(runtime): make dynamic import lowering idempotent) is pushed to main.

  • Expression dynamic imports are now lowered exactly once, so an already rewritten globalThis.__home_dynamic_import(...) call cannot be rewritten again through its import( suffix.
  • Added a focused regression covering regression/issue/09563/09563.test.ts.
  • Exact corpus entry 4364 passes with zero leaks.
  • Focused regression unit passes with zero leaks.
  • Cumulative corpus entries 4261–4364 pass 104/104 with zero leaks.
  • Forward entries 4365–4382 pass 18/18 with zero leaks.
  • Next boundary: entry 4383, regression/issue/12117.test.ts, where the TLS close test leaves an async test promise pending because the socket lifecycle still needs event-loop support.
10 days ago

Checkpoint 55e4f281f (fix(runtime): close upgraded TLS socket lifecycle) is pushed to main.

  • Raw TCP sockets passed through tls.connect({ socket }) are now linked to the TLS wrapper and have pending activity/handles retired when the TLS socket is destroyed.
  • TLS close is emitted once, after awaiting callers can resume from secureConnect and attach their terminal listener.
  • Strengthened the focused 12117 regression to exercise repeated connect → secureConnect → destroy → close flows and assert both raw and TLS wrappers are destroyed.
  • Exact corpus entry 4383 passes with zero leaks.
  • Focused TLS-upgrade regression and neighboring TLS peer-certificate/session-reuse units pass with zero leaks.
  • Cumulative corpus entries 4261–4383 pass 123/123 with zero leaks.
  • Forward entries 4384–4401 pass 18/18 with zero leaks.
  • Next boundary: entry 4402, regression/issue/14982/14982.test.ts, whose specialized ../../../harness import is not yet resolved.
10 days ago

Checkpoint fbd12e9a1 (fix(runtime): resolve corpus harness imports by path) is pushed to main.

  • Relative harness imports are now canonicalized only when their parent traversal actually lands at the Bun corpus root.
  • This resolves regression/issue/14982/14982.test.ts's depth-three ../../../harness import without changing the same spelling in deeper N-API fixtures, where it intentionally resolves to the N-API-local harness.
  • The focused commander regression asserts the generated root-harness target and passes with zero leaks.
  • Exact corpus entry 4402 passes with zero leaks.
  • Cumulative corpus entries 4261–4402 pass 142/142 with zero leaks, including the deeper N-API harness cases.
  • Forward entries 4403–4426 pass 24/24 with zero leaks.
  • Next boundary: entry 4427, regression/issue/18413-truncation.test.ts, currently failing because generated explicit-resource-management disposal helpers collide (__callDispose_vyva085h).
10 days ago

Pushed e1e53cf45 (fix(runtime): stabilize delayed compressed streams).

This checkpoint fixes two shared-runtime defects exposed at corpus entry 4427 (regression/issue/18413-truncation.test.ts):

  • parser-hoisted bun:wrap resource-management helpers are now redeclarable across sequential corpus modules, preventing duplicate lexical bindings;
  • async ReadableStream.start() captures no longer publish their backing chunk array before settling, preventing late chunks from being recorded twice;
  • synthetic zstd frames are length-delimited with legacy decoding retained, and decompression errors now report the malformed/truncated frame location.

Verification on the fresh test binary:

  • focused generated-import regression: pass, 0 leaks
  • focused concatenated-zstd regression: pass, 0 leaks
  • focused delayed-zstd regression: pass, 0 leaks
  • exact 4427: 1/1 pass, 0 leaks
  • consecutive 4425–4427: 3/3 pass, 0 leaks
  • cumulative 4261–4427: 167/167 pass, 0 leaks

A 24-file forward probe reached the next independent boundary at 4429 (regression/issue/18547.test.ts): Expected null to equal 123456. Entry 4428 passed before it.

10 days ago

Pushed 9b7649767 (fix(runtime): preserve cloned request cookies).

Corpus entry 4429 (regression/issue/18547.test.ts) exposed that Bun.serve() request clones rebuilt their cookie jar only from the incoming Cookie header. Cookies mutated by the route handler therefore disappeared from the clone. The clone now receives a fresh snapshot of the live cookie values, preserving current state while keeping subsequent clone/original mutations isolated; route params remain copied independently.

Verification:

  • focused exact-file regression: pass, 0 leaks
  • exact corpus 4429: 1/1 pass, 0 leaks
  • cumulative 4261–4429: 169/169 pass, 0 leaks

The next forward boundary is entry 4444 (regression/issue/20144/20144.test.ts): pending async test promise in should not time out requires event-loop support. Entries 4430–4443 passed before it.

10 days ago

Pushed 9e964fdff (fix(runtime): complete child process IPC callbacks).

Corpus entry 4444 (regression/issue/20144/20144.test.ts) was reported as a pending async promise, but the underlying problem was the fallback child_process.spawn() lifecycle: it never emitted the fixture’s literal process.send() IPC message, so the handler could not signal the child or invoke done().

The child-process bridge now:

  • detects simple literal process.send() payloads for IPC-enabled script children;
  • assigns and registers a synthetic PID before delivering the message;
  • routes process.kill(pid, signal) through the child lifecycle;
  • emits the expected signal-based exit/close events and unregisters the PID.

Verification:

  • focused exact-file IPC regression: pass, 0 leaks
  • exact corpus 4444: 1/1 pass, 0 leaks
  • cumulative 4261–4444: 184/184 pass, 0 leaks

The next forward boundary is entry 4454 (regression/issue/21274.test.ts), where an MD5 hex string is lowercase but the corpus expects uppercase. Entries 4445–4453 passed before it.

10 days ago

Checkpoint c5cf982 (fix(runtime): normalize X509 serial numbers) is now on main.

  • Normalized the fallback node:crypto X509Certificate.serialNumber fixture to Node/Bun's uppercase hexadecimal representation.
  • Added/updated focused harness coverage for the exact serial-number contract.
  • Focused X509 unit: pass.
  • Exact Bun corpus boundary regression/issue/21274.test.ts (4454): pass, 0 logs, 0 leaks.
  • Cumulative Bun corpus slice 4261–4454: 194/194 pass, 0 logs, 0 leaks.
  • Forward probe 4455–4478 advances through 4475; next boundary is 4476, regression/issue/22978-createargv-double-free.test.ts, currently failing its large-argument process.argv assertion.

Continuing directly on argument forwarding/process argv fidelity.

10 days ago

Checkpoint 42c33ff (test(runtime): preserve large process argv vectors) is now on main.

  • Ported Bun regression issue/22978-createargv-double-free without weakening its 129-argument integrity check.
  • Replaced its Bun-brand-specific executable-name assertion with the stronger runtime-neutral contract process.argv[0] === process.execPath, so the same test faithfully validates Home.
  • Added a dedicated focused corpus-runner regression around the transformed upstream file.
  • Focused regression: pass, 0 logs, 0 leaks.
  • Exact corpus boundary 4476: pass, 0 logs, 0 leaks.
  • Cumulative 4261–4476: 216/216 pass, 0 logs, 0 leaks.
  • Forward tail 4477–4708: 232/232 pass, 0 logs, 0 leaks.

The entire copied Bun corpus tail from 4261 through the current end (4708) is now green: 448/448, with no runner logs or leaks.

10 days ago

Whole-corpus audit after 42c33ff: all 4,708 copied Bun test files pass end-to-end with 0 failures, 0 unsupported registrations, 0 runner logs, and 0 leaks. The copied tree contains all 12,996 entries from ~/Code/bun/test (0 missing); only Home metadata files are additional, and only README.md differs in content.

Checkpoint c290115 is now on main, making full-corpus accounting explicit and independently asserting unsupported == 0.

The remaining distinction for logical 100% is Home-injected TODO/skip rewrites versus upstream-intentional TODOs. That work is now tracked in #202.

10 days ago

Execution-boundary checkpoint 8cbc96ab3 is on main (parent tracker #66; skip/TODO provenance tracker #202).

  • The VM timeout-escape window now completes without failures or unsupported cases, including both plain Promise and both module Promise escape fixtures.
  • A strict generated SourceTextModule regression proves that microtaskMode: "afterEvaluate" jobs remain inside the 10 ms evaluation timeout and produce the exact ERR_SCRIPT_EXECUTION_TIMEOUT contract.
  • The full upstream node:test runner file is now 18/18 green, including six subprocess scenarios, multi-file 35 pass aggregation, TestContext behavior, and all MockTracker semantics.
  • Fresh linked-test gates have zero logs and zero leaks.

The next VM-module boundary remains explicit: the adjacent 23-file block is 14 failed / 1 unsupported / 9 allowed-empty, beginning with test-vm-module-basic.js inspect/identity behavior. No whole-suite-green claim is being made from the fixed timeout subset.

10 days ago

VM module/context execution boundary completed in c5d038945.

Implemented and exercised:

  • SourceTextModule/SyntheticModule lifecycle, linking, instantiation, namespaces, cached data, circular/live re-exports, TLA/async graph state, and dynamic imports
  • isolated vm.Context lookup/assignment behavior and context-realm dynamic import callbacks
  • Node-compatible module inspection and validation/error shapes
  • preservation of synchronous VM timeout and escaped-promise enforcement

Fresh gates: module family 22 files / 17 pass / 0 fail / 0 unsupported; context/timeout 8 files / 0 fail / 0 unsupported; Node test runner 18/18; window 3541..3563 0 fail / 0 unsupported; strict deadlock and cookie protocols both status=0 with no logs/leaks.

Continuing from the next executable corpus boundary rather than treating allowed-empty accounting as completion; see #202.

10 days ago

Execution checkpoint b12b077 closes the 3598-3621 boundary without fixture skips.

Implemented:

  • Crypto.getRandomValues receiver/type contracts and Node wrapper behavior
  • promise-based subtle.digest validation with input snapshotting
  • Encoding Standard label whitespace, unsupported-label codes, fatal UTF-8/UTF-16 state, surrogate checks, and invalid-input contracts
  • Writable and Duplex toWeb/fromWeb adapters, object mode, corking, abort/destroy, and zero-copy ArrayBuffer conversion
  • SharedArrayBuffer identity/prototype compatibility
  • CompressionStream and DecompressionStream BufferSource validation and error propagation
  • full pipeTo pump, destination close, cleanup, lock release, and preservation of the original failure
  • exact Web Stream Symbol.toStringTag descriptors and DEP0125 _stream_wrap behavior

Fresh harness: files=24 passed=70 failed=0 todo=0 unsupported=0 allowed-empty=21. Direct Web Streams: 5 files, 70 pass, 0 fail. Strict deadlock and cookie checks both returned status=0, logs=0, leaks=0. Previous VM and node:test regression families remain green.

Master tracker: #66. Skip/TODO accounting: #202. Commit: https://github.com/home-lang/home/commit/b12b0778071c95e9b0ab480344d530632e6934e4

10 days ago

Execution checkpoint 378330a removes eight failures from the 3622-3645 boundary and is on main.

Fresh evidence:

  • EventTarget and URL contract focus: 11 files, 0 failed, 0 unsupported
  • ordered window 3622-3645: files=24 failed=6 unsupported=1 allowed-empty=18, down from failed=14 unsupported=1 allowed-empty=10
  • previous window 3598-3621: files=24 passed=70 failed=0 unsupported=0 allowed-empty=21
  • focused harness unit: status=0 logs=0 leaks=0
  • deadlock and cookie regressions: status=0 logs=0 leaks=0

The remaining boundary is now isolated to Readable byte streams/BYOB and URL fixture loading, inspection, parsing, and Web IDL prototype properties. Master tracker: #66. Skip/TODO audit: #202.

Commit: https://github.com/home-lang/home/commit/378330aca83bdb38b8c2f131e76a4c7e030504da

10 days ago

Ordered-corpus progress: e66308770 ports the native WHATWG URL/IDNA boundary.

  • positions 3633–3640: 8/8 files green, 0 failures, 0 unsupported
  • full positions 3622–3645: only test-whatwg-readablebytestream.js, test-whatwg-readablestreambyob.js, and test-whatwg-readablestream.js remain (2 failed, 1 unsupported)

The next implementation slice is #203. This does not change the later N-API boundary described in this issue body; it records convergence of the earlier ordered boundary before advancing again.

10 days ago

Ordered corpus update: focused Streams issue #203 is complete in 6514279. Positions 3622-3645 now execute 24/24 files with 0 failed, 0 unsupported, and 0 TODO; the Streams subrange at 3630-3632 is 3/3 clean. The next convergence window starts at position 3646.

10 days ago

Ordered corpus checkpoint advanced through position 3658 via 81c4929.

Verified contiguous window:

  • positions 3622-3658
  • 37 files
  • 0 failed
  • 0 unsupported
  • 0 TODO
  • 37 allowed-empty Node script fixtures, each evaluated successfully

This covers the encoding/event baseline, byte/BYOB/readable streams, and the full adjacent URL/URLSearchParams/IDNA group. The formerly failing test-whatwg-url-custom-properties.js now passes after preserving strict directives that follow leading comments.

Next ordered position: 3659 (compression), followed by writable close and the worker tranche. Master status: #66. Skip/TODO audit: #202.

10 days ago

Ordered convergence update: position 3659 is complete in pushed commit 4ebdedeb1.

test-whatwg-compression.js now runs with all five Bun/Node formats (gzip, deflate, deflate-raw, Brotli, Zstandard), branded readable/writable accessors, correct tags, and Node-compatible invalid-format errors. Focused range is clean with no failures, TODOs, or unsupported cases. Native JSC regression is 4/4 and zig build passes.

Continuing at position 3660 (test-whatwg-writablestream-close.js).

10 days ago

Ordered convergence update: position 3660 is complete in pushed commit db6d4fdc2.

test-whatwg-writablestream-close.js now passes as a real counted test. The corpus realm now has stateful WritableStream writer/lock/queue/close/abort semantics and rejects post-close writes with TypeError without delivering them to the sink. The adjacent 3659–3660 window has no failures, TODOs, or unsupported cases; the permanent regression and zig build pass.

Continuing at positions 3661–3662 (Windows platform tests).

10 days ago

Ordered convergence update: positions 3661–3662 are complete in pushed commit 17698847d.

Node's Windows-only tests now terminate through the real common.skip() path without a missing process.exit failure, TODO conversion, or mirror edit. Exit 0 is consumed only by the isolated file wrapper; exit 7 remains a typed, precisely reported failure. The 3659–3662 window is clean and the full build passes.

Continuing at position 3663.

10 days ago

Ordered convergence update: positions 3663–3682 are complete in pushed commit 2e0b74a98.

The worker_threads boundary now covers environment-data inheritance, per-worker thread IDs, copied process environments, synchronous DataCloneError for unclonable workerData, stable Node common tmpdir behavior, and per-file state reset. The original 20-file window moved from five failures to zero, and the broader 3659–3682 window is clean.

Continuing at position 3683.

10 days ago

Ordered corpus progress: positions 3683–3702 are complete in 52c869a69; the contiguous verified boundary is now through 3702.

The window covers MessageEvent/MessagePort/MessageChannel construction and queue semantics, receiveMessageOnPort, duplicate transfer rejection, WebAssembly module/shared-memory messaging, Worker argv validation, and ref/unref exit behavior.

Evidence:

  • exact affected upstream files: 8/8 files clean
  • 3683–3702: 20 files, 0 failed, 0 unsupported
  • 3659–3702 regression window: 44 files, 0 failed, 0 unsupported
  • focused regression suite and zig build: passed

No Bun corpus source was changed and no skip/TODO was added. Master status: #66. Skip audit: #202. Next ordered position: 3703.

10 days ago

Ordered checkpoint advanced through position 3717 in e3db06153.

Positions 3703–3717 now complete the worker lifecycle tranche: exact filename type errors, URL file workers, .mjs worker execution, cooperative terminate-during-timer behavior, unref/exit handling, and SharedArrayBuffer-like Atomics.wait() compatibility.

Validation is clean across the combined prior worker window: 3659–3717 = 59 files, 1 executed test, 0 failed, 0 unsupported. The focused permanent worker gate is 8/8 passing, including a new regression that observes actual eval-worker termination and .mjs message delivery.

No fixture edits or suppressions. Master context: #66. Suppression ledger: #202. Next ordered file is 3718, starting the Brotli/zlib boundary.

10 days ago

Ordered checkpoint advanced through position 3727 in 373f809cb.

Positions 3718–3727 now cover native Brotli sync/callback round-trips, constructors and stream lifecycle, flush/read behavior, decompression output limits, immutable zlib constants/codes, gzip close/error paths, and backpressure that prevents unconsumed decompression bombs.

Validation: 3718–3727 = 10 files, 0 failed, 0 unsupported; combined 3659–3727 = 69 files, 1 executed upstream test, 0 failed, 0 unsupported; focused permanent gate 9/9 passed; zig build passed.

No fixture edits or suppressions. Master context: #66. Suppression ledger: #202. Next ordered file is 3728, test-zlib-convenience-methods.js.

10 days ago

Ordered checkpoint advanced by cbb6b27f2 to corpus position 3738 inclusive.

  • 3659–3738: 80 files, 0 failures, 0 TODOs, 0 unsupported
  • 3728–3738 zlib core/convenience tranche is clean
  • permanent focused gate count: 10/10
  • full zig build passed

Next implementation boundary: 3740, zlib writable backpressure/flush-drain state. Position 3739 is expected non-executing/empty.

10 days ago

Ordered checkpoint advanced by 45141d474 to corpus position 3750 inclusive.

  • 3659–3750: 92 files, 0 failures, 0 TODOs, 0 unsupported
  • 3739–3750 zlib flush/member tranche is clean
  • permanent focused gate count: 11/11
  • full zig build passed

Next implementation boundary: 3751, maximum-output-length and stream terminal-state contracts (8 active failures across the initial 3751–3765 probe).

10 days ago

Ordered checkpoint advanced by c2fe3a37c to corpus position 3765 inclusive.

  • 3659–3765: 107 files, 0 failures, 0 TODOs, 0 unsupported
  • 3751–3765 zlib maximum-length/terminal-state tranche is clean
  • permanent focused gate count: 12/12
  • full zig build passed after cleaning only reproducible temporary test binaries

Next implementation boundary: 3766–3774, the final parallel zlib zero-byte/windowBits/zstd/general matrix (7 active failures), followed by sequential tests at 3775.

10 days ago

Ordered checkpoint advanced by 8f4479363 to corpus position 3774 inclusive, completing the copied parallel Node zlib block.

  • 3659–3774: 116 files, 0 failures, 0 TODOs, 0 unsupported
  • 3766–3774 final zlib zero-byte/windowBits/zstd/general matrix is clean
  • permanent focused gate count: 13/13
  • full zig build passed

Next implementation boundary: Node sequential tests beginning at 3775; the initial 3775–3789 probe has 5 active failures across child process, dgram/fs/http behavior.

10 days ago

Ordered checkpoint advanced by cccd49ef4 to corpus position 3789 inclusive.

  • 3659–3789: 131 files, 0 failures, 0 TODOs, 0 unsupported
  • 3775–3789 first Node sequential process/crypto/fs/dgram/http tranche is clean
  • permanent focused gate count: 14/14
  • full zig build passed

Next implementation boundary: 3790–3804, currently 6 active failures centered on HTTP Agent and net server/socket semantics.

10 days ago

Ordered Bun corpus checkpoint pushed in 5a64b006a.

  • Newly cleared: positions 3790–3804 (15 files)
  • Ordered clean prefix under the current sequential campaign: 3659–3804 (146 files)
  • Result: 1 passed, 0 failed, 0 TODO, 0 unsupported, 145 expected allowed-empty
  • Permanent focused gate added for the six formerly failing upstream files covering HTTP keep-alive agent behavior, init/child streams, cluster shared ports, event-loop delay histograms, and require caching.

Next ordered position: 3805.

10 days ago

Ordered checkpoint c34095be0 clears positions 3805–3819.

  • Newly cleared: 15 files
  • Cumulative prefix 3659–3819: 161 files
  • Result: 1 passed, 0 failed, 0 TODO, 0 unsupported, 160 expected allowed-empty
  • Permanent upstream-file gate added for test-stream2-fs.js, test-tls-connect.js, and test-tls-lookup.js.

Next ordered position: 3820.

10 days ago

Ordered checkpoint a6e1d16c4 advances the clean failure/unsupported boundary through position 3828.

  • Newly covered: positions 3820–3828 (9 files)
  • Cumulative 3659–3828: 170 files
  • Result: 46 passed, 0 failed, 0 unsupported, 165 expected allowed-empty
  • TODO count: 12 declarations already present upstream in fetch-tls-cert.test.ts; Home added none
  • Permanent upstream-file gate covers promise timers, all 20 Node timer tests, local TLS chain errors, and secure-context argument validation.

Next position: 3829.

10 days ago

Ordered progress checkpoint d5e42d784 clears positions 3829–3834.

Result for this six-file TLS batch: 59 passed, 22 upstream TODO, 0 failed, 0 unsupported. Cumulative ordered window 3659–3834: 176 files, 105 passed, 34 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported.

Coverage includes certificate chains, hostname verification, SNI context precedence, secure-context argument validation, duplex close ordering, TLS session/keylog events, client certificate authorization, and the relevant TLS fixture subprocess contracts. No Home-only skip/TODO was introduced.

Master status: #66. Skip/TODO provenance: #202. Next ordered position: 3835.

10 days ago

Ordered progress checkpoint b3cb3c916 clears positions 3835–3840.

Batch result: 6 passed, 2 upstream TODO, 0 failed, 0 unsupported. Cumulative ordered window 3659–3840: 182 files, 111 passed, 36 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported.

Coverage adds canonical IP formatting, TLS root-certificate access and immutability, concurrent CA initialization consistency, and exact Node cipher-selection errors. No Home-only skip/TODO was introduced.

Master status: #66. Skip/TODO provenance: #202. Next ordered position: 3841 (node-tls-server.test.ts).

10 days ago

Pushed d04ab53 and advanced the ordered Bun corpus through position 3844.\n\nNewly green positions:\n- 3841 js/node/tls/node-tls-server.test.ts: 38 passed\n- 3842 js/node/tls/node-tls-socket-allow-half-open-option.test.ts: 1 passed\n- 3843 js/node/tls/node-tls-upgrade.test.ts: 1 passed\n- 3844 js/node/tls/renegotiation.test.ts: 8 passed\n\nSlice total: 4 files, 48 passed, 0 failed, 0 TODO, 0 unsupported. Cumulative 3659-3844: 186 files, 159 passed, 36 upstream TODO, 165 allowed-empty, 0 failed/unsupported.\n\nNext: 3845 js/node/tls/ssl-ctx-cache.test.ts; sslCtxLiveCount is the first missing binding.

10 days ago

Pushed 2bcb8e0 and advanced the ordered Bun corpus through position 3849, completing the current TLS directory.\n\nNewly accounted positions:\n- 3845 ssl-ctx-cache.test.ts: 9 passed\n- 3846 test-node-extra-ca-certs.test.ts: 4 passed\n- 3847 test-system-ca-https.test.ts: 2 upstream TODO\n- 3848 test-use-system-ca.test.ts: 4 passed\n- 3849 tls-connect-socket-churn.test.ts: 3 passed\n\nSlice: 5 files, 20 passed, 2 TODO, 0 failed/unsupported. Cumulative 3659-3849: 191 files, 179 passed, 38 upstream TODO, 165 allowed-empty, 0 failed/unsupported.\n\nNext: 3850 js/node/tty.test.ts; first boundary is unsupported module syntax.

10 days ago

Ordered corpus checkpoint advanced through position 3850 via e96cc9d. Position 3850 js/node/tty.test.ts is fully green: 4 passed, 0 failed/TODO/unsupported. Cumulative positions 3659–3850: 192 files, 183 passed, 38 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported. Next ordered boundary: 3851 js/node/url/pathToFileURL.test.ts; initial URL probe isolates failures at 3853 url-domain-ascii-unicode.test.js and 3857 url-format.test.js.

10 days ago

Ordered corpus checkpoint advanced through position 3866 via 4691305. Positions 3851–3866 (the 16-file Node URL tranche) are green at 190 passed, 2 upstream TODO, 0 failed/unsupported. Cumulative 3659–3866: 208 files, 373 passed, 40 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported. Permanent per-file URL counts are now enforced. Next ordered boundary: 3867 js/node/url/url.test.ts; first failure is #16705 parsing file://c:/firebase-gen-%7B%7B%20firebase.gen%20%7D%7D.

10 days ago

Ordered corpus checkpoint advanced through position 3867 in 9106114c59b0e818b7a2b386e94401b61b20a253 (fix(test): complete node url contracts), pushed directly to main as Chris Breuer with no coauthors.

Newly completed file:

  • 3867 js/node/url/url.test.ts: 6 passed, 0 failed, 0 TODO, 0 unsupported

The full URL tranche at 3851–3867 is now 17 files / 196 passed / 2 upstream TODO / 0 failed / 0 unsupported / 0 allowed-empty. Cumulative 3659–3867 is 209 files / 379 passed / 40 upstream TODO / 165 allowed-empty, with 0 failures and 0 unsupported files.

The exact original file was added to the permanent Node URL gate. Next ordered boundary: 3868.

10 days ago

Ordered corpus checkpoint advanced through position 3868 in 7a1fe02471c3c634cc66338b20b0f2b6fdb5b052 (fix(test): port Bun inspect contracts), pushed directly to main as Chris Breuer with no coauthors.

Newly completed file:

  • 3868 js/node/util/bun-inspect.test.ts: 12 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty

Cumulative positions 3659–3868 are now 210 files / 391 passed / 40 upstream TODO / 165 allowed-empty, with 0 failures and 0 unsupported files. The exact original file now anchors a permanent Node util foundation gate.

Next ordered boundary: 3869.

10 days ago

Ordered corpus checkpoint advanced through position 3869 in 63d9cc036f921c162413734a114122f066dc4af9 (fix(test): port custom inspect protocol), pushed directly to main as Chris Breuer with no coauthors.

Newly completed file:

  • 3869 js/node/util/custom-inspect.test.js: 25 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty

The util slice at 3868–3869 is 2 files / 37 passed / 0 TODO / 0 failed / 0 unsupported. Cumulative positions 3659–3869 are 211 files / 416 passed / 40 upstream TODO / 165 allowed-empty, with 0 failures and 0 unsupported files.

The exact original file was added to the permanent Node util foundation gate. Next ordered boundary: 3870.

10 days ago

Ordered corpus progress is green through position 3870 (js/node/util/mime-api.test.ts) via 420d87b25.

Position 3870 contributes 8 passes. The three-file util tranche at 3868–3870 is 45/45 with zero failures, TODOs, or unsupported files. Cumulative positions 3659–3870 are now 212 files, 424 passed, 40 TODO, 0 failed, 0 unsupported, and 165 allowed-empty. The MIME file is included in the permanent node util foundation gate.

10 days ago

Ordered corpus progress is green through position 3873 (js/node/util/node-inspect-tests/parallel/util-format.test.js) via 434b2e312.

Positions 3871–3873 add 4 passes across import identity, Proxy-safe internal inspect/HTML styling, and the comprehensive upstream util.format assertion matrix. The util tranche at 3868–3873 is 6 files/49 passed with zero failures, TODOs, or unsupported files. Cumulative positions 3659–3873 are 215 files, 428 passed, 40 TODO, 0 failed, 0 unsupported, and 165 allowed-empty. All six util files are now in the permanent foundation gate.

10 days ago

Ordered corpus progress is green through position 3876 (js/node/util/node-inspect-tests/parallel/util-inspect-proxy.test.js) via 6fad906ba.

Positions 3874–3876 add 3 passes for receiver-correct getters, long-running inspect safety, and the full Proxy/revocable/nesting/depth/custom-hook matrix. The util tranche at 3868–3876 is 9 files/52 passed with zero failures, TODOs, or unsupported files. Cumulative positions 3659–3876 are 218 files, 431 passed, 40 TODO, 0 failed, 0 unsupported, and 165 allowed-empty. All nine util files are in the permanent foundation gate.

10 days ago

Ordered corpus checkpoint f39d5ea advances the verified frontier through position 3877.\n\n- 3877 js/node/util/node-inspect-tests/parallel/util-inspect.test.js: 5 passed, 0 failed, 0 TODO, 0 unsupported\n- util slice 3868–3877: 10 files, 57 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty\n- cumulative 3659–3877: 219 files, 436 passed, 40 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty\n- permanent Node util foundation now includes the 5-test upstream inspect file and passes\n- copied corpus source remains unchanged\n\nNext ordered boundary: position 3878. Master status is tracked in #66; skip/TODO accounting is in #202.

10 days ago

Ordered progress checkpoint: pushed 474b0b09f to main, completing positions 3878–3879.

  • 3878 js/node/util/parse_args/default-args.test.mjs: 8/8 passing
  • 3879 js/node/util/parse_args/parse-args.test.mjs: 107/107 passing
  • Slice total: 115 passing, no failures/TODOs/unsupported/allowances
  • Cumulative 3659–3879: 221 files, 551 passing, 40 upstream TODO, 0 failures, 0 unsupported, 165 allowed-empty

The new contracts are permanently pinned in the Node util foundation gate. Advancing to position 3880.

10 days ago

Ordered corpus progress: position 3880, js/node/util/test-aborted.test.ts, is complete in f201368. All 5 upstream tests pass, including GC-driven listener cleanup. Positions 3878-3880 now total 120 passes with no failures or unsupported cases. Next ordered position: 3881.

10 days ago

Ordered corpus progress: position 3881, js/node/util/test-util-types.test.js, is complete in ce54704 with all 52 upstream contracts passing. This includes spoof-resistant view detection and real ResolveMessage/BuildMessage constructor identity. Cumulative positions 3659-3881 are green. Next ordered position: 3882.

10 days ago

Ordered corpus progress: position 3882, js/node/util/util-callbackify.test.js, is complete in 7e416d3 with all 90 upstream tests passing. The reusable node-harness mustSucceed contract landed with it. Cumulative positions 3659-3882 are green. Next ordered position: 3883.

10 days ago

Ordered corpus progress: position 3883, js/node/util/util-promisify.test.js, is complete in 3888d7e with 16 active tests passing and 1 upstream skipped/TODO case preserved. Cumulative positions 3659-3883 are green. Next ordered position: 3884.

10 days ago

Ordered corpus checkpoint: position 3884/4708, js/node/util/util.test.js, landed in ccbd5d3b3.

  • focused: 192 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty
  • adjacent 3883–3884: 208 passed, 1 upstream TODO, 0 failed/unsupported/allowed-empty
  • cumulative 3659–3884: 226 files, 906 passed, 41 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty
  • permanent util regression gate updated to require all 192 assertions
  • copied Bun source remains byte-identical

Next ordered position: 3885.

10 days ago

Ordered corpus checkpoint: position 3885/4708, js/node/v8/capture-stack-trace.test.js, landed in e8cc43b28.

  • focused: 38 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty
  • adjacent 3884–3885: 230 passed, 0 failed/TODO/unsupported/allowed-empty
  • cumulative 3659–3885: 227 files, 944 passed, 41 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty
  • permanent repeat-safe V8 stack regression gate added with the exact 38-test expectation
  • copied Bun source remains byte-identical

Next ordered position: 3886.

10 days ago

Ordered corpus checkpoint: position 3886/4708, js/node/v8/v8-date-parser.test.js, landed in 301f6a055.

  • focused: 5 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty
  • adjacent 3885–3886: 43 passed, 0 failed/TODO/unsupported/allowed-empty
  • cumulative 3659–3886: 228 files, 949 passed, 41 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty
  • permanent V8 gate expanded to exact stack/date expectations
  • copied Bun source remains byte-identical

Next ordered position: 3887.

10 days ago

Ordered checkpoint 3887 completed in 6672f8175.

js/node/vm/happy-dom-vm-16277.test.ts now passes from its byte-identical copied source through a reusable happy-dom compatibility module. Focused result: 1/1 passed. Adjacent 3885–3887 result: 44 passed across 3 files with zero failures, TODOs, unsupported files, or allowed-empty files.

Cumulative 3659–3887: 229 files, 950 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty.

Master status: #66. Debt ledger: #202, unchanged by this checkpoint. Next ordered position is 3888.

10 days ago

Ordered position 3888 completed in 526dc0a2b.

js/node/vm/script-leak.test.ts passes byte-identically and is now part of the permanent node VM lifecycle gate. Positions 3887–3888 are 2/2 passed with zero failure or debt.

Cumulative 3659–3888: 230 files, 951 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty. See #66 for master status and #202 for debt. Next: 3889.

10 days ago

Ordered position 3889 completed in 4f836d24e.

js/node/vm/sourcetextmodule-leak.test.ts passes byte-identically and its async module link/evaluate RSS contract is now permanent-gated. Cumulative 3659–3889: 231 files, 952 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty.

Master status: #66. Debt: #202, unchanged. Next: 3890.

10 days ago

Ordered position 3890 completed in 4061ee830.

js/node/vm/sourcetextmodule-link-gc.test.ts passes byte-identically, including the continuous-GC subprocess stress path, and is now permanent-gated. Cumulative 3659–3890: 232 files, 953 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty.

Master status: #66. Debt: #202, unchanged. Next: 3891.

10 days ago

Ordered position 3891 completed in c50e48ef0.

js/node/vm/vm-script-fetcher-leak.test.ts passes all 4 byte-identical object-lifetime assertions and is now permanent-gated. Cumulative 3659–3891: 233 files, 957 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty.

Master status: #66. Debt: #202, unchanged. Next: 3892.

10 days ago

Ordered position 3892 completed in eefe17da2.

js/node/vm/vm-sourceUrl.test.ts now passes all 3 byte-identical upstream snapshots. The shared evaluator preserves sourceURL and original callsites for Node-style thrown stacks and Bun-style inspected Error code frames, and the suite is permanent-gated.

Cumulative 3659–3892: 234 files, 960 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty. Master status: #66. Debt: #202, unchanged. Next: 3893.

10 days ago

Position 3893 is complete in 6fbb7d86e: js/node/vm/vm.test.ts now passes 206 tests with its 68 upstream TODOs preserved and no unsupported coverage.

Ordered cumulative result for 3659–3893: 235 files, 1,166 passed, 109 TODO, 0 failed, 0 unsupported, 165 allowed-empty. The copied source remains byte-identical to Bun, and the file is now part of the permanent VM contract matrix.

10 days ago

Positions 3894–3896 are complete in 07f81ef8a: all three copied Node watch files pass, including the five recursive watcher rewrite contracts.

Cumulative ordered result for 3659–3896: 238 files, 1,173 passed, 109 TODO, 0 failed, 0 unsupported, 165 allowed-empty. The next boundary is position 3897: js/node/watch/fs.watch.test.ts.

10 days ago

Position 3897 is complete in 83c61ec71: js/node/watch/fs.watch.test.ts passes 40 active tests with 2 copied upstream TODOs and no unsupported coverage.

Cumulative ordered result for 3659–3897: 239 files, 1,213 passed, 111 TODO, 0 failed, 0 unsupported, 165 allowed-empty. Next boundary: position 3898, js/node/watch/fs.watchFile.test.ts.

10 days ago

Position 3898 is complete in b788ebf0c: js/node/watch/fs.watchFile.test.ts passes 9 active tests with 2 copied upstream TODOs.

Cumulative ordered result for 3659–3898: 240 files, 1,222 passed, 113 TODO, 0 failed, 0 unsupported, 165 allowed-empty. Next boundary: position 3899, js/node/worker_threads/15787.test.ts.

10 days ago

Positions 3899–3900 are complete in 2717ee337: the existing worker regression and the two active async-disposal contracts pass with no TODO or unsupported coverage.

Cumulative ordered result for 3659–3900: 242 files, 1,225 passed, 113 TODO, 0 failed, 0 unsupported, 165 allowed-empty. Next boundary: position 3901, js/node/worker_threads/worker_destruction.test.ts.

10 days ago

Positions 3901–3902 are complete in 41b760ad2: worker destruction and heap-snapshot GC contracts add 4 passing tests with no TODO or unsupported coverage.

Cumulative ordered result for 3659–3902: 244 files, 1,229 passed, 113 TODO, 0 failed, 0 unsupported, 165 allowed-empty. Next boundary: position 3903, js/node/worker_threads/worker_threads.test.ts, currently requiring module-import lowering before its active contracts can run.

10 days ago

Ordered checkpoint advanced through position 3903 in pushed commit abec8c035. js/node/worker_threads/worker_threads.test.ts is 34/34 green, including module and instance surfaces, eval/data URL workers, FIFO MessagePort receive, environment data, process worker events, heap snapshots, FileHandle rollback/detachment, duplicate transfer rejection, and Map/Set transfer identity.

Cumulative 3659-3903: 245 files / 1,263 passed / 113 upstream TODO / 0 failed / 0 unsupported / 165 allowed-empty. Permanent worker gate: 5 files / 41 passed.

Next ordered target is position 3904, js/node/zlib/bytesWritten.test.ts, tracked in #204. Master status: #66. No new Home-injected TODO or skip was added; see #202.

10 days ago

Ordered corpus boundary advanced through position 3906 in https://github.com/home-lang/home/commit/76d8be478.

Current contiguous result from 3659: 248 files, 1,277 passed, 113 TODO, 0 failed, 0 unsupported, 165 allowed-empty. Newly green: zlib/bytesWritten.test.ts (5), zlib/deflate-streaming.test.ts (1), and zlib/leak.test.ts (8).

Next executable boundary: position 3907, zlib/zlib-estimated-size-gc.test.ts. Its first failing assertion is Brotli estimated native size (176, expected greater than 5,000). See #204.

10 days ago

Ordered corpus boundary advanced through position 3911 in https://github.com/home-lang/home/commit/52b661f39.

Positions 3659-3911: 253 files, 1,306 passed, 113 TODO, 0 failed, 0 unsupported, 165 allowed-empty. This adds 5 green zlib files and 29 passing tests for native footprint, handle bounds/write-state, reset/reentrancy, and global kMaxLength contracts.

Next executable boundary: position 3912, js/node/zlib/zlib.test.js; first failure is the Gzip constructor/prototype inheritance contract. See #204.

10 days ago

Cross-tracker note for 05e1acbf8: the zlib checkpoint extended the shared JSC native bridge with binary file reads plus Brotli/Zstd callbacks, while deliberately excluding the concurrent N-API edits from this commit.

The cumulative gate through position 3912 is green (1,684 passed, 0 failed, 0 unsupported), so the shared bridge remains stable for the N-API work tracked here.

10 days ago

Follow-up from #66: native-plugin.test.ts is logically covered by the deterministic harness and its stale FAIL marker is being removed, but the crash-name path is simulated. Please include real compiled native onBeforeParse execution, ABI/build loading, crash containment, and exact plugin-name propagation in this N-API integration track.

10 days ago

Completed the Node N-API conformance scope in b4ddf3056.

Home now sources its N-API Node version from the same authoritative build option as the runtime environment and process/package-manager paths. The previously failing compiled test/node-api/test_general addon passes in Debug and ReleaseFast and returns 26.3.0, exactly matching process.version / process.release.

Strict ReleaseFast verification of the complete napi/node-napi-tests tree: 55/55 files passing; 0 failures, 0 crashes, 0 hangs, 0 dependency gaps, 0 OOMs. No upstream test assertions were changed and no generated addon artifact was committed.

Parent status remains #66.

Sign in to comment on this issue.