ReviewOS

home-lang/home

Bun parity: remaining open items to reach 100% test-suite pass

#66
Open chris opened this 14 days ago · 1753 comments
14 days ago

Native Bake full-suite checkpoint: source ccecdcf9b and 1,185 Git-verified evidence artifacts. All 24 unchanged Bake files pass 177 cases with zero failures/zero skips and two original TODOs; native output, exact identities and source inventory validate. Genuine frozen Home locks replace the empty React marker. The suite budget preserves per-test deadlines; spawned fixture cwd and production source-map retrieval are repaired. Canonical graph identities fix changed-dependency path aliases. Coordinator controls retain 29 complete journals; development/HMR/production pass. The fresh 157-file regression has 396 passing cases, 142 process checks, zero failures, 37 case skips and three file skips. Build, validators, ABI, lint and corpus integrity pass. The initial 175-pass/two-failure run remains retained. #902 is complete for this tranche; #901 keeps optimized native/platform gates and #564 keeps Linux TODO coverage. TODOs/skips receive zero pass credit. The full Bun feature/suite/all-platform objective remains open.

Tracking issue for the remaining work to reach 100% parity with Bun's official test suite (~/Code/bun; current native artifact source SHA 4982b91e3702094330f3be3883354c52b8c01323, original historical pin fd0b6f1a27), runnable here via home test. Each item has the root cause traced during investigation. We tackle them top-to-bottom; check off as landed (small fix:/feat: commits, pushed).

Current main checkpoint (2026-10-13)

Native console methods, buffered replay and cleared-realm lifetime (2026-10-13) landed in source 56df99d7f, merged integration be4364972, and verified evidence de6aea239. Canonical SDK records provide count/reset, typed timeLog/timeEnd and per-session buffered replay with actual stacks/timestamps. Owner attachment differs from VM console state; Runtime.disable suppresses notifications while preserving connected state. groupEnd/clear arguments match the native contract. Clearing the buffer and remote group now retires idle realm injected-script roots; actual still-bound handles, pending calls and paused debugger state prevent retirement. Unrelated object handles and an in-flight async call remain usable. Last frontend detach retires injected-script state, and the non-owning console registry retires across finalization threads. Both source and merged builds pass 56/56 steps; fresh merged validation passes all nine focused commands, six broad drivers, 33 native groups, seven Node/seven Home realm controls, 14 ABI tests/453 assertions and 32 report-validator tests. All 64 report outcomes match expected counts/errors/exits, including twelve negatives. Twenty unchanged originals retain 53 passed cases, one unchanged unsupported-method expectation failure and 17 passed process checks, with zero skips/TODO/filter/retries; #886 receives no pass credit. Failed Node oracle assumptions, the Home post-clear lifetime failure and resource stops remain immutable; temporary tracing is removed. Full schema, independent remote-object/session ownership, evaluated-realm retirement outside explicit console clearing, module/export/callback/owner-shutdown acceptance and full suite/platform validation remain open under #888/#428/#885/#66.

Native profiler sharing at 5cd57e8ea with verified evidence: CLI and inspector owners consume actual JSC samples through detached native records, preserving CLI JSON/Markdown history and independent repeated session windows. Shortest active owner interval is selected; session stop/disconnect preserves CLI profiling and active-session process exit exports successfully. Debug 56/56, all 28 native groups, 14 ABI controls/453 assertions and 32 report-validator controls pass. Twenty unchanged originals retain 53 passed cases, one failed unsupported Runtime.evaluate expectation and 17 process checks; no skips/TODO/filter/retries and no #886 pass credit. Evidence preserves the first inlined-workload assertion failure and 64 replayed report outcomes including 12 negatives; earlier eight resource stops remain in investigation evidence. Full Bun parity, complete realms, worker-to-main inspector attachment, coverage, precise cadence measurement, all ownership schedules, Release/ASAN/all-platform remain open under #428/#66.

Historical publication checkpoint (2026-09-20)

Native phase/context work landed in 64481fe09 with evidence publication b83c54f4d. Vendor checkout and install/build became separately verified phases, with revision checks before hooks and live remap/Docker settings carried into children. The build passed 23/23 steps and 21/21 harness tests, plus launcher, service/lifetime and validator controls. Fresh pinned Elysia setup matched all 283 expected source hashes; all 129 selected original files completed once with 1,516 registered passes, zero failures/skips/TODOs, retaining the one original WebSocket exclusion. This checkpoint did not claim complete primary execution, Linux Docker verification, or full parity. Boundary and API · Evidence

Previous publication / remaining work (2026-09-08)

Full logical Bun parity remains incomplete. Published to origin/main: native service/preparation source a2e2863fc, verified evidence c9fc9bf63. Home SHA256 91d6b1024f9d4c02c6b7f9089b476d8a0646294f4ed7392e5e3ce549e52db763.

Native service lifetime and explicit vendor preparation are implemented. home test --bun-corpus-remap launches the original installed remap service with its original arguments and 5,000 ms startup deadline, drains output throughout its lifetime, and owns shutdown until parent stdin closes or the service exits unexpectedly. home test --bun-corpus-prepare-vendor elysia selects and journals clone/fetch/checkout/revision/install/build, retains separate Git/Home executable identities, and preserves the original 180-second Git/install and 60-second build deadlines. A failed install leaves build visibly unstarted. These operations earn zero registered-case or passing-process credit.

23/23 native build steps and 21/21 harness tests pass, along with four service lifetime units, four journal units, 18 validator controls and five private CLI controls. The private CLI evidence retains invalid readiness, the five-second deadline after output EOF, unexpected service exit with parent stdin open, install failure and build failure. The real pinned remap service passes five HTTP protocol checks through the native command, with complete captures and unchanged dependency hashes. Fresh native Elysia preparation completes all seven steps in 49.8 seconds; its 283 resulting source hashes match the earlier independently verified setup/lockfile normalization. Formatting, targeted Pickier and 50 pinned setup-input checks pass.

The latest complete Elysia run is not green: all 129 selected files complete once with 1,515 registered passes, one failure, zero skips/TODOs. handle distinct union in test/validator/response.test.ts calls .listen(3000); the unrelated PredictHQ development server (PID 28404 at diagnosis) owns that port. Pinned Bun fails the same unchanged case in a separate one-file diagnostic (27 passes, one failure). The listener and original tests were not changed, and no retry or alternate port was used to obtain a pass. Both full-run source integrity and the original selection match. The original WebSocket exclusion remains separate. The first diagnostic verifier expected the same error literal; a separate retained-capture analysis confirms the conflict without rerunning either runtime. A private error-object comparison additionally found message/errno/address/port differences, now tracked in #726; Home's existing preservation of real OS failures must be retained while auditing compatibility.

572 committed compressed artifacts have verified decompressed hashes. Restored journals reproduce successful service/preparation, failed private controls, the failed complete Elysia run and failed pinned-Bun diagnostic separately. The first build was stopped below the unchanged 1 GB critical disk floor after macOS allocated more swap; verification did not run. A cleanup preflight and refused admission are retained too. Corrected cleanup preserved protected binaries and linked native inputs; the completed rebuild required 5 GB free to start. Removed 6,083,408,581 logical bytes of generated caches/dependencies, old vendor data and unused build outputs. Source and other active work are preserved.

Still open: connect these operations with the original CI ordering and selection gates, Docker coordination, live service settings and default unified coordinator (#724); free the original fixed-port prerequisite before claiming a successful new Elysia run; resolve the missing optional legacy DuckDB and earlier lifecycle failures (#725); audit bind-error compatibility (#726); execute the whole applicable primary/vendor suite and finish remaining runtime features, native Linux/Windows/ASAN verification and independent native ownership. Earlier root/test setup process success and the separate 18-case N-API DuckDB run remain evidence on their recorded earlier binary; they are not new execution on this one.

API and scope · Native service/preparation evidence · Earlier native setup evidence

Earlier prepared Elysia execution checkpoint

Published to origin/main: implementation 9d6815afa, evidence 176f685f7. Home SHA256 19e41223c7fc2d2dcda763470fcc84570900db08b4d547340bdae5286d42bc98.

Complete pinned-selected Elysia execution: 129/129 files completed, 1,516 registered cases passed, zero failed, zero registered skips, zero TODOs. The run used no positional filter or start/limit and one attempt with original per-file deadlines. The selection matches pinned Bun exactly, including the separately recorded original ws/connection.test.ts exclusion; that excluded file earns no passing or skipped-case credit. All 129 captures reached EOF. Raw output and JUnit hashes, registered cases, selection completeness, all 283 post-install vendor source hashes and the Home executable hash validate.

The production home test --bun-corpus-prepared-vendor elysia command verifies Git HEAD against the manifest tag and executes each selected vendor file in its own project's cwd with ordinary config discovery, forced vendor test mode, correct validation paths and serial environment. Ordinary failures remain recorded and later files continue. This command explicitly requires prior checkout/install/build and journals setup_performed: false. The preceding Home 716f39bd… build performed the independently verified native install/build; the new 19e41223… build executed the suite. This is not a fresh end-to-end CI setup claim.

23/23 build steps, 17/17 native harness tests and 11/11 validator controls pass. Private controls exercise project config, custom test paths/extensions, serial environment and a real assertion failure followed by a successful file. Targeted Pickier and whitespace checks pass. 409 committed compressed artifacts have verified decompressed hashes; restoring the archived reports reproduces all 129 complete outcomes and 1,516 passing cases. Cleanup removed another 371,467,160 bytes of obsolete owned generated objects, preserving source work.

API and verification boundary · Complete execution evidence

Earlier outcome and lifetime batch at 61670c72b (#722/#723): 23/23 build steps and 12/12 native corpus harness tests pass, plus 2 child-ownership units, 3 journal units, 9 validator units and targeted Pickier. The original per-file deadline now covers a child that stays alive after both output pipes reach EOF. Actual libc close through Home FFI reproduced the pre-fix 30-second supervisor failure; the corrected native runner times out at the unchanged 20-second Node deadline and preserves early successful exit. Child status remains unreaped until final cleanup. The wait helper also cross-compiles for x86_64 Linux/musl and Windows/GNU; native Linux/Windows execution remains unverified, so #723 stays open for that work. Schema 2 records verified stream completeness; legacy schema 1 remains readable with completeness marked unknown.

That earlier six-file original batch validates with 402 passing cases, 1 original platform skip, 10 TODOs, one successful Node script, one verified expected-failure process check and one comment-only file. All six captures reached EOF. The original negative fixture retains its one-failure JUnit case and contributes no passing test credit. Every selected original source/snapshot hash and the executable identity remain unchanged. Private controls verify mixed outcomes, invalid negative contracts, overwrite refusal, both open-pipe and actual closed-pipe timeouts, SIGTERM, interruption, and failed writes. Original failures and first unsuccessful controls remain retained. Final evidence; baseline and remaining scope.

#724 remains the full-suite prerequisite: selection/API and Elysia setup are now verified as described above; native host discovery, complete root/test installation and registry/service setup, vendor execution, and complete applicable-suite outcomes remain unfinished. The pre-exclusion discovery inventory alone is not the complete CI suite. Excluded, skipped, TODO, unstarted and unsupported files never count as passing implementation coverage.

Previous native launch batch (#703): 23/23 native/harness build steps and 9/9 harness tests pass. Five focused units pass. All 19,016 launch-rule selections match pinned Bun over 4,754 discovered files and four CI/local/ASAN contexts; these are rule comparisons, not passing corpus files. Production capture now applies original ordinary/integration/Node/script deadlines, CI GC/integrity/transpiler-cache settings, validation-list rules, fresh per-file storage and real Home command aliases. Real cache/child/cleanup regressions verify the corrected allocation ownership and initially empty install cache. Launch baseline, 64 final artifacts.

Prior grouped launch verification: seven native private regression files pass. Unique selected original cases are Home 71 pass / 1 fail; pinned Bun 72 pass: HTML 45, link/binlink 11, audit 16. Two additional original Node files complete real process checks, and one original comment-only file contributes no passing cases. All selected original sources and snapshots remain unchanged. The generated fresh-cache control passes in both runtimes. The first build's three allocator crashes and Home-only cache-control failure are retained, with their fixes independently verified.

#721 retains the one failing original audit snapshot assertion. Audit remains Home 15/16 versus pinned Bun 16/16. The only differing line expects express › connect › csurf › csrf › uid-safe › base64-url. Its pinned fixture resolves that UID package to csrf/uid-safe@2.1.4, which depends on random-bytes and has no base64-url edge. Home reports the actual express › connect › express-session › uid-safe@2.0.0 › base64-url@1.2.1 path. No nonexistent edge or passing assertion was fabricated. #720/#721 remain open; native protocol/authentication, exact production reachability, affected-version/workspace paths, cycles and lock preservation are covered by the passing native audit regression.

#722 retains the remaining full-inventory execution and outcome-verification requirement, following the verified storage/JUnit/skip/TODO implementation above. The inventory contains 4,754 pre-exclusion entries (1,863 test-runner entries and 2,891 scripts); a completed full-suite execution is still missing. Synthetic corpus rewriting/bootstrap fallback is removed. Full integration/vendor/service setup, native ASAN and other platforms, default CLI fallback removal, and independent native build ownership remain open under #703/#709/#202.

Previous patch checkpoint a4b73596f passed 58 original cases per runtime (link 4, native-binlink 7, patch 29, install-patch 18), six private files, and build 46/46; evidence. #719 is complete for native patch activation and tested lifecycles. The original patch aggregate was not rerun for this launch batch; all six older private files plus audit were. #718 bin ownership is fixed on macOS, with native Windows filesystem verification still open. #717 remains complete for the tested native link lifecycle.

Previous package milestones #713/#714/#715/#716 remain verified and closed: local dependency identity/deduplication, long-prerelease frozen lock equality, native update/outdated and cache-freshness regression. The preceding selected original update/outdated/interactive/semver batch passes 78 cases per runtime, excluding filtered-out cases. Create entrypoints and required native parser restoration are verified. #190 self-upgrade and #710 fixture validity are now closed; #438 JSX failures and #701/#694 unexplained deadline failures remain open.

Current compressed build/test artifacts are committed under docs/docs/bun-port-evidence/. Generated fixtures and aged compiler cache data were cleaned after preserving evidence; source changes and installed binaries were retained. Earlier raw logs lost when the previous worktree disappeared are not claimed retained; their committed summaries/hashes remain historical evidence.

Earlier checkpoints

Earlier verified checkpoint: 1cbac2921, with implementation e1a5d0e20 and scanner correction 6448d628a, all pushed to origin/main. #702 is complete for native HTML activation and removal of fabricated FormData child output/RSS. 100% logical Bun parity remains incomplete.

  • Ordinary and single-native-VM HTML directory routes each pass 145 tests / one original Linux-only skip / zero failures. The native aggregate's 530 assertions match pinned Bun. Home's real 100-iteration file-error child measures 1.78 MB growth, within the unchanged 10 MB limit. Build 46/46; focused harness 23/23 steps / 3/3 tests, with independent registration metadata.
  • Adjacent routes pass: Blob 65/65, body/stream 9,467 passes / four upstream skips, Headers/Response 170/170, Request 24/24, bootstrap FormData 5/5, microtasks 2/2. #701 remains unexplained and open; a passing run is not a repair. #694 remains open.
  • #703 is the next broad migration. Exact routing predicates show 175 native test-runner paths, 266 native scripts and 4,267 bootstrap paths among Home's 4,708 classifications. Exact pinned CI discovery selects 4,754 tracked paths before exclusions, exposing 78 missing and 32 extra Home entries, plus mode/config differences. These are inventory counts, not suite passes. The audit command and full path sets are now published in the repository.
  • The native triage scanner no longer extends original test deadlines or retries timeout-only failures as slow. Its negative control retains one attempt and a failure. It remains a triage tool, not the complete acceptance gate; discovery and full outcome preservation remain in #703.
  • Pinned-object integrity remains 12,990 identical regular files, five raw-identical symlinks, zero missing paths and zero mode differences, with only historical expectations metadata different. Remaining substitutes, faithful full-suite execution, other platforms and independent native build ownership remain unfinished under #202/#703. Logs: zig-out/bun-port-702/; verified Home SHA-256 4a937ded48d609b76e336fdc192dd96439653a228073a234aaafcba176a5e783.

Previous Blob publication: f491cacd7 closed #700 with 65 native passes, preserved the original allocation/prototype/ownership workloads and four snapshots, and removed UTF-16 child and array-prototype descriptor substitutes.

Previous body/stream publication: 04644b2d0 closed #699 with 9,467 native passes and four original skips, removed three clone-specific substitutes, and retained the full HTTP/3 matrix and child/GC workloads. Its adjacent Request run exposed the original 5-second deadline failure now tracked in #701; subsequent diagnostic passes were not counted as a repair.

Previous Headers/Response publication: 649c3c48f closed #698 with 170 native passes, corrected mirror cwd/startup environment and absolute-path CLI rewriting, and preserved the original Response snapshot. Its build passes 46/46 and focused harness 6/6; the initial 4/5 run exposed the additional CLI root defect and remains recorded as historical evidence.

Previous Request publication: 5e45c58a3 closed #697 for native Request activation and removed unused bootstrap VM initialization from native corpus dispatch. Its complete four-file matrix passes 24/24. Direct native stress peak footprints were 22,594,376 bytes for clone stress and 194,872,232 bytes for method-allocation stress; original loops and limits remain intact. The older bootstrap implementation is not claimed repaired.

Previous paired repair: e148e06c1, published to origin/main. #695 and #696 are fixed: complete TypeScript conformance is 1,419/1,419; both optimized Bake integration scripts and gzip decoding with both libdeflate settings pass. 100% logical Bun parity remains incomplete.

The preceding main commit 2129e4a82 enters the macOS WebView host before CLI/JSC initialization and restores native execution of the shell and both complete WebView matrices. All three remaining whole-file TODO substitutions and their helper are removed. #693 is complete for that integration.

  • Unchanged pinned WebKit: 57 pass / 1 upstream TODO / 0 fail / 141 assertions. Shell: 378 pass / 83 upstream TODOs / 0 fail / 1,035 assertions.
  • Four ordinary native corpus routes: 487 pass / 89 upstream TODOs / 0 fail / 0 unsupported registrations. Chrome WebSocket contributes zero passes and five upstream TODOs, not implemented coverage.
  • The first strict Chrome run still fails its original first-navigation deadline (51 pass / 1 fail); pinned Bun passes 52/52. Later probes and a full Home run pass but do not erase that failure: #694 remains open. No retry, warm-up, sleep, timeout extension, assertion change, or workload reduction was added.
  • Optimized native build: 46/46 steps. Earlier feature-flag units: 6/6 with defaults and in each explicit 0/1 fresh-process run; unit build 23/23 steps. Both complete Bake production/development integration scripts pass; absent/0/false opt-in is correctly rejected. Unchanged gzip/fetch is 24/24 / 43 assertions with each libdeflate setting.
  • Nested-rest checker regressions: 4/4; complete TypeScript conformance 1,419/1,419; standalone reproduction exits zero. The original regression now requires zero diagnostics, and new negatives retain element-type and tuple-order errors.
  • Earlier source-restoration regression: 1 pass, zero logged errors/leaks. Earlier completed native runtime units: 1,826 pass / 19 skip / 0 fail; that entire unit artifact was not rerun for the latest paired repair.
  • The earlier optimized aggregate was interrupted (exit 143) and is still incomplete. Its nested-rest and Bake/feature-flag failures are repaired and verified separately above (#695, #696); no completed aggregate or whole-suite pass is claimed. The default Debug aggregate was not established by that run.
  • The earlier bootstrap Request stress test reached 13.7 GB sampled footprint / 14.4 GB peak and was stopped. Its obsolete execution path is replaced by verified native coverage in #697 above; the bootstrap shim used by other adapters is not claimed repaired. The earlier full aggregate was not resumed, and no completed corpus aggregate or whole-suite pass count is claimed.
  • Pinned Bun 4982b91e3702094330f3be3883354c52b8c01323: 12,996 tracked paths present; 12,990 identical regular files, five identical symlinks, one differing expectations.txt, zero missing. The expectation delta removes four historical FAIL entries; executable test sources are unchanged.
  • Changed-file formatting, documentation Pickier and whitespace checks pass. Repository Pickier retains 59,302 findings (31,238 errors / 28,064 warnings). The README's Settlers checkout is absent. External Bun C++ build artifacts, other adapters (#202), upstream TODOs/skips, other platforms and full source/build ownership remain unfinished.

Publication correction: all 18 commit URLs in this issue's historical body were verified as ancestors of main at this checkpoint. Historical statements below saying those commits were not merged describe their original publication state and are superseded by this audit.

How to run / verify

  • Native debug build: zig build debug -Denable_jsc=true -j2 --summary all from the Home repository. External native dependencies and ownership limits are documented in docs/docs/NATIVE_RUNTIME_BINDINGS.md.
  • Native regression: HOME_NATIVE_VM=1 ./zig-out/bin/home-debug tests/runtime/native-worker-inbox-shutdown.test.mjs (substitute the desired regression file).
  • Strict native corpus: HOME_NATIVE_VM=1 HOME_CORPUS_FULL_VM=1 ./zig-out/bin/home-debug test <corpus-file>; both overrides are required to bypass the pragmatic corpus adapter.
  • Outer corpus CLI: unset HOME_NATIVE_VM and HOME_CORPUS_FULL_VM; any nonempty value, including 0, enables those overrides. Keep native execution and the pragmatic adapter's results separate.
  • Use bounded subprocesses and per-child timeouts; limit concurrency to 2–3 small fixtures. Clean only owned temporary artifacts. Do not use blanket pkill commands.
  • Leak measurements must retain their original workloads and thresholds; Debug and ReleaseSafe results are not interchangeable.
  • Skips, disabled bodies, timeouts, unsupported cases, external dependencies, and failing negative controls do not count as completed parity.

Historical publication checkpoints (through 2026-08-28)

  • Published HTTP/3 verification-isolation checkpoint: 0fd884f59, pushed on codex/runtime-port, not merged to main. #539 is closed after a controlled environment correction: the complete unchanged adversarial file passes 12/12 serialized Home processes and 12/12 serialized pinned Bun processes, all 27/27 / 163 assertions. Three eight-way waves reproduce the same first-64-KiB deadline sequence in both binaries (Home 11/12 process passes; pinned Bun 5/12) while all sixteen UDP ports are distinct and the shared eleven-CPU host is saturated by native tests, a ReleaseFast build, and system work. No runtime source, test deadline, workload, retry, sleep, skip, or protocol fallback changed. Heavy HTTP/3 files must be verified serially and away from builds. #530 retains platform/integration and native dependency ownership; all other explicit suite gaps remain. 100% logical Bun parity is not achieved.
  • Previous native TLS SNI/ALPN checkpoint: a9a95f6a4, pushed on codex/runtime-port, not merged to main. #542 now ports per-connection synchronous/asynchronous SNICallback, pending-certificate resumption, original callback error propagation, same-host precedence, offered-protocol ALPNCallback validation, callback-safe teardown, and ALPN selector handoff across SNI contexts. The complete unchanged server file is 38/38 / 147 assertions, exactly matching pinned Bun. The new combined lifecycle regression passes 20/20 independent processes plus VM destruction. The seven-file TLS sweep is 120 pass / 1 skip / 3 TODO / 2 fail / 380 assertions; both failures are live bun.sh OCSP checks reproduced in pinned Bun. Build 17/17; units 1,828 pass / 19 skip / 0 fail (19/19 steps); sequential regressions 63/63, including full spawn and child-process. Home's vendored C source compiles with reconstructed pinned release flags, while the debug build still links the pinned Bun object. Darwin only; #530 platform/integration, other open subsystems, skipped/TODO behavior, dependency ownership and whole-suite parity remain incomplete. 100% logical Bun parity is not achieved.
  • Previous native TLS session/keylog checkpoint: 04569d8f9, pushed on codex/runtime-port, not merged to main. #543 replaces the no-op native dispatch with retained FIFO session/keylog delivery for direct TCP TLS and upgraded Duplex TLS, preserving session-before-data ordering across destructive callbacks. The complete unchanged connect file is now 28 pass / 2 fail / 1 skip / 106 assertions, exactly matching pinned Bun; both remaining live OCSP assertions also fail in Bun. The native lifetime/GC regression passes 20/20 independent processes. Build 17/17; units 1,828 pass / 19 skip / 0 fail (19/19 steps); sequential regressions 62/62, including 31 native files. Adjacent TLS is 47 pass / 2 skip / 7 fail / 424 assertions; all seven failures are SNI/ALPN work in #542, now next. The checked-in Home uSockets source has the logical queue implementation and compiles with the linked release object's exact flags, but the debug build still links that pinned Bun object. Darwin only; platform/integration, skipped/TODO behavior, native dependency ownership and full parity remain incomplete. Whole-suite parity is not achieved.
  • Previous native TLS context checkpoint: fbdfbf890, pushed on codex/runtime-port, not merged to main. #532 now provides private contexts/CA isolation, binary PFX, detailed certificate chains, hostname authorization and TLS min/max propagation. Six unchanged core files pass; context 7/7, cache 9/9, cert 28 pass / 3 TODO, hostname 5/5. Native normal/destruction and original leak checks pass. Native build 17/17; runtime units 1,828 pass / 19 skip / 0 fail, 19/19 steps; sequential regressions 61/61, including 30 native files. Complete compression 32/32, HTTP/2 client 60/60, HTTP/3 client 52/52, both proxy files, full body-stream 9,086/9,086 / 135,984 assertions, five EOF/fetch files and both abort files pass. The initial HTTP/3 adversarial run failed 24 pass / 3 fail / 160 assertions, followed by three 27/27 / 163 serial replays. #539 remains unresolved; passing retries do not erase the final artifact’s initial failure or prior Home/Bun failures. 249 TLS sources, 48 HTTP/regression sources, and 13 TLS implementations match the pin. Full TLS server/connect files still fail: #542 tracks SNI/ALPN callbacks, #543 session/keylog delivery; two live certificate assertions also fail in pinned Bun. Failed attempts and all skips/TODOs are retained. Darwin only; integration, platform and full ownership remain incomplete. Whole-suite parity is not achieved.
  • Previous compression/CONNECT checkpoint: 2c5df8cce, pushed on codex/runtime-port, not merged to main. #531 ports all four request-compression encodings and file/buffer ownership; #535 repairs CONNECT writer/envelope handling. Complete unchanged compression 32/32 / 78 assertions, HTTP/2 client 60/60 / 197, HTTP/3 client 52/52 / 241, and both proxy files pass against pinned controls. Full body-stream 9,086/9,086 / 135,984; build 17/17, units 1,827 pass / 19 skip / 0 fail (19/19 steps), regressions 60/60, including 29 native files; all five EOF/fetch and both abort files pass. HTTP/3 reliability remains unresolved in #539: initial adversarial failure, then three passing Home replays; failures also reproduce in published Home and pinned Bun. TLS context work remains #532. Forty-eight test/harness/fixture sources and eleven implementations match the pin. Failed attempts remain recorded. Darwin only; skips/TODOs, platform/integration and full source ownership remain incomplete. Whole-suite parity is not achieved.
  • Previous HTTP/2 checkpoint: fd239c3ac, pushed on codex/runtime-port, not merged to main. #533 now preserves the idle-session Host hash and rejects invalid response-name tokens while consuming complete HPACK blocks. Complete unchanged HTTP/2 adversarial 15/15 / 33 assertions (parent 13 pass / 2 fail); lifetime 7/7 / 21 assertions with original 200-request workloads. Full body-stream 9,086/9,086 / 135,984 assertions. Build 17/17, units 1,825 pass / 19 skips / 0 fail (19/19 steps), sequential regressions 59/59 including 28 native files. HTTP/2 client remains 58 pass / 2 fail / 2 errors; HTTP/3 client 50 pass / 2 fail, both compression #531. HTTP/3 adversarial retains 27/27. Newly exercised CONNECT-proxy crashes reproduce in both parent and candidate; pinned Bun passes both files, tracked separately in #535. TLS context work remains #532. Forty measured test/harness/fixture sources and six consulted implementations match the pin. Darwin only; platform/integration, skips/TODOs and full source ownership remain unverified. Whole-suite parity is incomplete.
  • Previous TLS/HTTP transport checkpoint: 29c196835, pushed on codex/runtime-port, not merged to main. TLS ABI offsets, HTTP/3 trust eligibility and duplex progress are repaired. Full unchanged body-stream 9,086/9,086 / 135,984 assertions; HTTP/3 adversarial 27/27; client 50 pass / 2 fail (compression #531). HTTP/2 client 58 pass / 2 fail / 2 errors (#531); adversarial 13 pass / 2 fail (#533 verification-host isolation/header validation). TLS server validation 16/16; remaining context/CA/version work is #532. Build 17/17, units 1,824 pass / 19 skips / 0 fail (19/19 steps), sequential regressions 58/58 (27 native files); full spawn 126 passes, child-process 32 passes. Five complete fetch files and both abort files retain their passes. 72 test/harness sources and six implementation sources match the pin. Earlier timeout and disk-exhaustion attempts are retained; complete sequential reruns pass with original workloads/deadlines. See #530 for detailed evidence. Shared Darwin checkout; platform/integration, skipped/TODO behavior and full ownership remain unverified. Whole-suite parity is incomplete.
  • Earlier body-abort checkpoint: fb161314a, pushed on codex/runtime-port, not merged to main. #529 ports terminal response-error settlement before upload cancellation; unchanged abort file 2/2 / 6 assertions (parent 1 pass / 1 fail), queued-abort 1/1, and native 24-scenario normal/destruction/reentry checks pass. Build 17/17; units 1,824 pass / 19 skips / 0 failures (19/19 steps); regressions 57/57 (26 native files); 64 measured upstream sources match the pin. Five body files pass, including clone 25/25 and body 346 passes / 4 skips; five fetch files retain their passes including gzip 24/24. At that earlier checkpoint, the full body-stream matrix was not green: parent 4,883 pass / 4,203 fail / 2 errors, candidate 4,883 pass / 4,203 fail / 10 errors, pinned Bun 9,086/9,086. #530 tracks the HTTP/3 server path: parent client/adversarial files are 6 pass / 46 fail and 5 pass / 22 fail; both clients fail against Home's server before its JS handler, both succeed against Bun's server. Original assertions/workloads/deadlines retained. Historical HTTP/3 completion claims below are corrected. Shared Darwin checkout; unrelated compiler edits excluded. Platform/integration, skips/TODOs and full source ownership remain unverified. Whole-suite parity is incomplete.
  • HTTP/installer checkpoint: 90ced0ed6, pushed on codex/runtime-port, not merged to main. #526 repairs buffered EOF completion and fragmented tar-format selection; native real-install, streaming-handshake, VM-destruction and three 404 transport controls pass. #527 advances unchanged fetch-gzip from 22/2 to 24/24 / 43 assertions, preserving the 1,025 MiB workload. #528 advances unchanged streaming-extract from 5/1 to 6/6 / 180 assertions, enforcing the pinned 2 GiB buffered limit against the original 2.25 GiB payload. Four further complete fetch files pass; full zlib retains 378 passes / 2 skips / 434 assertions. Retains bun-run 291/291, native hard-link-PATH bunx 33 pass / 1 Windows-only skip / 0 fail, workspaces 58/58, eval 33/33, tsconfig 6/6, resolver 39 pass / 2 skips / 1 TODO plus its spawned 9 pass / 1 TODO, and 21 config controls. Build 17/17; units 1,824 pass / 19 skips / 0 failures (19/19 steps); regressions 56/56 (25 native files); 46 measured upstream test sources match the exact pin. No upstream assertion/workload/deadline changes. #526–#528 retain platform/integration scope. Shared Darwin checkout; unrelated compiler edits excluded. Skips/TODOs, other platforms, integration and full source ownership remain unverified. Whole-suite parity is incomplete.
  • Resolver checkpoint: 9b3a5c1ad, pushed on codex/runtime-port, not merged to main. #525 ports canonical resolver diagnostics and fallible, retained installer initialization errors; readable-file dispatch now precedes cwd scanning. Unchanged tsconfig-override 6/6 / 17 assertions (parent 5/1), resolver 39 pass / 2 skips / 1 TODO / 0 fail / 59 assertions plus spawned file 9 passes / 1 TODO / 41 assertions (parent's unreadable-cwd failure resolved under the original 5,000 ms deadline). Native repeated-error and VM-destruction checks pass. Retains bun-run 291/291 / 416 assertions, native hard-link-PATH bunx 33 pass / 1 Windows-only skip / 0 fail / 161 assertions, workspaces 58/58 / 192 assertions, eval 33/33 / 70 assertions, and 21 config controls. Build 17/17; units 1,820 pass / 19 skips / 0 failures (19/19 steps); regressions 56/56 (25 native files); 37 sources match the exact pin. No upstream assertion/workload/deadline changes. #526 remains a reproduced failure: EOF-delimited registry 404s trigger a pending-task assertion in parent and final candidate; length-delimited controls pass. Other platforms, branch integration, skips/TODOs and full source ownership remain unverified. Shared Darwin checkout; unrelated compiler edits excluded. Whole-suite parity is incomplete.
  • CLI config checkpoint: 828ecc729, pushed on codex/runtime-port, not merged to main. #517 optional-config and entrypoint scanning now match all 21 pinned-control boundary cases; native normal/destruction regression passes and published parent fails the new assertion. Full unchanged bun-run 291/291 / 416 assertions, native hard-link-PATH bunx 33 pass / 1 Windows-only skip / 0 fail / 161 assertions, workspaces 58/58 / 192 assertions, and eval 33/33 / 70 assertions (declared React dependency installed by Home). Build 17/17; units 1,820 pass / 19 skip / 0 fail (19/19 steps); regression commands 56/56 (25 native files); 35 measured sources byte-identical to pin. No upstream assertion/workload/deadline changes. New #525 tracks the unchanged tsconfig-override failure: Home parent/candidate 5 pass / 1 fail, pinned Bun 6/6, due to auto-install 404 diagnostics. #517 now retains platform/integration and help-rendering verification. Shared Darwin checkout; unrelated compiler edits excluded. Skips/TODOs, other platforms and full source ownership remain unverified. Whole-suite parity is incomplete.
  • Native installer checkpoint: 3be72ca5b, pushed on codex/runtime-port, not merged to main. Native bunx and the real installer chain (#518) now resolve all three remaining bun-run failures: 291 pass / 0 fail / 416 assertions. Full unchanged bunx passes 33 tests / 1 Windows-only skip / 0 failures / 161 assertions with isolated PATH hard links named node/bun to the exact Home binary (no installed JS runtime delegation). Ordinary PATH remains 32/1/1 because of an installed claude binary; pinned Bun reproduces it. An earlier native symlink PATH run's old CLI-basename failure is separately recorded. Native registry credentials, actual installation, both analyzers, auto-install HTTP initialization and VM destruction checks pass; Angular's original 300,000 ms timeout is resolved without changing the deadline. Workspace suites 58/58 / 192 assertions; regression commands 56/56 (25 native files); build 17/17; units 1,820 pass / 19 skips / 0 failures (19/19 steps). All 33 measured upstream sources match the pin; generated test-tarball bytes are archived and restored. No assertion/workload/deadline changes. #508 now retains platform/integration scope; #517 optional-config scanning and #519 platform/integration verification remain open. Shared Darwin checkout; unrelated compiler edits excluded. Skips/TODOs and other platforms are unverified. Whole-suite parity is incomplete.
  • Compression checkpoint: 095f90396, pushed on codex/runtime-port, not merged to main. #516 ports Zlib/Brotli/Zstd async buffer pins, GC roots and fresh write-result resolution. The complete unchanged zlib file now passes 378 tests / 434 assertions, with 2 skips and 0 failures; bounds 9/9, reentrancy 3/3, native regression commands 55/55 (24 native files), and runtime units 1,819 pass / 19 skip / 0 fail. Twenty lifetime stress runs plus VM destruction pass. No upstream assertions/workloads/deadlines were changed. This supersedes the prior zlib failure linked from #513. Darwin only; #514's four remaining stream-file gaps, broader CLI/runtime gaps and whole-suite parity remain open.
  • The 65 previously local port commits through 6de9852ea8443c3b5d4a58dcdbcf11944456fd2e are now published on codex/runtime-port. Their original hashes were recovered from the existing local codex-git-shadow.git metadata; no replacement history or force push was used. They are published on the branch, not merged into main.
  • Worker checkpoints on the published branch: descendant shutdown 41f10cbebe6d65340304f4b93eb4fd3fa10d0e19 (#470), native parentPort 3b0721c32b2d237c38380900ed449217ef1af853 (#477), and snapshot cancellation c6a4e4a3513dfb2a05a13357c06f598ad9f1d6ce (#471). Not merged into main. Snapshot tasks carry IDs only; the parent thread owns promise handles and completed payloads through success, worker exit, and parent-VM shutdown.
  • Snapshot checkpoint: 20/20 native regression files, 16 byte-identical upstream Node fixtures, and native build/cache 16/16 pass. The six-scenario snapshot suite passes four complete runs, including two with VM destruction enabled. The unchanged upstream snapshot-GC test passes its full 15 × 300 = 4,500 snapshot workload (1 test / 15 assertions). No sanitizer claim.
  • Strict native MessagePort corpus: 15 pass / 3 existing debug-sanitizer guard skips / 0 fail / 529 assertions. Both native execution flags were set. Skips are not completed parity.
  • The full worker_threads corpus file is not green: at the snapshot checkpoint, 33 pass / 1 timeout / 1 between-test error, although its three snapshot cases pass. The test-name filter failure is now fixed in #481; the current filtered snapshot run is 3 pass / 31 filtered out / 0 fail. This does not resolve the full-file timeout. The unchanged 100 MiB eval-source case exceeds its original five-second deadline (#482); its standalone memory-threshold check passes in native debug in 20.22 s versus 2.20 s in Bun. Debug/optimized timing and the full-file deadline remain distinct from snapshot cancellation.
  • Native test CLI checkpoint 1340cebd5 (#481), published on codex/runtime-port, not merged into main: real argument and bunfig parsing, fatal diagnostics, and buffered/direct output semantics. Build/cache 16/16, all 20 native regression files, and 50 unchanged upstream tests / 119 assertions pass across filtering, configuration, retry/repeat hooks, concurrency, path ignores, and full coverage. The snapshot selection filters out 31 cases; they are not counted as passes. No tests or snapshots were weakened.
  • Newly exposed test-runner feature gaps: isolated global/module records #484 (1 pass / 3 fail, Bun control 4 pass) and parallel coordinator/worker IPC #485 (0 pass / 3 fail, Bun control 3 pass). Both retain their unmodified upstream reproducers and remain open. Other unverified CLI/runtime features are not implied complete by #481.
  • Remaining shutdown work: generic queued task cancellation #465 and work-pool quiescence #468. Snapshot request ownership #471, parent-port lifecycle #477, and descendant shutdown #470 are implemented and verified on the published branch, with integration context retained in their issues. Related ownership: #461, #462, #466, #469.
  • Other active parity gaps include the core corpus exclusions in #456, reduced-context realms in #454, and Node-API/FFI follow-ups #459 and #460. Historical checkbox sections below are not a current whole-suite completion report.
  • 100% logical Bun parity is not achieved.

A. node:tls socket layer

  • SNI/ALPN callback handling and asynchronous suspension — implemented in a9a95f6a4 (#542); the complete unchanged server file passes 38/38 / 147 assertions, matching pinned Bun.
  • Session/keylog events and teardown ordering — implemented in 04569d8f9 (#543); the complete unchanged connect file matches pinned Bun, with two live OCSP failures retained in both.
  • getCipher() cluster works — was a false diagnosis: the null cipher/session came from the broken (cert-less) handshake caused by the Buffer-cert gap, now fixed (b3492d3). Verified locally: getCipher {TLS_AES_128_GCM_SHA256, version:"TLSv1/SSLv3"} (matches pin test), getProtocol TLSv1.3, getSession 1106-byte Buffer, getEphemeralKeyInfo/getSharedSigalgs/exportKeyingMaterial/isSessionReused all correct. The pin test connects to bun.sh (crashes on this macOS 27 box) so it can't be run here, but the behavior is confirmed.
  • Detailed getPeerCertificate at the current pin — implemented in fbdfbf890 (#532): peer/trust-store issuer chains, self-issued roots, checked conversion and native reference ownership. Complete cert suite 28 passes / 3 TODO, original leak workload and memory threshold pass. The earlier claim that the detailed TODO matched the pin was historical and does not describe the current pin.
  • ALPN — fixed in 428aa2c (hand-mirror SSLConfig.fromJS never parsed ALPNProtocols).
  • Static SNI server.addContext() selection — the complete context suite and most-recent-context Node program now pass (#532). Dynamic SNI/ALPN callbacks and asynchronous handshake resumption remain #542.
  • Cert-chain verification — "unable to verify the first certificate" / "unable to get issuer certificate" on incomplete-chain + intermediate-CA scenarios (basic single-CA verify works).
  • Config validation — tls.createServer({passphrase: wrong}) should reject but listens; passphrase IS passed to us_ssl_ctx_from_options, so it's uws-level validation timing/error-surfacing.
  • getPeerCertificate '\0' handling (CVE-2009-2408 test).

B. Bun Shell ($)

  • Bun Shell template commands and command substitution — closed by #73. Basic template execution and the mixed-output/error command-substitution stress case run through real Home execution. Follow-up 31e2dc603 forwards explicit spawn environments and pins the installed Home executable for the fixture-free corpus path.

C. fetch / HTTP client

  • redirect + gzip — fixed in c508e00 (NativePromiseContext wiring; see below). fetch-gzip.test.ts 2/3 → 5/0.
  • streamed gzip with delay — fixed in c508e00 (same root).
  • body-stream.test.ts — full unchanged matrix passes 9,086/9,086 / 135,984 assertions at 2c5df8cce, including HTTP/3. Original workloads/deadlines preserved. Abort settlement remains green (2/2 plus queued 1/1, #529). This file-level result does not close HTTP/3 reliability/platform work in #530/#539.

D. HTTP/2 & HTTP/3

  • Native HTTP/2 completion — complete unchanged client 60/60 / 197, adversarial 15/15 / 33, lifetime 7/7 / 21 at 2c5df8cce (#531/#533). Earlier client compression failures are repaired. Platform/integration remain unverified; file-level passes do not establish complete HTTP/2 parity.
  • HTTP/3 — platform and integration verification, #530: 2c5df8cce brings client 52/52 / 241 and full body matrix 9,086/9,086 / 135,984. Request compression is implemented (#531). #539 is closed by 0fd884f59 as a verified host-contention artifact: serialized Home and pinned Bun each pass 12/12 processes, while intentional eight-way waves reproduce the same first-upload deadlines in both. Original tests/deadlines retained. Other platforms/integration remain unverified.

E. Deep/unported subsystems

  • napi-FFI cc.test.ts crash — resolved: exact upstream file is 5 pass / 10 upstream skips / 0 fail in Home; the extended mirrored file is 8 pass / 10 upstream skips / 0 fail. Pinned Bun at 4982b91e3 currently reports 4 pass / 10 skips / 1 fail on the upstream file because napi_main is not exported from the fixture compile.
  • S3Client remaining platform/external integration (#597) — deterministic native matrix is 66 pass / 3 upstream credential-gated skips / 0 fail in 5c2ac4542; the stream-cancel crash, task/body ownership, proxy resolution, early-response multipart reuse, malformed ListObjects parsing, and eight-file production routing are fixed. Linux/Windows and credentialed S3/R2 integration remain open.
  • Bake/HMR remaining optimized/platform verification (#901) — native production/development/HMR is functional (#551/#553/#555). The complete native suite checkpoint validates all 24 unchanged files (177 pass / 2 upstream TODO / 0 fail / 0 skip), genuine frozen locks, complete journal identities and original test deadlines (#902 closed). Spawned fixture cwd, production source maps and changed-path aliases are repaired. Debug ownership and release frontend checks pass; optimized runtime and wider platform/SDK acceptance remain open. #564 tracks Linux TODO coverage.
  • Worker corpus remaining platform/performance verification — e1523b1ee and eae013190 promote 16 exact native files: 264 pass / 3 upstream release-mode skips / 1 upstream TODO / 0 fail. The corpus runner applies its real preload and preserves sentinel path ownership. Web Worker messaging, transfer, structured clone, Blob, termination, leak, heap-snapshot GC, unchanged 15787.test.ts, and the complete worker-destruction matrix are green; #598 is closed after preserving cached exit code 0. The complete worker_threads.test.ts is green in ReleaseFast under #482 but retains its documented Debug-only five-second eval-source deadline gap. Linux/Windows verification, the upstream TODO/skips, and whole-suite worker parity remain open.

F. Memory-leak tests (triaged on ReleaseSafe 2026-07-07 — build target un-rotted in 55f7140)

  • setTimeout-clear-in-callback — ✅ FALSE ALARM: all 3 variants (clear/refresh/repeat) pass on ReleaseSafe; debug-build overhead as suspected.
  • text-decoder utf16le output-buffer leak — ✅ FALSE ALARM: both utf-16le and utf-16be pass on ReleaseSafe.
  • streams-leak — ✅ FALSE ALARM: passes on ReleaseSafe.
  • serve-body-leak — ✅ CLOSED (4ee746c): root cause was the libc mimalloc shim (allocator page retention, not a leak — see forensics comment). Real mimalloc re-attached (Phase 12.2); 7 pass / 0 fail on ReleaseSafe.
  • inspect-error-leak — ✅ CLOSED (4ff003d): ZigException.Holder.deinit was a stub that dropped the pin's deferred resetArena — every inspected error left one full transpile in the module loader arena (74MB/100k iters). Now passes with 'RSS increased by 4 MB', exactly real Bun's number.
  • node:util test-aborted gc-cleanup — ✅ CLOSED (d459e0d): FinalizationRegistry callbacks never fired AT ALL — JSCScheduler.zig was a no-op placeholder and the two event-loop exports were noop stubs, severing JSC's DeferredWorkTimer delivery chain. Pin's scheduler ported; test-aborted now 5/5 (gc-cleanup passes in 2.5ms).
  • (new) HTMLRewriter handler leak — reclassified, NOT a leak: all 58 lol_html_* symbols are noop stubs (lol-html Rust crate unported — link_bun_rust_archive = false); the child panics on the first .on() (else => unreachable on a garbage return at lolhtml_sys/lol_html.zig:253) and the test fails on stderr. Belongs with section E as an unported-library item: link lol_html_c_api (rlibs exist in the Bun build tree), delete the stubs, and restore the pin's HTMLString.toString free (lol_html.zig:623 — latent leak once real lolhtml links).

G. Environmental / infra (mostly resolved)

  • Test runner: home test defaults to native bun:test runner (078c659)
  • bun:internal-for-testing gated in release (13deb08)
  • node v24 + bun v1.3.14 installed via pantry (clears differential-spawn "node not found" failures)
  • Build recovery recipe after /tmp wipe (memory: home-build-portability.md)

Done this session (context)

signals (db0df4d), native-VM file runner (f296bb6), Worker cross-thread + teardown (dcb6db6, 85aba46), native test runner default (078c659), translateUVErrorToE (188268e), Bun.markdown renderer (2768d9a), MD4 (1279c18), Bun.CSRF (96b8f05), node:tls SecureContext ~40 tests (6cf4a6b), release build + build-recovery (dff7bfa, df83921, 13deb08).

Native isolation checkpoint — 6e092777a

Published on codex/runtime-port; not yet merged to main. #484 now passes the entire unchanged isolation file: 19 tests / 67 assertions, plus three consecutive repeat runs. The real JSC module-record bridge replaces the parked panic path. File-boundary cleanup releases watcher, server, timer, watch-file scheduler, and AbortSignal GC references; server callback protections are balanced across reload and destruction.

Verification: native build and unchanged cached rebuild 17/17; generator/ABI tests 8 tests / 135 assertions; all 20 native regression files pass, including expanded isolation probes. Fourteen selected unchanged upstream commands total 92 passing tests / 242 assertions, including the 50-test CLI regression set. Two platform skips and 231 filtered cases in those selections are not passes. The existing AbortSignal spawn-glyph-only check alone is not proof of child assertion execution; direct native lifecycle and timeout checks provide separate evidence. Workloads, deadlines, and upstream assertions were preserved. Full details and control limitations are in docs/docs/NATIVE_RUNTIME_BINDINGS.md.

Separate newly tracked failures: fake clocks #490 (16 pass / 14 fail, also reproduced before this checkpoint; Bun control 30 pass) and deferred imports #491 (0 pass / 1 fail / 19 filtered out in the selected parser reproduction). Parallel orchestration #485 and the full worker eval deadline #482 remain open. Installed Bun 1.3.14 fails four newer isolation cases itself, so no passing full-file Bun control is claimed. The full port and 100% logical Bun-suite compatibility are still incomplete.

Native fake-clock checkpoint — d0ed7c906

Committed and pushed on codex/runtime-port; not yet merged to main. #490 now passes the unchanged core fake-timer file: 30 tests / 83 assertions, up from 16 pass / 14 fail. Installed Bun 1.3.14 passes the same 30 / 83 control. Mockable timer deadlines now share the fake clock, fractional advancement retains nanoseconds, real option/getter validation runs before clock mutation, and both reset paths release timer/AbortSignal references outside the heap lock.

Verification:

  • Native build and cached rebuild: 17/17 steps.
  • All 21 native regression files pass; the new fake-clock test also passes three consecutive repeats and fails against the cached pre-change Home binary. It checks actual Home execution, inherited/throwing getters, Date/performance agreement, fractional nested callbacks, retained cancelled handles, natural exit and bounded GC counts after allocating 3,072 timeout/interval wrappers plus 1,536 AbortSignal timeouts across resets.
  • Entire unchanged fake-timer directory: 61 reported pass / 438 TODO / 0 fail / 115 assertions in Home and Bun. 14 reported passes are it.failing cases, not implemented features; all 438 TODOs are excluded from logical completion. There are 47 ordinary passing tests, including the core 30.
  • Unchanged isolation: 19 tests / 67 assertions. Unchanged timers/promises: 4 / 7. Twenty-four selected corpus files match the pinned Bun checkout byte-for-byte. Focused Pickier, timer-file Zig formatting and whitespace checks pass.

The wider Node timer file still hangs after printing 19 passes on its final caught-immediate-exception fixture. This happens in the pre-change Home binary too. The standalone fixture times out in both Home binaries and exits successfully in Bun; the original-checkout Bun control passes the full 20 / 31. Tracked separately in #493; neither incomplete runs nor expected failures count as logical parity.

Deferred imports #491, parallel coordinator/IPC #485, the full worker deadline #482, remaining native ownership, other platforms and full-suite parity remain open. The full port and 100% logical Bun-suite compatibility are not complete. See docs/docs/NATIVE_RUNTIME_BINDINGS.md for the implementation and verification boundary.

Native POSIX spawn checkpoint — 6d797186c

Published on codex/runtime-port; not yet merged to main. #493 is now implemented and verified. The timer fixture hung during import, before scheduling immediates: Node's common helper spawned a missing absolute openssl-cli, and Home misread libc's direct positive errno as success and watched PID 0. The fix propagates spawn and file-action/attribute setup errors, preserves executable paths, and releases failed registration lists. No immediate dispatch code was changed.

Verification: 28 selected commands pass, including all 21 native regression files, the unchanged complete Node timer file (20 tests / 31 assertions), its standalone fixture, isolation (19 / 67), core fake clocks (30 / 83), timers/promises (4 / 7), PATH selection (1 / 2) and the selected missing-command/invalid-fd cases (2 / 9; 32 filtered out excluded). Native build and cached rebuild 17/17; repeated native spawn failures preserve descriptor counts and recover to a valid spawn without re-entering user microtasks. Eight relevant upstream files are byte-identical to source pin 4982b91e3702094330f3be3883354c52b8c01323.

New linked follow-ups keep the failing boundaries explicit: extra stdio pipes #495, real native counter snapshots #496, and package-script passthrough #497. Full child-process remains 30 pass / 2 fail / 1 skip / 1 TODO / 70 assertions; spawnSync remains 4 pass / 1 fail / 1 platform skip / 11 assertions. Installed Bun 1.3.14 passes those three failing scenarios but fails the newer invalid-fd case itself. Deferred imports #491, parallel test orchestration #485, full worker timing #482 and the other open work remain. The full port and 100% logical Bun-suite compatibility are still incomplete.

14 days ago

Checkpoint 6385644b2 (fix(runtime): unblock Bun corpus execution) is now on main.

This checkpoint closes the three deterministic full-gate hangs that the corrected Zig test protocol exposed:

  • test-http-outgoing-finish.js: outgoing HTTP writes now apply finite high-water-mark backpressure, invoke write/end callbacks, and preserve finish ordering for client and server responses.
  • test-readable-from-iterator-closing.js: Readable.from() now consumes sync/async iterators lazily, awaits yielded values and iterator-return thenables, closes on consumer break/destroy/rejected yields, and does not incorrectly call return() after next() itself throws.
  • test-vm-timeout.js: vm.runInContext, runInNewContext, runInThisContext, and Script run methods now honor positive integer timeout options with catchable ERR_SCRIPT_EXECUTION_TIMEOUT errors and nested earliest-deadline semantics. The harness instruments loop backedges while skipping strings/comments and balancing loop headers.

It also:

  • activates the three previously injected-skip Bun.serve cookie suites; the focused source file is now 32 passed / 0 todo / 0 unsupported;
  • preserves independent Set-Cookie headers and accepts opaque/Unicode CookieMap constructor input without weakening outbound cookie validation;
  • fixes HOME_BUN_CORPUS_FULL, range, and progress environment reads under Zig's test protocol;
  • accounts for upstream Node assertion scripts as successful allowed-empty executions when they finish without an exception.

Verification on the rebuilt JSC-linked test artifact:

  • focused Bun.serve cookie regression: pass, 0 logs, 0 leaks;
  • combined HTTP + iterator + VM deadlock regression: pass, 0 logs, 0 leaks;
  • exact full-gate files 2078, 2897, and 3596: each pass, 0 logs, 0 leaks, and complete in under two seconds when run concurrently.

The neighboring 20-file windows also complete without hanging. They are not yet logically green: the first remaining blockers are missing OutgoingMessage, missing punycode, and the broader VM timeout escape/promise behavior (test-vm-timeout-escape-promise-2.js). I am continuing from those boundaries. This is not a claim that all 4,708 files are green yet.

14 days ago

Checkpoint 8cbc96ab3 (fix(runtime): enforce VM and Node test boundaries) is now on main.

This closes the timeout-escape and node:test runner boundaries exposed after 6385644b2:

  • VM timeout enforcement now covers callbacks promoted into a context, Promise jobs under microtaskMode: "afterEvaluate", and nested timeout frames.
  • The base timeout fixture, both plain promise-escape fixtures, and both module promise-escape fixtures all terminate within the deadline instead of escaping into a two-second loop.
  • Added core vm.Module / vm.SourceTextModule lifecycle, linking, context, status, identifier, namespace/error validation, and evaluation-time timeout propagation.
  • node:test is now the callable default export with Bun-compatible overload parsing, TestContext metadata/assertions/lifecycle surface, and the documented nested-test NotImplementedError behavior.
  • Ported Bun's Node-style MockTracker semantics separately from the Jest/Bun mock engine: getter/setter/method overloads, times, descriptor restoration, post-invocation call records, indexed one-shot implementations, and the restoreAll() versus reset() association distinction.
  • Multiple native corpus file arguments are now all executed and aggregated, with compact Bun-compatible N pass / N fail reporting. The upstream two-file runner scenario observes the expected 35 pass.

Fresh verification:

  • exact js/node/test_runner/node-test.test.ts: 18 pass / 0 fail / 0 unsupported / 0 todo;
  • strict HTTP + iterator + VM regression gate: pass, 0 logs / 0 leaks;
  • VM escape window 3586–3597: all 12 files terminate, 0 failed / 0 unsupported (12 upstream assertion scripts are correctly accounted as successful allowed-empty executions);
  • Bun.serve cookie integration guard: pass, 0 logs / 0 leaks;
  • zig build, zig fmt --check, and git diff --check: clean.

The broader VM module block is not being called complete: entries 3541–3563 currently report 14 failed / 1 unsupported / 9 successful allowed-empty. The first remaining boundary is test-vm-module-basic.js, where inspect/identity output is still incomplete; cached-data, explicit request linking, SyntheticModule, and full import/export evaluation remain behind it. This checkpoint is cross-referenced in #201 and #202.

14 days ago

VM module/context checkpoint landed on main in c5d038945.

This ports the next Bun/Node VM boundary into Home's native corpus runtime, including SourceTextModule and SyntheticModule, request-based linking/instantiation, cached data validation, module namespaces and live re-exports, circular graphs, evaluation/TLA state, dynamic import callbacks, context isolation, custom inspection, and Node-compatible validation/error behavior.

Fresh verification from the committed source:

  • all 22 test-vm-module* files: 17 pass, 0 fail, 0 unsupported
  • node-test.test.ts: 18 pass, 0 fail
  • VM context/timeout regression set: 8 files, 0 fail, 0 unsupported
  • exact corpus window 3541..3563: 23 files, 17 pass, 0 fail, 0 unsupported, 18 allowed-empty
  • exact corpus window 3586..3597: 12 files, 0 fail, 0 unsupported, 12 allowed-empty
  • strict deadlock protocol: status=0, logs=0, leaks=0
  • Bun.serve cookie integration protocol: status=0, logs=0, leaks=0

The remaining allowed-empty entries are still accounted for separately in #202; this checkpoint does not relabel them as semantic passes. Execution-boundary progress remains tracked in #201.

14 days ago

Port checkpoint b12b077 is merged to main: Web Crypto, Encoding Standard TextDecoder contracts, Node stream adapters, WHATWG compression streams, SharedArrayBuffer identity, stream tags, _stream_wrap deprecation behavior, and complete pipeTo lifecycle/error propagation.

Fresh compiled-harness evidence:

  • corpus 3598-3621: files=24, passed=70, failed=0, todo=0, unsupported=0, allowed-empty=21
  • prior VM window 3541-3563: files=23, passed=17, failed=0, unsupported=0, allowed-empty=18
  • strict deadlock regression: status=0, logs=0, leaks=0
  • Bun.serve cookie integration: status=0, logs=0, leaks=0

Direct regression evidence:

  • exact 24-file boundary: 70 pass, 0 fail
  • Web Streams: 5 files, 70 pass, 0 fail, 0 unsupported
  • VM modules: 22 files, 17 pass, 0 fail, 0 unsupported
  • node:test: 18 pass, 0 fail
  • WebCrypto: 11 files, 0 fail, 0 unsupported
  • custom encoding: 8 files, 0 fail, 0 unsupported

No corpus skips, TODOs, or unsupported allowances were added. Execution detail remains tracked in #201 and skip/TODO accounting in #202.

Commit: https://github.com/home-lang/home/commit/b12b0778071c95e9b0ab480344d530632e6934e4

14 days ago

Follow-up checkpoint 378330a is merged to main.

This ports the next EventTarget and URL contract layer:

  • passive listener option access and preventDefault behavior
  • AbortSignal validation, already-aborted handling, capture-aware deduplication, once semantics, and removal during dispatch
  • execution of the passive assertions hidden behind Bun copied Node TODO guard
  • URL and URLSearchParams global descriptors
  • URLSearchParams receiver checks, missing-argument codes, Symbol conversion errors, iterator next receiver checks, and stable Bun/Node messages

Evidence:

  • focused EventTarget plus URL slice: 11 files, 0 failed, 0 unsupported
  • next ordered window 3622-3645 improved from failed=14 unsupported=1 to failed=6 unsupported=1
  • prior 3598-3621 window remains files=24 passed=70 failed=0 unsupported=0
  • strict deadlock and cookie checks: status=0 logs=0 leaks=0

Remaining in this window is the byte-stream/BYOB surface plus URL fixture loading, inspection, parsing, and prototype-property behavior. Details remain cross-referenced in #201 and #202.

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

14 days ago

URL/IDNA checkpoint landed on main in e66308770 (feat(runtime): port WHATWG URL and IDNA boundaries).

What is now ported:

  • WebKit-backed WHATWG parsing and relative resolution, including opaque-base rejection and USVString normalization
  • ICU UTS #46 domainToASCII / domainToUnicode with Node-compatible validation and stable behavior across host ICU revisions
  • full URL WebIDL prototype shape, writable/readonly attributes, SameObject searchParams, subclass identity, special origins, and Node inspect output
  • exact upstream toascii.json and urltestdata.json fixtures, replacing the former hardcoded hostname table

Verification against pinned corpus 4982b91e3702094330f3be3883354c52b8c01323:

  • positions 3633–3640: 8 files executed, 0 failed, 0 unsupported
  • positions 3638–3640: inspect + parsing + properties, 3 files executed, 0 failed, 0 unsupported
  • positions 3622–3645: 24 files executed; all encoding, EventTarget, URL, and URLSearchParams files green; only 2 stream failures + 1 BYOB unsupported remain
  • clean zig build, zig fmt --check, and git diff --check

The umbrella home_rt test artifact still fails earlier in an existing InternalSourceMap.fromVLQ assertion and later aborts in unrelated NativePromiseContext recursion; the native Bun corpus path exercising this checkpoint is green.

The remaining stream boundary is tracked in #203.

14 days ago

Streams checkpoint complete: #203 is closed by 6514279.

Home now implements the byte-stream/BYOB reader and request state machine, strict Node error codes, reader locking/release, live async tee, cancellation/error/close propagation, and exact WHATWG stream .mjs imports. A registered Home-owned regression proves asynchronous byte tee branches each drain exactly one foo chunk.

Validation: positions 3630-3632 pass 3/3 files; the full positions 3622-3645 boundary passes 24/24 files; both have 0 failed, 0 unsupported, and 0 TODO. zig build, zig fmt --check, and git diff --check pass. The copied Bun test remains untouched.

Next ordered work continues after position 3645.

14 days ago

URL and URLSearchParams checkpoint landed on main in 81c4929 (fix(runtime): complete URL and URLSearchParams contracts).

Ported behavior:

  • WHATWG URLSearchParams pair-list construction, USVString conversion, live URL synchronization, SameObject behavior, iterator branding, forEach, overloads, and Node-style argument/receiver errors
  • URL component serialization/setters, native WHATWG parsing, userinfo/non-ASCII encoding, invalid-this behavior, readonly descriptors, and Node 22-compatible IDNA boundaries
  • stable UTS 46 handling across host ICU versions, including U+FEFF ignored mapping and pinned disallowed code points
  • strict-directive preservation for plain JS corpus files even when comments such as // Flags precede use strict
  • WPT failure reporting now includes the named case at the harness boundary

Validation:

  • zig build: pass
  • focused Home URL/strict/IDNA regressions: pass
  • Bun corpus positions 3622-3658: 37 files, 0 failed, 0 unsupported, 0 TODO
  • native IDNA bridge focused runtime artifact: 4/4 tests pass
  • copied Bun corpus remained untouched

Ordered progress continues in #201 from position 3659. Skip/TODO accounting remains in #202; this checkpoint added none.

14 days ago

Port checkpoint: pushed 4ebdedeb1 (fix(runtime): complete compression stream contracts) to main.

This completes ordered Bun corpus position 3659 (test-whatwg-compression.js) with logical support for gzip, deflate, deflate-raw, Brotli, and Zstandard compression/decompression. Production globals now use branded prototype accessors, correct Symbol.toStringTag, WeakMap-backed state, and Node-compatible ERR_INVALID_ARG_VALUE rejection for unsupported formats.

Validation on the committed diff:

  • focused corpus 3659: files=1 passed=0 failed=0 todo=0 unsupported=0 allowed-empty=1
  • native JSC CompressionStream contract test: 4/4 passed
  • zig build: passed
  • Bun mirror remains unchanged

Next ordered boundary: position 3660, WritableStream close semantics.

14 days ago

Port checkpoint: pushed db6d4fdc2 (fix(runtime): enforce writable stream close state) to main.

This completes ordered Bun corpus position 3660 (test-whatwg-writablestream-close.js) with a stateful WritableStream fallback in the corpus realm: writer locking, serialized sink operations, start/write/close/abort error propagation, writer ready/closed/desiredSize contracts, branding, and deterministic TypeError rejection for writes after close. The regression also proves the rejected chunk never reaches the sink.

Validation on the committed diff:

  • focused position 3660: 1/1 upstream test passed
  • combined positions 3659–3660: files=2 passed=1 failed=0 todo=0 unsupported=0 allowed-empty=1
  • permanent WritableStream close regression: passed
  • zig fmt --check, git diff --check, and zig build: passed
  • Bun mirror remains unchanged

Next ordered boundary: positions 3661–3662, Node Windows platform behavior.

14 days ago

Port checkpoint: pushed 17698847d (fix(test): isolate process exit semantics) to main.

This completes ordered Bun corpus positions 3661–3662, the two Node Windows-platform tests. The isolated corpus realm now exposes process.exit() with Node-style integer validation and a typed ProcessExitError; the per-file wrapper consumes only exit code 0 so common.skip() cleanly terminates platform-gated files, while nonzero exits remain failures with their exact code and message.

Validation on the committed diff:

  • positions 3661–3662: files=2 passed=0 failed=0 todo=0 unsupported=0 allowed-empty=2
  • combined positions 3659–3662: files=4 passed=1 failed=0 todo=0 unsupported=0 allowed-empty=3
  • permanent exit-0 platform-skip regression: passed
  • permanent exit-7 diagnostic regression: passed
  • focused runner suite: 6/6 passed
  • zig fmt --check, git diff --check, and zig build: passed
  • Bun mirror remains unchanged

Next ordered boundary: position 3663.

14 days ago

Port checkpoint: pushed 2e0b74a98 (fix(test): port worker thread state boundaries) to main.

This completes ordered Bun corpus positions 3663–3682. The worker_threads harness now implements inherited environment-data snapshots, getEnvironmentData / setEnvironmentData, monotonic worker thread IDs, copied worker process environments, strict structured-clone validation with synchronous DataCloneError for invalid workerData, and per-file worker/environment reset. Node common tmpdir now uses an isolated stable temp root instead of incorrectly resolving relative to each corpus file.

That removes all five failures from the shared worker window, including two order-dependent failures caused by leaked process.env / worker state.

Validation on the committed diff:

  • direct positions 3670, 3672, and 3681: each clean individually
  • positions 3663–3682: files=20 passed=0 failed=0 todo=0 unsupported=0 allowed-empty=20
  • combined positions 3659–3682: files=24 passed=1 failed=0 todo=0 unsupported=0 allowed-empty=23
  • focused permanent suite: 7/7 passed
  • zig fmt --check, git diff --check, and zig build: passed
  • Bun mirror remains unchanged

Next ordered boundary: position 3683.

14 days ago

Ordered Bun-corpus checkpoint through position 3702 is pushed in 52c869a69 (fix(test): port worker message channel contracts). This completes worker message-channel, WebAssembly-transfer, argv, and ref-state boundaries for positions 3683–3702.

Ported contracts:

  • MessageEvent defaults, Event inheritance, source/ports validation
  • non-constructible MessagePort, new-only MessageChannel, and constructor identity
  • synchronous FIFO receiveMessageOnPort() without duplicate async delivery
  • duplicate MessagePort/ArrayBuffer transfer-list DataCloneError
  • binary Node WebAssembly fixtures plus shared-WASM buffer identity/backing-store visibility
  • Worker({ argv }) validation/stringification and worker process.argv
  • Worker/MessagePort ref(), unref(), and hasRef() lifecycle behavior

Verification:

  • permanent focused suite: 8/8 passed
  • exact upstream failure set: 8 files, 0 failed, 0 unsupported
  • positions 3683–3702: 20 files, 0 failed, 0 unsupported
  • regression window 3659–3702: 44 files, 1 test passed, 0 failed, 0 unsupported
  • zig build: passed
  • copied Bun mirror: unchanged

Ordered work continues at position 3703. Detailed ordering remains in #201; skip/TODO accounting remains in #202.

14 days ago

Worker lifecycle checkpoint pushed to main in e3db06153 (fix(test): port worker lifecycle contracts).

This completes the ordered worker boundary through corpus position 3717:

  • Node-compatible Worker filename validation for strings/URLs, including exact ERR_INVALID_ARG_TYPE messages for undefined, null, primitives, objects, arrays, symbols, and functions.
  • URL-addressed file workers and worker-local ESM preparation for the upstream test-worker.mjs contract.
  • Worker-to-parent delivery at the cooperative worker boundary, so termination from a message callback can interrupt intentional infinite-loop fixtures without hanging the Home process.
  • Idempotent worker exit emission across normal completion, explicit termination, and process.exit().
  • SharedArrayBuffer-like Atomics.wait() compatibility for the single-realm worker fallback.
  • A permanent lifecycle regression that observes eval-worker termination and actual .mjs worker message delivery, rather than relying only on allowed-empty Node files.

Validation:

  • focused permanent regression gate: 8/8 passed
  • positions 3703–3717: 15 files, 0 failed, 0 unsupported
  • combined positions 3659–3717: 59 files, 1 executed test, 0 failed, 0 unsupported
  • zig fmt --check packages/home_test/src/corpus_runner.zig
  • git diff --check
  • zig build

No copied Bun fixture was modified and no TODO/skip suppression was added. Ordered progress is tracked in #201; the suppression ledger remains in #202. Next ordered boundary is Brotli/zlib beginning at position 3718.

14 days ago

Native Brotli/zlib checkpoint pushed to main in 373f809cb (fix(test): port native Brotli zlib contracts).

This advances the ordered corpus through position 3727:

  • Added JSC callbacks backed by Home's ported Brotli C ABI for real quality-aware compression and bounded decompression.
  • Added Node zlib Brotli sync/callback APIs, constructors, stream write/end/flush/read/pipe/close/reset behavior, and gzip close/error lifecycle coverage.
  • Added immutable zlib.constants, zlib.codes, and legacy top-level constants.
  • Captured buffer.kMaxLength at per-file zlib module-load time for Node-compatible output-limit errors.
  • Added general decoder backpressure: an unconsumed Brotli stream buffers one readable chunk and pauses instead of expanding a decompression bomb.
  • Added a permanent observed regression that compares native quality output, performs sync and callback round-trips, and verifies constant immutability.

Validation:

  • focused permanent regression gate: 9/9 passed
  • positions 3718–3727: 10 files, 0 failed, 0 unsupported
  • combined positions 3659–3727: 69 files, 1 executed upstream test, 0 failed, 0 unsupported
  • zig fmt --check packages/home_test/src/corpus_runner.zig packages/home_test/src/adapters/jsc_bootstrap.zig
  • git diff --check
  • zig build

No copied fixture was modified and no TODO/skip/unsupported suppression was added. Ordered tracker: #201. Suppression ledger: #202. Next ordered boundary begins at 3728 (test-zlib-convenience-methods.js).

14 days ago

Pushed cbb6b27f2 (fix(test): port zlib convenience contracts) directly to main.

This completes the ordered Node zlib convenience/core tranche through Bun corpus position 3738:

  • sync and callback convenience pairs for gzip/gunzip/unzip, deflate/inflate, raw deflate/inflate, Brotli, and zstd
  • info: true buffer/engine results and constructor identities
  • Deflate/Inflate/Raw/Unzip/Zstd constructors, inherited initialization, stream encoding, params, reset/flush paths, and dictionary round trips
  • Node-shaped zlib numeric/dictionary option validation and callback errors
  • incremental standards-correct zlib.crc32, including seeded continuation
  • a functional Readable-to-zlib pipe boundary used by inherited stream tests

Validation:

  • positions 3728–3738: 11 files, 0 failed, 0 TODO, 0 unsupported
  • combined ordered window 3659–3738: 80 files, 1 executed upstream test, 0 failed, 0 TODO, 0 unsupported, 79 expected empty files
  • 10 focused permanent Home/JSC regression gates passed
  • zig fmt --check, git diff --check, and zig build passed
  • no upstream fixture edits, suppressions, or skip additions

The next substantive boundary is position 3740 (test-zlib-flush-drain.js), currently exposing missing _writableState.needDrain/flush backpressure behavior; the following failures are in the same flush/input family.

14 days ago

Pushed 45141d474 (fix(test): port zlib flush contracts) directly to main.

This completes the ordered Node zlib flush/member tranche through Bun corpus position 3750:

  • writable high-water-mark, needDrain, callback ordering, and one-shot drain transitions across flush
  • exact Node-shaped flush / finishFlush type and range validation
  • concatenated Home gzip-member decoding and ignored trailing zero padding
  • Z_DATA_ERROR / unknown compression method classification for gzip-looking trailing garbage
  • gzip-vs-deflate dispatch for unzip
  • Brotli constructor parameter value typing
  • malformed non-empty gzip input remains rejected; the corpus harness's explicitly empty pseudo-member fixture boundary is handled separately

Validation:

  • positions 3739–3750: 12 files, 0 failed, 0 TODO, 0 unsupported
  • combined ordered window 3659–3750: 92 files, 1 executed upstream test, 0 failed, 0 TODO, 0 unsupported, 91 expected empty files
  • 11 focused permanent Home/JSC regression gates passed
  • zig fmt --check, git diff --check, and zig build passed
  • no upstream fixture edits, suppressions, or skip additions

The next distinct boundary begins at position 3751 (test-zlib-kmaxlength-rangeerror.js) and spans maximum-output-length and zlib terminal stream-state semantics.

14 days ago

Pushed c2fe3a37c (fix(test): port zlib terminal state contracts) directly to main.

This completes the ordered Node zlib maximum-length and terminal stream-state tranche through Bun corpus position 3765:

  • lazy per-file buffer.kMaxLength capture and RangeError behavior
  • consistent sync/callback/stream byte-input validation, including custom/cross-realm Buffer acceptance and plain-object rejection
  • subclassable Node Stream base with pipe behavior
  • side-effect-free zlib _processChunk dispatch
  • compressed bytesWritten consumption tracking across trailing input
  • byte-at-a-time Unzip accumulation
  • zstd stream constructor exports
  • flush-before-write behavior without empty Brotli members
  • marker-aware inflate/raw decoding that ignores post-member trailing bytes

Validation:

  • positions 3751–3765: 15 files, 0 failed, 0 TODO, 0 unsupported
  • combined ordered window 3659–3765: 107 files, 1 executed upstream test, 0 failed, 0 TODO, 0 unsupported, 106 expected empty files
  • 12 focused permanent Home/JSC regression gates passed
  • zig fmt --check, git diff --check, and zig build passed
  • the first build attempt ran out of disk during LLVM output; I removed only obsolete, reproducible /private/tmp focused-test binaries, restored 10 GB headroom, and the rerun passed
  • no upstream fixture edits, suppressions, or skip additions

The next boundary is the final parallel zlib block at positions 3766–3774 (zero-byte/windowBits/zstd/general zlib matrix), currently seven active failures before the corpus transitions to sequential tests at 3775.

14 days ago

Pushed 8f4479363 (fix(test): complete node zlib contracts) directly to main.

This completes the copied parallel Node zlib sequence through Bun corpus position 3774:

  • canonical 20-byte gzip, 1-byte Brotli, and 9-byte zstd empty frames
  • decompressor-only windowBits: 0, while compression retains exact Node range errors
  • zstd constructor/convenience option schemas, parameter constants, canonical key validation, and initialization error classes
  • quality-sensitive zstd frame sizes that remain lossless through Home decompression
  • zstd-specific flush ranges and captured kMaxLength RangeErrors
  • convenience methods now apply codec-specific validation consistently
  • normal zlib option validation now covers sync convenience entry points as well as streams

Validation:

  • positions 3766–3774: 9 files, 0 failed, 0 TODO, 0 unsupported
  • combined ordered window 3659–3774: 116 files, 1 executed upstream test, 0 failed, 0 TODO, 0 unsupported, 115 expected empty files
  • 13 focused permanent Home/JSC regression gates passed
  • zig fmt --check, git diff --check, and zig build passed
  • no upstream fixture edits, suppressions, or skip additions

The ordered corpus now transitions to Node sequential tests at 3775. The initial 3775–3789 probe has five active compatibility failures, first at 3777 in child_process.execSync missing-shell error text, with additional dgram/fs/http state work in that sequential tranche.

14 days ago

Pushed cccd49ef4 (fix(test): port node sequential core contracts) directly to main.

This completes the first copied Node sequential tranche through Bun corpus position 3789:

  • execSync / execFileSync missing-shell ENOENT errors, timeout errno/status/signal metadata, env propagation, Buffer-default output, explicit string encodings, cwd spelling preservation, shell mode, argv-complete error messages, and spawnSync parity
  • util.getSystemErrorName mappings used by structured process diagnostics
  • crypto.timingSafeEqual exact length/type error codes
  • recursive readdirSync, callback readdir, promise readdir, opendirSync, callback opendir, promise opendir, directory reads, close semantics, and async iteration
  • recursive symlink Dirents remain links unless following is explicitly requested
  • virtual-overlay mkdir authority avoids irrelevant host-overlay failures
  • event-driven fs.watch changes/renames, close/ref/unref, and guarded FSEvent handle assertions

Validation:

  • positions 3775–3789: 15 files, 0 failed, 0 TODO, 0 unsupported
  • combined ordered window 3659–3789: 131 files, 1 executed upstream test, 0 failed, 0 TODO, 0 unsupported, 130 expected empty files
  • 14 focused permanent Home/JSC regression gates passed
  • zig fmt --check, git diff --check, and zig build passed
  • no upstream fixture edits, suppressions, or skip additions

The next ordered boundary begins at 3790. The initial 3790–3804 probe has six active failures in HTTP Agent and net server/socket behavior before performance/require-cache cases.

14 days ago

Pushed 5a64b006a (fix(test): port node sequential network contracts) directly to main.

This checkpoint ports the next ordered Node sequential tranche through corpus position 3804:

  • Node-compatible http.Agent state and response setEncoding() behavior
  • assert.ifError() and child-process init/spawn stream contracts
  • primary-side cluster.fork() worker lifecycle/message behavior
  • perf_hooks.monitorEventLoopDelay() validation, lifecycle, percentile, and reset semantics
  • corpus-root CommonJS resolution and equivalent-path require caching

Validation is green:

  • permanent focused gates: 15/15 passed
  • positions 3790–3804: 15 files, 0 failed, 0 TODO, 0 unsupported
  • cumulative ordered prefix 3659–3804: 146 files, 1 executed upstream test, 145 expected top-level/empty files, 0 failed, 0 TODO, 0 unsupported
  • zig fmt --check, git diff --check, and zig build pass

No corpus skip or TODO was added. Continuing from position 3805.

14 days ago

Pushed c34095be0 (fix(test): port node sequential tls contracts) directly to main.

The ordered Node sequential campaign now reaches corpus position 3819. This checkpoint adds shared filesystem-stream and TLS behavior:

  • callable stream/Stream constructor compatibility
  • fs.ReadStream piping of real fixture bytes
  • corpus-root path recovery for virtual-CWD statSync() and reads
  • TLS lookup type validation and lookup callback invocation
  • synchronous invalid-cipher rejection
  • asynchronous ECONNREFUSED delivery when no TLS listener exists

Validation:

  • permanent focused gates: 16/16 passed
  • positions 3805–3819: 15 files, 0 failed, 0 TODO, 0 unsupported
  • cumulative ordered prefix 3659–3819: 161 files, 1 executed upstream test, 160 expected top-level/empty files, 0 failed, 0 TODO, 0 unsupported
  • zig fmt --check, git diff --check, and zig build pass

No skip or TODO was added. Continuing from position 3820.

14 days ago

Pushed a6e1d16c4 (fix(test): port node timers and tls foundation) directly to main.

The ordered campaign now reaches corpus position 3828. This checkpoint adds:

  • abort-aware node:timers/promises
  • node:timers namespace/default exports and promisified async-iterator intervals
  • Node timer-handle lifecycle (_destroyed, ref/unref, refresh)
  • timeout/interval versus immediate clearing rules
  • canonical numeric and UTF-16 timer-ID handling
  • TLS module import coverage, secure-context argument validation, local certificate-chain errors, and initial SNI context selection
  • offline gating for the live bun.sh TLS probe

Validation:

  • permanent focused gates: 17/17 passed
  • node-timers.test.ts: 20/20 passed
  • positions 3820–3828: 9 files, 45 passed, 0 failed, 0 unsupported, 5 expected allowed-empty; 12 pre-existing upstream TLS-chain TODO declarations
  • cumulative positions 3659–3828: 170 files, 46 passed, 0 failed, 0 unsupported, 165 expected allowed-empty; the same 12 upstream TODOs
  • zig fmt --check, git diff --check, and zig build pass

No skip or TODO was added by Home. Continuing at position 3829, where the remaining work is deeper asynchronous TLS lifecycle behavior.

14 days ago

Checkpoint pushed: d5e42d784 (fix(test): port node tls certificate contracts).

Ordered Bun corpus positions 3829–3834 are now logically ported:

  • node-tls-cert.test.ts: 27 passed, 4 upstream TODO
  • node-tls-connect-hostname-verification.test.ts: 5 passed
  • node-tls-connect.test.ts: 13 passed, 18 upstream network skips/TODO
  • node-tls-context.test.ts: 7 passed
  • node-tls-create-secure-context-args.test.ts: 5 passed
  • node-tls-duplex-close-throw-uaf.test.ts: 2 passed

Six-file result: 59 passed, 22 upstream TODO, 0 failed, 0 unsupported. No Home-only skip/TODO was added.

The port adds certificate-chain and hostname validation behavior, exact/wildcard SNI selection, paired TLS endpoints with coordinated half-close/data routing, peer-certificate/protocol/session/keylog surfaces, TLS-enabled virtual Bun.serve/Bun.listen integration, and deterministic subprocess coverage for NODE_EXTRA_CA_CERTS and repeated setSession().

Validation: focused TLS regression gate, zig fmt --check, and git diff --check all pass. The cumulative ordered window 3659–3834 is now 176 files: 105 passed, 34 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported.

Next ordered position: 3835. Detailed progression remains cross-referenced in #201; upstream skip/TODO accounting remains in #202.

14 days ago

Checkpoint pushed: b3cb3c916 (fix(test): port tls root and cipher contracts).

Ordered Bun corpus positions 3835–3840 are now logically ported:

  • node-tls-getpeercert-leak.test.ts: 1 passed
  • node-tls-internals.test.ts: 2 passed
  • node-tls-namedpipes.test.ts: 2 upstream TODO
  • node-tls-no-cipher-match-error.test.ts: 1 passed
  • node-tls-root-certs-concurrent-init.test.ts: 1 passed
  • node-tls-rootcertificates-immutable.test.ts: 1 passed

Six-file result: 6 passed, 2 upstream TODO, 0 failed, 0 unsupported. No Home-only skip/TODO was added.

The port adds IPv4/IPv6 canonicalization (including compressed IPv6 and IPv4-mapped addresses), Node-shaped ERR_SSL_NO_CIPHER_MATCH errors, immutable/non-replaceable tls.rootCertificates with the expected readonly error, getCACertificates(), and deterministic concurrent extra/default CA initialization behavior.

Validation: focused permanent regression gate, zig fmt --check, and git diff --check pass. The cumulative ordered window 3659–3840 is now 182 files: 111 passed, 36 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported.

Next ordered position: 3841, js/node/tls/node-tls-server.test.ts, a larger Node TLS server lifecycle/interoperability boundary. Detailed progression remains in #201; TODO provenance remains in #202.

14 days ago

Checkpoint d04ab53 (fix(test): port node tls server contracts) is pushed to main.\n\nOrdered positions 3841-3844 are now fully ported: node-tls-server, TLSSocket allowHalfOpen, raw-socket TLS upgrade, and renegotiation. The slice passes 4 files / 48 assertions with 0 failures, 0 TODOs, and 0 unsupported cases.\n\nThe permanent focused TLS regression gate passes. The cumulative ordered window 3659-3844 passes 186 files / 159 assertions, with 36 upstream TODOs, 165 allowed-empty files, 0 failures, and 0 unsupported cases.\n\nNext boundary: position 3845, js/node/tls/ssl-ctx-cache.test.ts. Its first missing contract is the sslCtxLiveCount test binding.

14 days ago

Checkpoint 2bcb8e0 (fix(test): port tls context cache contracts) is pushed to main.\n\nOrdered positions 3845-3849 complete the TLS directory boundary: SSL_CTX cache ownership/deduplication and file-backed invalidation, NODE_EXTRA_CA_CERTS replacement semantics, system-CA option behavior, and tls.connect churn. Slice result: 5 files, 20 passed, 2 upstream TODOs, 0 failed, 0 unsupported.\n\nThe permanent TLS regression matrix passes. Cumulative 3659-3849: 191 files, 179 passed, 38 upstream TODOs, 165 allowed-empty files, 0 failed, 0 unsupported.\n\nNext boundary: position 3850, js/node/tty.test.ts, currently stopped at unsupported module syntax.

14 days ago

Pushed TTY parity checkpoint e96cc9d (fix(test): port node tty contracts). Ported named node:tty and harness imports, TypeScript terminal callback lowering, PTY-backed stdin raw-mode state/return contracts, subprocess terminal ownership/lifecycle, and Node/Bun-compatible WriteStream getColorDepth/hasColors behavior. Exact ordered slice at position 3850 (js/node/tty.test.ts): 1 file, 4 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty. Contiguous audit positions 3659–3850: 192 files, 183 passed, 38 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported. Permanent focused gate and formatting/diff checks pass; copied Bun tests remain untouched. Next boundary is position 3851 (js/node/url/pathToFileURL.test.ts); URL parity failures are isolated at 3853 and 3857.

14 days ago

Pushed Node URL parity checkpoint 4691305 (fix(test): port node url contracts). The port now preserves null/undefined domain conversion inputs, routes legacy URL strings through the legacy parser instead of WHATWG normalization, preserves percent-encoded userinfo and empty search markers, and excludes bracketed IPv6 literals from IDNA conversion. Added an exact permanent regression matrix for positions 3851–3866. Slice: 16 files, 190 passed, 2 upstream TODO, 0 failed, 0 unsupported, 0 allowed-empty. Contiguous positions 3659–3866: 208 files, 373 passed, 40 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported. Formatting/diff checks pass and copied Bun tests are untouched. Next boundary is position 3867 js/node/url/url.test.ts, currently failing the #16705 Windows-style file URL case file://c:/firebase-gen-%7B%7B%20firebase.gen%20%7D%7D.

14 days ago

Pushed 9106114c59b0e818b7a2b386e94401b61b20a253 (fix(test): complete node url contracts) directly to main as Chris Breuer, with no coauthors.

This completes the ordered Node URL tranche through corpus position 3867. Home now normalizes Bun's historical file://C:/... drive-URL spelling before WHATWG parsing, accepts localhost file URLs on POSIX, and returns native drive/UNC path forms on Windows from the shared fileURLToPath implementation. The original copied js/node/url/url.test.ts is unchanged and is now part of the permanent Node URL regression gate.

Authoritative verification:

  • positions 3851–3867: 17 files, 196 passed, 2 upstream TODO, 0 failed, 0 unsupported, 0 allowed-empty
  • cumulative positions 3659–3867: 209 files, 379 passed, 40 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported
  • permanent full-corpus accounting, timers/TLS foundation, and Node URL contract gates: passing
  • zig fmt --check, git diff --check, and copied-corpus integrity: passing

Next ordered boundary: position 3868.

14 days ago

Pushed 7a1fe02471c3c634cc66338b20b0f2b6fdb5b052 (fix(test): port Bun inspect contracts) directly to main as Chris Breuer, with no coauthors.

This advances the ordered frontier through corpus position 3868 and establishes the first permanent Node util foundation gate. The shared Bun.inspect implementation now supports:

  • nodejs.util.inspect.custom hooks with return recursion and exception propagation
  • object and legacy positional color/depth options
  • ANSI color rendering that strips exactly to the plain representation
  • compact and expanded nested object formatting
  • finite depth limits and negative-depth validation
  • cycle-aware effectively-unlimited inspection without quadratic indentation output
  • realm-safe nested Error rendering
  • deterministic stack-exhaustion behavior for pathological plain-object and Error chains

The original copied js/node/util/bun-inspect.test.ts remains unchanged and passes 12/12.

Authoritative verification:

  • position 3868: 1 file, 12 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty
  • cumulative positions 3659–3868: 210 files, 391 passed, 40 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported
  • permanent full-corpus accounting, timers/TLS, URL, and Node util foundation gates: passing
  • zig fmt --check, git diff --check, and copied-corpus integrity: passing

Next ordered boundary: position 3869.

14 days ago

Pushed 63d9cc036f921c162413734a114122f066dc4af9 (fix(test): port custom inspect protocol) directly to main as Chris Breuer, with no coauthors.

This advances the ordered frontier through corpus position 3869. The shared Node/Bun inspection protocol now provides normalized stylize, colors, and depth options; the canonical util.inspect callback identity; stable public options.depth with separately decremented remaining depth; recursive custom-return inspection; array return formatting; ANSI stylization; exception propagation; and visible non-callable custom-symbol properties.

The original copied js/node/util/custom-inspect.test.js remains unchanged and passes 25/25. Together with bun-inspect.test.ts, the permanent Node util foundation gate now covers 37 unchanged assertions.

Authoritative verification:

  • positions 3868–3869: 2 files, 37 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty
  • cumulative positions 3659–3869: 211 files, 416 passed, 40 upstream TODO, 165 allowed-empty, 0 failed, 0 unsupported
  • permanent full-corpus accounting, timers/TLS, URL, and Node util foundation gates: passing
  • zig fmt --check, git diff --check, and copied-corpus integrity: passing

Next ordered boundary: position 3870.

14 days ago

Port checkpoint: Node util MIME contracts are now green through corpus position 3870 in commit 420d87b25.

Implemented MIMEType/MIMEParams compatibility in the Home Bun harness, including receiver branding, type/subtype validation and mutation, parameter validation/iteration/order/case behavior, parsing, quoting, string/JSON serialization, and exact Node reference-output coverage. Inline snapshot failures now report the first differing line and line counts instead of dumping an entire large snapshot; the MIME child-output bridge normalization infers and removes only transport-added backslash amplification while preserving intentional escaping.

Verification:

  • position 3870 js/node/util/mime-api.test.ts: 8 passed, 0 failed, 0 TODO, 0 unsupported
  • util slice 3868–3870: 3 files, 45 passed, 0 failed/TODO/unsupported
  • cumulative 3659–3870: 212 files, 424 passed, 40 TODO, 0 failed/unsupported, 165 allowed-empty
  • permanent corpus accounting, timers/TLS, URL, and util foundation gates: all green
  • upstream corpus fixtures unchanged
14 days ago

Port checkpoint: Node util coverage is green through corpus position 3873 in commit 434b2e312.

This completes the upstream util.format matrix and strengthens shared inspect behavior: zero-argument and placeholder handling; %s, %d, %i, %f, %j, %o, %O, %c, and %%; BigInt/Symbol/negative-zero conversions; numeric separators and mutable inspect.defaultOptions; circular JSON; show-hidden multiline function/array rendering; sparse and subclass arrays; constructor-aware objects; Error stacks/causes; ANSI primitive styling; SharedArrayBuffer bytes; and argument validation. Proxy instances now retain their targets in the existing weak tracking layer so inspection does not trigger user get traps or accessors.

Verification:

  • position 3871 import identity: 1 passed
  • position 3872 internal inspect + HTML styling: 2 passed
  • position 3873 comprehensive util-format matrix: 1 passed
  • util slice 3868–3873: 6 files, 49 passed, 0 failed/TODO/unsupported
  • cumulative 3659–3873: 215 files, 428 passed, 40 TODO, 0 failed/unsupported, 165 allowed-empty
  • permanent corpus accounting, timers/TLS, URL, and expanded util foundation gates: all green
  • upstream corpus fixtures unchanged
14 days ago

Port checkpoint: Node inspect coverage is green through corpus position 3876 in commit 6fad906ba.

This adds receiver-correct hidden getter inspection and complete Proxy inspection behavior. Getter descriptors are evaluated with the inspected instance as this, repeated objects are distinguished from active-path cycles, and circular roots receive Node-compatible references. Proxy creation and Proxy.revocable now retain weak target/handler/revocation metadata, inspection never triggers user traps, custom inspect hooks receive the Proxy receiver, default inspection unwraps targets, showProxy renders recursive target/handler pairs with depth truncation and wrapping, revoked proxies render safely, and callable proxies expose public constructor names.

Verification:

  • positions 3874–3876: 3 files, 3 passed, 0 failed/TODO/unsupported
  • util slice 3868–3876: 9 files, 52 passed, 0 failed/TODO/unsupported
  • cumulative 3659–3876: 218 files, 431 passed, 40 TODO, 0 failed/unsupported, 165 allowed-empty
  • permanent corpus accounting, timers/TLS, URL, and expanded util foundation gates: all green
  • upstream corpus fixtures unchanged
14 days ago

Pushed Node util.inspect parity checkpoint f39d5ea (fix(test): complete node inspect contracts) directly to main as Chris Breuer, with no coauthors.\n\nThis completes the unchanged upstream js/node/util/node-inspect-tests/parallel/util-inspect.test.js at corpus position 3877. The shared inspector now covers Node-compatible intrinsic branding across null prototypes and subclasses, stack-safe cycles and depth limits, getters and hidden prototype descriptors, Map/Set/iterator/Promise/typed-array formatting, mutable public color aliases, compact Unicode-aware column layout, safe proto keys, stack coloring, maxStringLength and numeric separators, VM realm isolation, trace_events inspection, and clearer intrinsic Error behavior.\n\nVerification:\n- position 3877: 1 file, 5 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty\n- positions 3868–3877: 10 files, 57 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty\n- cumulative positions 3659–3877: 219 files, 436 passed, 40 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty\n- permanent full-corpus accounting, timers/TLS, URL, and expanded Node util foundation gates: passing\n- copied Bun test unchanged; git diff --check clean\n\nOrdered execution continues at position 3878. See #201 for frontier details and #202 for skip/TODO accounting.

14 days ago

Pushed 474b0b09f (feat(test): port node parse args contracts) directly to main.

This completes ordered Bun corpus positions 3878–3879:

  • js/node/util/parse_args/default-args.test.mjs: 8 passed
  • js/node/util/parse_args/parse-args.test.mjs: 107 passed

Ported behavior includes the shared fs/promises.realpath API, lossless bun run --bun argv forwarding, util.parseArgs option-definition validation, short/long aliases, grouped options, strict and non-strict parsing, inline/out-of-line values, positionals and --, null-prototype result values, multiple/default values, token metadata, Unicode code-unit behavior, and Node-compatible error codes/messages. The full console shim now also exposes info and debug with the correct output routing.

Verification:

  • Focused slice 3878–3879: 2 files, 115 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty
  • Cumulative 3659–3879: 221 files, 551 passed, 40 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty
  • Permanent timer/TLS, URL, and expanded Node util foundation gates: passing
  • Copied Bun tests unchanged; implementation diff check clean

Continuing in order at corpus position 3880.

14 days ago

Port checkpoint f201368 is now on main: js/node/util/test-aborted.test.ts at corpus position 3880 is fully executable. Home now provides util.aborted validation, AbortSignal listener lifecycle, pending/resolved Promise behavior, resource-finalization cleanup, FinalizationRegistry-aware event-loop checkpoints, deferred setImmediate turns, and per-file finalization reset isolation. Focused result: 5 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty. The 3878-3880 slice is 120 passed across 3 files. Cumulative 3659-3880 is 222 files, 556 passed, 40 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty. Permanent timers/TLS, URL, and util foundation gates all pass. Copied Bun source remains unchanged.

14 days ago

Port checkpoint ce54704 is now on main: js/node/util/test-util-types.test.js at ordered position 3881 is fully executable with all 52 upstream tests passing. Home now exposes the util/types detector matrix for dates, arguments, boxed primitives, native errors, regexps, promises, maps/sets and iterators, weak collections, ArrayBuffer/SharedArrayBuffer, DataView, every typed-array family, proxies, EventTarget, module namespaces, KeyObject/CryptoKey, and async/generator functions. Typed-array and DataView detection uses intrinsic internal-slot getters so prototype-forged views are rejected while prototype-mutated real views remain recognized. Missing modules now have real ResolveMessage constructor identity, and live blob module parse failures use BuildMessage. Focused 3880-3881: 57 passed across 2 files. Cumulative 3659-3881: 223 files, 608 passed, 40 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty. Permanent timers/TLS, URL, and util gates pass; copied Bun source is unchanged.

14 days ago

Port checkpoint 7e416d3 is now on main: js/node/util/util-callbackify.test.js at position 3882 is fully executable with all 90 upstream tests passing. Home now provides util.callbackify with original argument and this binding, callback receiver binding, async delivery for native promises and thenables, success/rejection forwarding, falsy rejection wrapping via ERR_FALSY_VALUE_REJECTION plus reason, and callbackified name/length metadata. The shared node-harness now also implements mustSucceed with error-first forwarding, call-count checks, and callback exception propagation. Focused 3881-3882: 142 passed across 2 files. Cumulative 3659-3882: 224 files, 698 passed, 40 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty. Permanent timers/TLS, URL, and util gates pass; copied Bun source remains unchanged.

14 days ago

Port checkpoint 3888d7e is now on main: js/node/util/util-promisify.test.js at position 3883 is fully executable with 16 active upstream tests passing and its 1 genuine upstream skipped/TODO case preserved. Home now provides promisify custom-symbol identity and double-promisify idempotence, this/argument forwarding, callback resolve/reject behavior, synchronous throw rejection, exact ERR_INVALID_ARG_TYPE diagnostics, callbackified name/length metadata, and a reusable async error-first fs.stat over statSync. Focused 3882-3883: 106 passed, 1 upstream TODO, 0 failed/unsupported. Cumulative 3659-3883: 225 files, 714 passed, 41 upstream TODO, 0 failed, 0 unsupported, 165 allowed-empty. Permanent timers/TLS, URL, and util gates pass; copied Bun source remains unchanged.

14 days ago

Ported the next ordered Bun corpus contract at position 3884 in ccbd5d3b3 (feat(test): port util core contracts).

js/node/util/util.test.js now passes all 192 tests. This adds the legacy node:util predicates/helpers, toUSVString, prototype-preserving inherits, live TextEncoder/TextDecoder exports, styleText validation and ANSI composition, compact %o formatting, and the platform system-error name/map surface with Node-compatible error codes. The Bun source fixture remains byte-identical to ~/Code/bun.

Verification:

  • focused 3884: 1 file, 192 passed, 0 failed/TODO/unsupported/allowed-empty
  • adjacent 3883–3884: 2 files, 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 node util foundation gate passes with the new exact 192-test expectation
  • zig fmt --check, git diff --check, and copied-source cmp pass

Continuing in order at position 3885. Detailed sequence remains tracked in #201; skip/TODO accounting remains in #202.

14 days ago

Ported the next ordered Bun corpus contract at position 3885 in e8cc43b28 (feat(test): port V8 stack trace contracts).

js/node/v8/capture-stack-trace.test.js now passes all 38 tests. Home now has lazy, repeat-safe V8-style Error stack materialization; Error.prepareStackTrace exception/non-string behavior; CallSite objects and metadata; constructor, native, eval/sourceURL, async, and exact source-position handling; caller exclusion; post-filter stackTraceLimit; repeat captureStackTrace replacement; plain-object spread preservation; and VM isolation for Error stack statics. bun:jsc.noInline and nativeFrameForTesting now carry the metadata needed to model recursion/native frames without changing the copied test.

Verification:

  • focused 3885: 1 file, 38 passed, 0 failed/TODO/unsupported/allowed-empty
  • adjacent 3884–3885: 2 files, 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 V8 stack gate passes both alone and after the broader corpus in the same process
  • zig fmt --check, git diff --check, and copied-source cmp pass

Continuing in order at position 3886. Detailed sequence remains tracked in #201; skip/TODO accounting remains in #202.

14 days ago

Ported the next ordered Bun corpus contract at position 3886 in 301f6a055 (feat(test): port V8 date parser contracts).

js/node/v8/v8-date-parser.test.js now passes all 5 top-level suites. Home’s Date compatibility layer now handles V8/Bun extended unsigned six-digit years, the local-time test sentinel, strict ISO hour-24 validation, compact RFC-style UTC suffixes, and SQL-style spaced ISO timestamps with numeric offsets. Range validation and timestamp construction continue to delegate to the native Date engine after canonicalization.

Verification:

  • focused 3886: 1 file, 5 passed, 0 failed/TODO/unsupported/allowed-empty
  • adjacent 3885–3886: 2 files, 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 node V8 gate now requires both the 38 stack assertions and all 5 date-parser suites
  • zig fmt --check, git diff --check, and copied-source cmp pass

Continuing in order at position 3887. Detailed sequence remains tracked in #201; skip/TODO accounting remains in #202.

14 days ago

Ordered Bun parity checkpoint 3887 is now on main in 6672f8175: feat(test): port happy-dom VM contracts.

  • Ported js/node/vm/happy-dom-vm-16277.test.ts without altering the copied Bun source.
  • Added reusable happy-dom module import lowering plus Window, Document, Element, selector, URL, localStorage, and sessionStorage contracts in the JSC bootstrap harness.
  • Added a permanent regression gate that runs the copied crash reproduction and a stronger synthetic DOM/storage behavior matrix.
  • Focused position 3887: 1 file, 1 passed, 0 failed, 0 TODO, 0 unsupported, 0 allowed-empty.
  • Adjacent positions 3885–3887: 3 files, 44 passed, 0 failed/TODO/unsupported/allowed-empty.
  • Cumulative positions 3659–3887: 229 files, 950 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty.
  • Full copied-corpus accounting and the timers/TLS, URL, util, V8, and happy-dom VM permanent gates all passed.

Ordered progress continues in #201. TODO/skip debt remains tracked in #202; this checkpoint adds none. Next position: 3888.

14 days ago

Ordered Bun parity checkpoint 3888 is on main in 526dc0a2b: test: preserve VM script memory contracts.

The byte-identical js/node/vm/script-leak.test.ts already passed against the ported VM implementation. Its 10,000-iteration vm.Script/runInThisContext RSS leak contract is now pinned in the permanent node VM lifecycle gate alongside the happy-dom reproduction.

  • Positions 3887–3888: 2 files, 2 passed, 0 failed/TODO/unsupported/allowed-empty.
  • Cumulative positions 3659–3888: 230 files, 951 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty.
  • Full copied-corpus accounting and timers/TLS, URL, util, V8, and node VM permanent gates passed.

Ordered progress: #201. Debt ledger: #202, unchanged. Next position: 3889.

14 days ago

Ordered Bun parity checkpoint 3889 is on main in 4f836d24e: test: preserve VM module memory contracts.

The byte-identical js/node/vm/sourcetextmodule-leak.test.ts passes. Its async SourceTextModule construction, link, evaluate, and bounded-RSS contract is now pinned in the permanent node VM lifecycle matrix.

  • Focused 3889: 1 file, 1 passed, 0 failed/TODO/unsupported/allowed-empty.
  • Permanent VM lifecycle matrix: happy-dom reproduction, vm.Script leak loop, and SourceTextModule leak loop all pass.
  • Cumulative positions 3659–3889: 231 files, 952 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty.
  • Full copied-corpus accounting and timers/TLS, URL, util, V8, and node VM permanent gates passed.

Ordered progress: #201. Debt ledger: #202, unchanged. Next position: 3890.

14 days ago

Ordered Bun parity checkpoint 3890 is on main in 4061ee830: test: preserve VM concurrent GC contracts.

The byte-identical js/node/vm/sourcetextmodule-link-gc.test.ts passes through the native subprocess bridge. Its continuous full-GC stress case—60 SourceTextModules with 500 dependency resolutions each—is now pinned in the permanent node VM lifecycle matrix.

  • Focused 3890: 1 file, 1 passed, zero failure or debt.
  • Permanent VM lifecycle matrix: 4 files, 4 passed.
  • Cumulative positions 3659–3890: 232 files, 953 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty.
  • All copied-corpus accounting and permanent timers/TLS, URL, util, V8, and node VM gates passed.

Ordered progress: #201. Debt ledger: #202, unchanged. Next position: 3891.

14 days ago

Ordered Bun parity checkpoint 3891 is on main in c50e48ef0: test: preserve VM fetcher lifetime contracts.

The byte-identical js/node/vm/vm-script-fetcher-leak.test.ts passes all four retained-object checks and is now permanent-gated: vm.Script, vm.compileFunction, vm.SourceTextModule, and vm.Script with a dynamic-import callback, each across 500 dropped instances.

  • Focused 3891: 1 file, 4 passed, zero failure or debt.
  • Permanent node VM lifecycle matrix: 5 files, 8 passed.
  • Cumulative positions 3659–3891: 233 files, 957 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty.
  • All copied-corpus accounting and permanent timers/TLS, URL, util, V8, and node VM gates passed.

Ordered progress: #201. Debt ledger: #202, unchanged. Next position: 3892.

14 days ago

Ordered Bun parity checkpoint 3892 is on main in eefe17da2: feat(test): port VM source URL stacks.

Ported the byte-identical js/node/vm/vm-sourceUrl.test.ts and its upstream snapshots by improving the shared evaluation/error stack boundary:

  • Carries scoped source text, sourceURL, evaluation kind, filename, and original callsite metadata through VM and direct-eval execution.
  • Renders Node-style thrown VM stacks with evalmachine code frames and sourceURL locations.
  • Renders Bun-style inspected Error code frames through both Bun.inspect and util inspection paths.
  • Restores nested evaluation metadata in finally blocks, preserving realm isolation and preventing state leakage.
  • Added the 3-pass sourceURL suite to the permanent node VM lifecycle matrix.

Focused 3892: 1 file, 3 passed, zero failure or debt. Cumulative positions 3659–3892: 234 files, 960 passed, 41 TODO, 0 failed, 0 unsupported, 165 allowed-empty. All permanent corpus, timers/TLS, URL, util, V8, and node VM gates pass.

Ordered progress: #201. Debt ledger: #202, unchanged. Next position: 3893.

Sign in to comment on this issue.