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

Bake resolver cache parity is now on main in 58ec230e1, and #561 is complete.

The fix restores Bun's process-shared directory-cache semantics and stable cache pointers, eliminating the missing package metadata panic reached by the unchanged request-cookie test. Current admitted Bake coverage is 8 unchanged upstream files: 89 pass, 1 upstream todo, 0 fail (211 assertions), plus the deinitialization child at 9 pass and 32 assertions. The focused Home runtime gate is green at 1,814 pass, 19 skip, 0 fail.

Next I am continuing the unchanged pinned Bun corpus frontier rather than treating this checkpoint as completion.

14 days ago

The next Bake corpus checkpoint is on main in 1f31d1836, closing #562.

Home now serializes native exception details into streamed SSR fallback payloads. The unchanged pinned react-response.test.ts is green at 11 pass, 0 fail, including both failures that previously decoded an empty exception list. Focused runtime verification is 1,815 pass, 19 skip, 0 fail, and the named Bake development gate remains green.

An unrestricted nine-file probe also confirmed the next admission boundary is the browser-client harness dependency path (happy-dom is resolved by a Node subprocess from the pinned Bun checkout, outside the temporary overlay). I am continuing there rather than counting those harness setup exits as Home runtime failures.

14 days ago

Follow-up to the 1f31d1836 checkpoint: the unrestricted nine-file Bake aggregate is fully green when the browser simulation is also executed by Home through an isolated executable alias (so the pinned checkout remains untouched and happy-dom resolves from the disposable overlay). Result: 100 pass, 1 upstream todo, 0 fail across 101 tests, plus the deinitialization child at 9 pass, 0 fail. The earlier 26 exits were solely the external Node subprocess resolving from /Users/chris/Code/bun/test; they are not Home runtime failures.

14 days ago

Bake admission update: three more unchanged pinned files are green with the copied read-only overlay and intended Node/happy-dom browser simulator: dev-and-prod.test.ts 12/12, dev/css.test.ts 14/14, and dev/ecosystem.test.ts 1/1. Aggregate admitted coverage is now 127 pass, 1 upstream todo, 0 fail across 128 tests in 12 files, plus the deinitialization child at 9/9.

14 days ago

Bake production failure handling checkpoint: #563 is complete in 385c854e6, and the unchanged Bun production corpus is now admitted at 8/8. The checkpoint preserves detailed server-component build diagnostics and terminates a deadlocked SSG aggregate promise once no event-loop work can settle it.

Adjacent unchanged React SPA coverage remains 6/6. The cumulative Bake admission tally is now 152 passes + 1 upstream todo across 153 tests in 18 files, with zero admitted failures.

Checkpoint gates: filtered home_rt 1,815 passed / 19 skipped / 0 failed; named Bake production and development integration gates passed; Pickier passed on changed files; JSC-enabled and JSC-disabled debug builds passed. Full evidence: /home-lang/home/issues/563#issuecomment-5466855278

14 days ago

Bake corpus full-inventory update:

Full unrestricted Bake aggregate on Home at 385c854e6:

  • 177 passed, 2 todo, 0 failed
  • 683 parent assertions across all 179 tests in all 24 pinned files
  • deinitialization child: 9 passed, 0 failed, 32 assertions
  • elapsed: 296.4 seconds
  • pinned Bun SHA: 4982b91e3702094330f3be3883354c52b8c01323
  • upstream test/fixture sources remained unchanged

The two TODOs are platform exclusions in the pinned sources, not observed Home failures. #564 now tracks executing the Linux-only merged-inotify case and the Darwin-flaky barrel regression on Linux as real tests.

All 24 Bake files have now been inventoried and executed together without an admitted failure. I am keeping #555 open until the temporary overlay/dependency setup used for this audit is captured as a reproducible repository command; the whole Bun-suite objective also remains open in #66.

14 days ago

Bake admission checkpoint pushed in 972979e09:

  • added reproducible ./scripts/run-bake-corpus.sh
  • validates pinned Bun SHA 4982b91e3702094330f3be3883354c52b8c01323
  • executes all 24 unchanged Bake files through Home with exact locked dependencies
  • fresh aggregate: 177 pass, 2 todo, 0 fail, 683 assertions, 179 tests
  • React RSC cache, browser client, production/dev servers, and nested test subprocesses are included
  • no installed Bun executable delegates suite execution

#555 is complete and closed. The two source-level macOS platform skips remain explicitly tracked by #564 for Linux CI execution. This is Bake-slice parity only; the overall Bun parity goal remains open here.

14 days ago

Checkpoint update: bbe6133f4 is now on main, and #509 is closed with full evidence in its completion comment.

This activates the pinned full internal synchronous-spawn implementation behind Home's stable helper import, replacing the reduced backend that rejected IPC, detached, and stdin-buffer options and ignored the complete argv0/macOS exec contract. The focused fd-3 parent/child regression fails on the pre-change binary with UnsupportedIpcDescriptor and passes exactly after the change. JSC-enabled and disabled builds pass; focused home_rt reports 1,815 passed / 19 skipped / 0 failed; native core CLI, bunx, and changed-test buffered-capture checks pass.

The checkpoint was rebased onto concurrent main commit 4c91fc4f4 and pushed without force. Commit author and committer are Chris Breuer <chrisbreuer93@gmail.com> with no coauthors.

Recently resolved ledger items now include the reproducible Bake gate and #555, the already-merged #502 implementation verified and closed, and #509. #564 remains open for Linux-only Bake platform cases. This checkpoint is Darwin execution evidence only; it does not claim Linux/Windows runtime verification, a green repository-wide umbrella test, or complete Bun parity. The known unrelated ts_conformance baseline-selection failures and the remaining linked parity issues stay open.

14 days ago

Checkpoint update: 8c56f61c6 is on main, and #485 is closed with its complete verification record.

Native home test --parallel now activates the pinned process-pool coordinator and real isolated Home workers instead of returning ParallelTestCoordinatorNotImplemented. The complete unchanged parallel file passes 27/27 tests, 185 assertions, and 1 snapshot. The original three-case reproduction is 3 pass / 24 filtered / 0 fail / 24 assertions / 1 snapshot. The permanent native regression proves two files use two distinct Home processes and worker IDs; focused runtime units are 1,815 pass / 19 skip / 0 fail with 20/20 build steps. JSC-enabled and disabled native builds pass 18/18 and 5/5.

Two integration corrections are included: fd 3 backpressure is linear for the pinned 68 MB result-line case, and POSIX new_process_group now reaches POSIX_SPAWN_SETPGROUP; waking the coordinator loop and killing worker groups removes workers and grandchildren under the unchanged SIGTERM case. The spawn follow-up is cross-referenced in #493.

The commit was pushed without force, authored and committed as Chris Breuer <chrisbreuer93@gmail.com> with no coauthors. This is Darwin-only execution evidence. The repository-wide umbrella gate is not green: the current attempt reported an unrelated parser allocation leak before being interrupted after a long silent remainder, and the known unrelated TypeScript conformance baseline failures remain. Linux/Windows verification, skips/TODOs, other open linked issues, and complete Bun-suite parity remain unresolved; #66 stays open.

14 days ago

Checkpoint update: #482 is closed after supported optimized verification, documented on main in 4214a24b1 and detailed in the completion record.

The JSC-enabled ReleaseFast build passes 18/18 steps. The unchanged 100 MiB eval-source fixture exits 0 in 2.875 seconds, retaining one warmup plus five measured workers, the collection loops, and the 500 MiB growth assertion. The complete unchanged worker_threads file passes 34/34 tests and 153 assertions in 2.788 seconds; its eval-source case completes in 2,046.96 ms, below the original five-second deadline. Both files are byte-identical to pin 4982b91e3702094330f3be3883354c52b8c01323.

No runtime or corpus source was changed for this checkpoint because the supported optimized build already meets the issue contract. The historical Debug execution remains reported separately at 20.22 seconds and is not called deadline-equivalent. The docs commit was pushed without force, authored and committed as Chris Breuer <chrisbreuer93@gmail.com> with no coauthors.

This is Darwin-only optimized evidence. Linux/Windows execution, remaining worker lifecycle items, the known unrelated umbrella-test failures, skips/TODOs, and the full Bun-suite ledger remain unresolved; #66 stays open.

14 days ago

Link correction for the preceding #482 ledger update: the completion record is /home-lang/home/issues/482#issuecomment-5467183109. The commit and all reported verification counts are unchanged.

14 days ago

Checkpoint pushed to main: 71c8ff953aab47c918a4f79ebf87592c736c0508 (feat(runtime): cancel queued worker C++ tasks), authored and committed solely by Chris Breuer.

Completed #565: worker shutdown now closes ScriptExecutionContext identifier-based admission under the native registry lock, then cancels admitted C++ tasks from both the local FIFO and concurrent queue before JSC teardown. Ordinary callbacks are destroyed without execution; cleanup-tagged tasks perform their native cleanup action on the owner thread; cleanup-generated tasks are processed to a fixed point. Home owns the pinned ScriptExecutionContext unity unit with an exact sibling-include drift guard.

Verification is explicit: native build and cached rebuild 20/20; runtime units 1,815 pass / 19 skip / 0 fail with 22/22 build steps; native binding helpers 5/5; six focused regression processes pass with exact natural/terminated branch counters. The aggregate runtime runner is 37/38: every worker, snapshot, NAPI, FFI, and lifecycle file passes. The sole native-package-run.test.mjs config-diagnostic failure reproduces on the unchanged pre-checkpoint ReleaseFast binary and remains open in #566; it is not counted as a pass.

#465 remains open for raw producers, late generic admission, and non-C++ task families. #468 remains open for in-flight native work-pool quiescence. This checkpoint is Darwin-only and does not establish full native ownership or 100% Bun-suite compatibility, so #66 remains open.

14 days ago

Checkpoint: fixed the final aggregate runtime regression in #566 and pushed 59c9f4fe8299eebd82952f39145e1adb799893e7.

A hyphen-leading entrypoint after explicit -- was incorrectly sent through Home's package-script preflight. That preflight intentionally disables tsconfig loading and primed the process-global resolver directory cache before the VM ran, suppressing both tsconfig semantics and the expected debug missing-extends diagnostic. Hyphen-leading runnable entries now follow the explicit-file path; ordinary bare package-script precedence and quiet log-level cases are unchanged.

Current validation:

  • Exact config/argv sequence matches pinned Bun at the repaired boundary.
  • Full package-run regression passes.
  • Aggregate native runtime suite: 38/38 passed.
  • home_rt: 1,815 passed, 19 skipped, 0 failed; 22/22 build steps.
  • JSC debug build and cached rebuild: 20/20.

#566 is complete and closed. The broader Bun-to-Home parity program remains open here; this checkpoint restores the currently promoted runtime regression gate rather than claiming full Bun-suite parity.

14 days ago

Worker native-work teardown checkpoint: #468 is complete in a1dcd6977.

Home now accounts EventLoopTaskNoContext/ConcurrentCppTask jobs per VM, closes admission during teardown, waits until accepted work has stopped touching the VM, then applies the #565 ScriptExecutionContext producer barrier and owner-thread callback cancellation before JSC destruction. Rejected late jobs are destroyed without running. The native generator owns Home's mirrored bridge and test instrumentation.

Evidence: debug build passed; focused home_rt completed with 1,815 passed / 19 skipped / 0 failed and 22/22 build steps; the new regression passed four deterministic blocked-job cycles and four real WebCrypto digest termination cycles; the full end-to-end runtime sweep is now 39/39. #465 remains open for the distinct general raw/non-C++/late-producer audit.

14 days ago

Native task ownership checkpoint: 72415f9f9 (fix(runtime): cancel concurrent promise tasks) advances #465.

Home now gives all four ConcurrentPromiseTask instantiations a per-VM admission/barrier and explicit owner-thread shutdown cancellation contract: async glob, image pipeline, JSTranspiler, and file-copy work. The shutdown queue pass cancels only audited task tags and preserves unknown families. The same checkpoint fixes normal CopyFile context disposal.

Pinned source remains Bun 4982b91e3702094330f3be3883354c52b8c01323. Exact-source gates are green:

  • focused four-cycle real-worker shutdown regression: pass
  • real-runtime aggregate: 40/40 passed
  • native home_rt: 1,815 passed, 19 skipped, 0 failed (22/22 suites)
  • targeted Zig formatting, Pickier, and diff hygiene: pass

#465 remains open for direct WorkTask producers and remaining unaudited event-loop families.

New linked parity issue: #567 records a deterministic Home crash when a failed/caught main-VM Bun.Transpiler.transform() precedes a large worker transform. Pinned Bun passes; the crash occurs inside the transform worker body, so it is tracked separately from shutdown cancellation.

14 days ago

Native task ownership advanced again in eb04c8f75 (fix(runtime): cancel queued pbkdf2 jobs), under #465.

The async native PBKDF2 path now participates in the per-VM work-pool admission/barrier and uses a new opt-in AnyTask owner-thread shutdown callback. Its protected inputs, output, promise, keepalive, and allocation are released without entering stopped JavaScript. Opaque AnyTask producers without an audited callback remain untouched.

Exact-source gates:

  • RFC 6070 normal completion plus three real-worker shutdown cycles: pass
  • runtime aggregate: 41/41 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • targeted Zig formatting, Pickier, and diff hygiene: pass

The next #465 work is the remaining direct AnyTask work-pool producers and the WorkTask read/write/DNS family. #567 remains the separate failed-transform cross-VM correctness crash.

14 days ago

Native work-pool ownership checkpoint f4110e49d (fix(runtime): cancel queued crypto jobs) advances #465.

Home now quiesces and owner-thread-cancels both generated native crypto-job families: Zig contexts such as scrypt/random fill and opaque C++ prime/key/sign/DH/HKDF jobs. The regression covers normal scrypt completion, three expensive scrypt worker terminations, and two 2048-bit generatePrime terminations with exact admission and cancellation counters.

Exact-source gates:

  • focused regression, five consecutive runs: pass
  • runtime aggregate: 42/42 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and targeted formatting/lint/diff checks: pass

#465 remains open for the other direct work-pool producers and WorkTask family. #567 remains the separate failed-transform cross-VM correctness crash.

14 days ago

Native ownership checkpoint f505b6c2d (fix(runtime): cancel queued zstd jobs) advances #465.

Async Bun.zstdCompress/zstdDecompress now participate in the per-VM admission/barrier and audited owner-thread AnyTask cancellation. Their protected input, output buffer, promise, keepalive, and allocation are released safely during worker teardown.

Evidence:

  • normal async Zstd round trip plus three 16 MiB level-22 worker shutdown cycles: pass in three consecutive focused runs
  • runtime aggregate: 43/43 passed
  • clean-cache native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and targeted format/lint/diff checks: pass

#465 remains open for the other direct work-pool and WorkTask producers. #567 remains the separate failed-transform cross-VM correctness crash.

14 days ago

Native ownership checkpoint 11f306e11 (fix(runtime): cancel queued password jobs) advances #465.

Async Bun.password.hash/verify now stay in the per-VM work registry through result enqueue and cancel their transferred result payloads on the JS owner thread. The final implementation preserves worker-thread affinity: original wrappers never touch the VM keepalive after transfer; owner-thread result cancellation releases the promise, keepalive, generated hash bytes where applicable, and allocation.

Evidence:

  • normal async hash+verify plus three hash and two verify worker shutdown cycles: pass in three consecutive focused runs
  • runtime aggregate: 44/44 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and targeted format/lint/diff checks: pass

#465 remains open for JSSecrets, filesystem/direct work-pool producers, WorkTask, and other unaudited tags. #567 remains the separate failed-transform cross-VM correctness crash.

14 days ago

Native ownership checkpoint 7124c4d78 (fix(runtime): cancel queued archive tasks) advances #465.

All four async archive contexts (bytes/blob, files, write, extract) now participate in per-VM admission/barrier and explicit owner-thread shutdown cancellation. Normal regression coverage exercises every context; three high-entropy gzip worker cycles require exact one-job/one-cancellation behavior.

Evidence:

  • focused archive regression, three consecutive runs: pass
  • runtime aggregate: 45/45 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and targeted format/lint/diff checks: pass

#465 remains open for JSSecrets, filesystem/direct work-pool producers, WorkTask, and other unaudited tags. #567 remains the separate failed-transform cross-VM correctness crash.

14 days ago

Native ownership checkpoint e895ad216 (fix(runtime): cancel queued transpiler jobs) advances #465.

Async runtime module transpilation now has a per-VM admission/barrier through result publication and explicit owner-thread queue cancellation. Shutdown frees the pending module result's promise, strings, path/fetcher/log state, optional module metadata and bytecode, keepalive, and Hive slot without calling stopped JavaScript.

The regression verifies a normal TypeScript import, then performs three 16 MiB worker-import termination cycles with exact one-job/one-cancellation assertions.

Evidence:

  • focused stress and post-rebase runs: pass
  • runtime aggregate: 46/46 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and targeted format/lint/diff checks: pass

#465 remains open for JSSecrets, filesystem/direct producers, WorkTask, and other unaudited tags. #567 remains the separate failed-transform cross-VM correctness crash.

14 days ago

Native ownership checkpoint e84f117dc (fix(runtime): cancel queued dns work tasks) advances #465.

Forced-libc Bun.dns.lookup now uses opt-in WorkTask admission/barrier and explicit owner-thread cancellation. Shutdown clears pending DNS cache/timer state and frees libc results or query input, all chained lookup promises/keepalives/resolver refs, the request, and wrapper without calling stopped JavaScript.

The regression deterministically saturates the maximum possible work-pool width with 1,024 held probes before queuing DNS. Two cycles prove exact 1,025-job admission, blocked teardown before release, 1,024 probe completions, and one DNS WorkTask cancellation.

Evidence:

  • repeated focused stress: pass
  • runtime aggregate: 47/47 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and targeted format/lint/diff checks: pass

#465 remains open for poll-aware Blob read/write tasks, JSSecrets, filesystem/direct producers, and other unaudited tags. #567 remains separate.

14 days ago

Bun.secrets is now active and shutdown-safe in d1823dd97 (fix(runtime): activate secrets jobs), advancing #465.

The native secrets API previously returned permanently pending promises because its scheduler symbol resolved to a no-op. Home now force-links the real scheduler, removes the stub, admits secrets work through the VM shutdown barrier, publishes completion before releasing that barrier, and explicitly frees opaque options, secure buffers, the promise, keepalive, and job when a worker exits before JavaScript completion.

The regression fully occupies the configured work-pool width before queuing a read-only missing-secret lookup. Two cycles prove exact admission, blocked teardown, complete probe release, and one canceled secrets completion each. The DNS shutdown test now uses the same started-probe handshake.

Rebased evidence:

  • direct secrets settlement/admission smoke: pass
  • repeated focused DNS/secrets stress: pass
  • runtime aggregate: 48/48 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and targeted format/lint/diff checks: pass

#465 remains open for Blob read/write tasks, filesystem/direct work-pool producers, and remaining unaudited tags. #567 remains separate.

14 days ago

Native FS ownership checkpoint 550e8a05b (fix(runtime): cancel queued fs tasks) advances #465.

The shared POSIX async FS wrapper now admits and safely cancels all allocation-free result tasks (void, bool, Null), covering 25 APIs across access/exists, writes/copy/close, and path/fd metadata mutations. Completion is published before the VM barrier releases; shutdown frees errors, protected/thread-safe arguments, keepalive, promise, and task without JavaScript.

A deterministic regression queues access, exists, and writeFile behind a fully occupied work pool. Two cycles require exact thread-count + 3 admission, blocked teardown, all probe completions, and three cancellations.

Evidence:

  • focused stress: repeated pass
  • runtime aggregate: 49/49 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and targeted format/lint/diff checks: pass

#465 remains open for complex-result FS ownership, recursive cp/readdir graphs, Blob read/write poll lifecycles, and other producers. #567 remains separate.

14 days ago

Native stat filesystem checkpoint a439ceb92 (fix(runtime): own stat filesystem tasks) advances #465.

fstat, stat, lstat, and statfs now participate in the per-VM native-work barrier and owner-thread shutdown cancellation because their result payloads are value-only. The deterministic saturated-pool regression now covers seven FS tasks across void, bool, Null, Stats, StatOrNotFound, and StatFS, requiring exact admission and cancellation accounting over two worker cycles.

The same commit fully replaces Home's zero-filled StatFS placeholder with real macOS/Linux/FreeBSD libc layouts and the Windows libuv layout, with compile-time ABI assertions. fs.promises.statfs() now returns actual filesystem values.

Evidence:

  • repeated focused stress: pass
  • runtime aggregate: 49/49 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and targeted format/lint/diff checks: pass
  • cross-target StatFS ABI compilation: macOS, Linux, FreeBSD, Windows pass

A pre-existing state-dependent JSC atom-string GC assertion uncovered during repeated native validation is now isolated in #568; the named test passed 20/20 and the clean full-suite retry passed. #465 remains open for complex FS result ownership and task graphs. #567 remains separate.

14 days ago

Port progress: directory-valued async filesystem tasks are now shutdown-safe on main in 7c818831b.

This checkpoint extends the native work-pool teardown barrier to recursive mkdir and mkdtemp, adds explicit cancellation cleanup for their owned results, and fixes UTF-16 global ZigString destruction. The regression now saturates the pool, admits exactly 9 FS jobs, terminates the worker while those jobs are blocked, and verifies exactly 9 owner-thread cancellations in each of two cycles. A Unicode mkdtemp prefix exercises the UTF-16 path.

Final validation:

  • runtime aggregate: 49/49 passed
  • native home_rt: 1,816 passed / 19 skipped / 0 failed (two clean runs)
  • debug build, focused regression, targeted Pickier, and diff checks: pass

Detailed ownership notes and remaining complex FS result types are tracked in #465. The separate intermittent native JSC GC assertion remains tracked in #568; it did not reproduce in either clean native run for this checkpoint.

14 days ago

Port progress: owned string/buffer results from async filesystem operations are now shutdown-safe on main in 3124040cf.

This checkpoint adds result-specific cancellation destruction for StringOrBuffer without changing borrowed/protected argument cleanup. It covers buffer and string variants returned by async readFile, readlink, realpath, and realpath.native. The deterministic saturated-pool regression now admits and cancels exactly 15 FS tasks per cycle, including six new owned-result paths, across two worker teardown cycles.

Validation is green:

  • runtime aggregate: 49/49 passed
  • native home_rt: 1,816 passed / 19 skipped / 0 failed
  • debug build, 6 focused runs, targeted Pickier, Zig AST checks, and diff checks: pass

Detailed ownership reasoning and the remaining Readdir/returned-FD work are tracked in #465.

14 days ago

Port progress: cancelled async open results now close their returned descriptor on main in d3af6452b.

On the POSIX native-work-pool path, a successful bun.FD is now closed if worker teardown skips JS conversion, while the normal FileHandle ownership path remains unchanged. The deterministic saturated-pool regression now admits and cancels exactly 16 FS tasks per cycle across two worker teardown cycles.

Validation is green:

  • runtime aggregate: 49/49 passed
  • native home_rt: 1,816 passed / 19 skipped / 0 failed
  • debug build, 6 focused runs, targeted Pickier, Zig AST, and diff checks: pass

Detailed ownership notes and the remaining Readdir cleanup work are tracked in #465.

14 days ago

Filesystem worker shutdown checkpoint pushed: 480f3a2cfac416f984e5bf5c6ddfc02aa2dbfec8 (fix(runtime): own readdir filesystem tasks).

Nonrecursive async readdir now participates in Home's native work pool shutdown barrier. Cancellation explicitly destroys all three result shapes: Dirent name/path strings, native byte buffers, plain bun.String entries, and their outer arrays. The regression covers normal string/buffer/Dirent conversion and two saturated worker teardown cycles (19 exact filesystem jobs per cycle).

Verified with the debug build, 6 focused passes, the 49/49 runtime aggregate, and home_rt at 1,816 passed / 19 skipped / 0 failed. Detailed tracking is in #465.

14 days ago

Filesystem worker shutdown checkpoint pushed: e41e19ae99f7342aed2b8773299440d9903efe63 (fix(runtime): join filesystem io tasks).

POSIX callback read, readv, write, and writev now join Home's VM native work pool shutdown barrier. Their scalar byte-count results need no destructor; protected buffers and cloned I/O vector arrays remain owned by the task arguments and are released by the established cancellation cleanup path. The saturated regression now covers 23 exact filesystem jobs per teardown cycle.

Verified with the debug build, 6 focused passes, the 49/49 runtime aggregate, and home_rt at 1,816 passed / 19 skipped / 0 failed. Detailed tracking is in #465.

14 days ago

Recursive filesystem shutdown checkpoint pushed: e365672a28e361af78f6aecdbde1adb87acc7b1e (fix(runtime): join recursive readdir tasks).

Async recursive readdir now holds one VM native work pool barrier entry across its root scan and entire dynamically spawned subtask graph. Completion publishes a shutdown-aware owner task before releasing the barrier; cancellation frees queued/joined string, buffer, and Dirent graphs and now correctly unprotects thread-safe arguments. The saturated regression covers all three recursive result shapes and now requires 26 exact filesystem jobs per teardown cycle.

Verified with the debug build, 6 focused passes, a clean 49/49 runtime aggregate retry, and home_rt at 1,816 passed / 19 skipped / 0 failed. A prior aggregate attempt ran during unrelated full-disk build pressure and was discarded after the clean retry. Detailed tracking is in #465.

14 days ago

Bun parity checkpoint: recursive fs.cp task ownership

Pushed f41171f8e (fix(runtime): join recursive copy tasks) to main.

Recursive JavaScript copies now remain admitted through the complete root-scan/per-file subtask graph, dispatch completion through a shutdown-aware owner task, and release protected path/result resources correctly during worker cancellation. The expanded regression covers both successful nested recursive copy and forced worker shutdown behind a saturated native pool.

Validation is green: focused test once plus six consecutive runs, runtime regression 49/49, and home_rt 1816 passed / 19 skipped / 0 failed. Full implementation and validation notes are in #465.

This closes the recursive-copy item within the native filesystem ownership audit. The broader Bun parity goal remains open; next I am continuing through the remaining native work-task producer families against pinned Bun 4982b91e3702094330f3be3883354c52b8c01323.

14 days ago

Published another native shutdown-ownership checkpoint directly on main:

Deflate, Brotli, and Zstd node:zlib stream writes now participate in the per-VM native work-pool barrier, publish completion ownership before leaving it, and explicitly cancel queued completions during VM teardown. Cancellation releases the strong handle, both input/output detachment pins and GC roots, poll liveness, and the stream reference without executing user JavaScript.

Verification: debug build passes; the deterministic saturated-pool worker regression passes once plus 6/6 consecutive stress repetitions; the existing full compression lifetime regression passes; the complete runtime regression aggregate is now 50/50; native home_rt is 1,816 passed / 19 skipped / 0 failed; focused Pickier, Zig AST, and whitespace checks pass. origin/main was verified at the exact commit. Full implementation and evidence are recorded in #465.

The remaining Blob read/write WorkTask family is not safely covered by the one-shot barrier because operations can park indefinitely on the process-wide I/O poller and later re-enter the work pool. I opened #569 for the required poll-aware per-VM cancellation/ownership protocol and bounded blocked-I/O regressions. Generic queued task work remains #465. The umbrella zig build test, other open subsystems, and 100% logical Bun-suite parity remain incomplete.

14 days ago

Published another shutdown-ownership and pinned-corpus checkpoint directly on main:

fs.watchFile initial and periodic native work now participates in the per-VM admission barrier, publishes cancellable owner-thread holders, retires its per-VM scheduler after quiescence, and releases watcher/scheduler ownership without entering stopped JavaScript during Worker or destructing main-VM teardown.

The mirrored watchFile corpus is now byte-identical to pinned Bun SHA 4982b91e3702094330f3be3883354c52b8c01323. Its complete 11-case file passes 9 ordinary tests / 2 Darwin platform skips / 0 failures / 30 assertions across four full runs; the exact pinned standalone Worker fixture also passes. The new deterministic regression adds normal change delivery, destructing-main-process cleanup, and a fully saturated native-pool Worker race with exact admission/completion/cancellation counts; it passes 6/6 repetitions.

Verification: debug build passes; native test isolation passes; the complete runtime aggregate is now 51/51; native home_rt is 1,816 passed / 19 skipped / 0 failed; focused Pickier, Zig AST, source-hash, and whitespace checks pass; origin/main is verified at the exact commit. Full evidence is in #465.

The two platform-gated watchFile cases are not counted as passes, the umbrella zig build test is not green, and full Bun parity remains incomplete. Poll-parked Blob I/O is tracked in #569; addon-managed napi_async_work teardown requirements were added to #459. Other producer families and open subsystems remain in scope.

14 days ago

Shell WorkPool shutdown checkpoint landed on main: 5848c3a58fe074612706daf7cdbbf04c68784140 (fix(runtime): quiesce shell work on shutdown).

Port/compatibility progress:

  • One-shot Bun shell workers for mkdir, touch, glob expansion, conditional stat, and both mv phases now join VM shutdown and cancel queued owner-thread completions without entering JS.
  • Added deterministic native-pool saturation coverage with exact five-task cancellation accounting.
  • Exact pinned Bun corpus files at 4982b91e3702094330f3be3883354c52b8c01323 for mv and shell conditional expressions pass 11/11 with 31 assertions.
  • Full runtime aggregate is 52/52; authoritative home_rt is 1816 passed / 19 skipped / 0 failed.
  • Debug build and focused AST/Pickier/diff checks pass.

The wider shell corpus run reached 353 passes / 83 upstream todos, with two unrelated existing failures (broken pipe subproc and the environment-specific sharp install case); that broad mirror is not byte-identical to the pinned Bun file, so it is not counted as exact pinned parity.

Follow-up ownership for the recursive/parked cp, ls, and rm WorkPool graphs is tracked in #570. This continues the native lifetime audit in #465; Blob poll-parked I/O remains #569 and N-API async work remains tracked in #459.

14 days ago

Porting checkpoint pushed to main: 71a25f41dce29d77cd223614b5b9aef8cacb8d9d (fix(runtime): quiesce shell copy work on shutdown).

This ports the shell cp WorkPool ownership boundary through recursive async copy graphs, adds deterministic worker-shutdown cancellation coverage, fixes regular-file shell capture, and makes the experimental shell-builtin test gate honor its startup flag on POSIX.

Verification:

  • exact pinned Bun cp.test.ts: 30 passed, 0 failed, 111 assertions (byte-identical source at Bun 4982b91e3702094330f3be3883354c52b8c01323)
  • deterministic saturated-pool shutdown regression: six consecutive passes
  • runtime aggregate: 53/53 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and focused static checks pass

The first native link attempt hit host disk exhaustion before tests; the authoritative rerun completed cleanly without clearing the shared Zig cache. Detailed remaining recursive shell work is tracked in #570 (ls/rm).

14 days ago

Porting checkpoint pushed to main: e0612cfd850718d27e37375af690c1cefc7f541b (fix(runtime): quiesce shell listing work on shutdown).

This closes the worker-shutdown ownership gap for root and recursively spawned shell ls WorkPool tasks. The saturated-pool regression covers the path-expansion → listing handoff and passed six fresh-process repetitions.

Verification:

  • real-runtime aggregate: 54/54 passed
  • native home_rt: 1,816 passed, 19 skipped, 0 failed
  • debug build and focused static checks pass
  • exact pinned, byte-identical Bun ls.test.ts: every ls assertion passes (26/27 overall)

The remaining exact test stops during its nested dependency install before the listing comparison. That package-manager/test-runner boundary is tracked separately in #571. Recursive shell shutdown follow-up #570 is now narrowed to rm.

14 days ago

Porting checkpoint pushed to main: 1611693c74f997e437a2512dd05f45bd2a0c1300 (fix(runtime): quiesce shell removal work on shutdown).

This completes #570: recursive shell cp, ls, and rm WorkPool graphs now retain their creating VM through completion publication and clean queued callbacks during worker teardown.

The pinned Bun rm.test.ts mirror is byte-identical at SHA-256 72f9085c5b7401e381ffe43f8120fce849525137d11c5f4e83c9279d0da5d98a, including Bun's new directory-to-symlink TOCTOU race.

Verification:

  • deterministic rm shutdown regression: six fresh-process passes
  • real-runtime aggregate: 55/55 passed
  • current native home_rt: 1,816 passed, 19 skipped, 0 failed
  • pinned rm tests outside the known install fixture: 4 passed, 1 filtered, 45 assertions
  • debug build and focused static checks pass

The filtered exact test uses the same nested dependency install boundary already isolated in #571. The overall Bun port remains active here.

14 days ago

Package-manager/test-runner checkpoint completed and #571 is resolved.

  • Pantry 4d1b539e7 adds Bun-compatible --linker isolated|hoisted, forwards it to delegated Bun installs, and stops installing conventional package.json dependency graphs twice. Explicit Pantry/system dependencies continue through Pantry's native pipeline.
  • Home 6999b4dec makes setDefaultTimeout() calls from beforeAll apply to inherited test timeouts at execution while preserving explicit timeouts.
  • Exact pinned Bun shell rm: 5/5 tests, 49 assertions.
  • Exact pinned Bun shell ls: 27/27 tests, 81 assertions.
  • Runtime regressions: 56/56.
  • Native home_rt: 1816 passed, 19 skipped, 0 failed.

#571 is closed. This also honors the package-manager direction here by improving and reusing Pantry rather than replacing Home's default Pantry route with the separate native installer.

14 days ago

Porting checkpoint pushed to main:

  • Home a7fe8d888443fca9f399a775871d4fc0a843c17a — fix(runtime): drain Node-API async work on shutdown
  • napi_async_work now joins the VM shutdown barrier, publishes completion before teardown, drains native completion exactly once, and prevents completion callbacks from entering stopped JavaScript.
  • Added a native addon regression that saturates the work pool and terminates a Worker with exact execute/completion/cancellation accounting.

Verification is green: debug build; all native Node-API focused regressions; runtime aggregate 57/57; home_rt 1,816 passed, 19 skipped, 0 failed.

Pinned Bun Node-API corpus status after correcting its fixture build to C++20: 96/99. Remaining feature gaps are tracked separately in #572 (napi_reference_unref in experimental finalizers) and #573 (napi_wrap reference deletion lifetime); the remaining non-feature result is a 5-second Node-target bundle timeout pending isolated runner/timing analysis. Parent #459 remains open.

The exact pinned shell-command inventory is also currently green across 13 files: 156 tests and 518 assertions (basename, cp, dirname, echo, exit, false, ls, mv, rm, seq, true, which, yes).

14 days ago

Checkpoint pushed to main: 436b7b574439dbc19c4d6a7d7d8f59facf7522dc (fix(runtime): complete Node-API finalizer lifecycle).

This closes the two remaining failures in the pinned Bun N-API file:

  • #572: zero-argument --expose-gc now creates the required JavaScript liveness boundary, so GC reaches experimental finalizers and forbidden GC-affecting Node-API calls abort correctly.
  • #573: node_api_post_finalizer now uses basic-environment semantics, so posted finalizers can delete napi_wrap references during teardown.

Additional parity work in the checkpoint:

  • Home's fatal bridge aborts immediately after Bun-compatible panic output instead of stalling in Zig debug symbolization.
  • The Home corpus runner serializes this one independent N-API file so synchronous debug --compile children cannot starve unrelated 5-second async tests; the upstream test source and all original timeouts remain unchanged.
  • Native lifetime coverage now exercises cc and dlopen, main thread and workers, teardown-posted finalizers, and zero-argument exposed GC.

Verification:

  • CXXFLAGS=-std=c++20 ./zig-out/bin/home-debug test packages/runtime/test/bun-corpus/napi/napi.test.ts: 99 passed, 0 failed, 0 unsupported, 0 todo.
  • HOME_BIN=./zig-out/bin/home-debug scripts/runtime-regression.sh: 57 passed, 0 failed.
  • zig build test -Dfilter=home_rt -j1 with an isolated cache: 1,816 passed, 19 skipped, 0 failed.
  • Focused Pickier, Zig AST, and diff checks pass.

The vendored N-API test file is still byte-for-byte identical to Bun at 4982b91e3702094330f3be3883354c52b8c01323.

14 days ago

Package-manager architecture checkpoint: Home continues to reuse Pantry for its user-facing package commands, and Pantry main now contains 3afa6ccd1 (fix(install): propagate JavaScript delegate failures), authored and committed by Chris Breuer with no coauthors.

Package.json dependency installation is delegated once to the project-selected Bun/pnpm/Yarn/npm executable. The follow-up fixes a logical false pass: missing executables, spawn errors, abnormal termination, and non-zero child exits now keep Pantry non-zero in fast-path, ordinary, and workspace installs, and no success marker is written. Explicit Pantry/system dependencies remain handled by Pantry itself.

Darwin evidence: Pantry's Zig suite completed 36/36 steps; docs contracts passed 4/4; a real CLI fixture proved Pantry exit 1 plus no marker on fake npm exit 42 and exit 0 plus marker on success. Running the identical fixture through Home produced the same results, proving Home preserves Pantry's package-manager contract. Formatting and diff checks passed.

Related: home-lang/home#518 and pantry-pm/pantry#200. This does not complete #66, broader installer parity, cross-platform verification, or the full Bun suite.

14 days ago

Follow-up control for the Pantry checkpoint: a registry-free local ESM dependency selected through packageManager: "bun@1.3.14" was installed from file:./fixture-pkg through Pantry and then through Home. Both runs produced node_modules/fixture-pkg plus the success marker, produced no pantry/fixture-pkg duplicate, and resolved the package export under Bun. This closes pantry-pm/pantry#201 with concrete layout and resolver evidence: Home reuses Pantry, while Pantry delegates conventional package.json graphs into the JavaScript manager's native node_modules layout. The full Home/Bun parity goal remains open.

14 days ago

Native transpiler checkpoint — f8d70bcd2

Pushed to main as Chris Breuer without coauthors: f8d70bcd2.

Two independent pinned Bun contracts are now complete:

  • #567: an invalid async Bun.Transpiler.transform() no longer sends a diagnostic-bearing placeholder AST into the printer. The task stops at the parser diagnostic boundary and the existing JS-thread completion rejects the Promise; a subsequent 16 MiB worker transform completes normally.
  • #575: Bun.Transpiler.scan() now uses the pinned string-key sorter before materializing named exports, restoring stable ["action", "default", "loader"] order.

Verification on current Darwin main:

  • debug native build passes;
  • pinned transpiler API directory: 46 pass / 0 fail / 72 assertions;
  • unchanged scan assertion: 1 pass / 188 filtered out / 0 fail / 8 assertions;
  • both standalone regressions pass 8 consecutive runs; scan checks 128 iterations per run;
  • full native runtime aggregate: 59 pass / 0 fail;
  • focused Pickier, Zig formatting, and whitespace checks pass;
  • installed Bun 1.3.14 controls pass.

Tracker reconciliation also confirmed and closed four previously integrated items with current-main evidence:

  • #496: unchanged spawnSync file 5 pass / 1 platform skip / 0 fail / 11 assertions;
  • #510: unchanged dotenv file 79 pass / 2 skip / 2 TODO / 0 fail / 89 assertions;
  • #501: unchanged stale-FilePoll regression 1 pass / 0 fail / 3 assertions;
  • #477: native parentPort lifecycle 11/11 scenarios, also green in the 59-file aggregate.

The broader unchanged transpiler run exposed a separate bus error instead of the required stack-limit rejection. It is isolated with a passing Bun control and tracked in #574. Poll-parked Blob I/O teardown remains open in #569; its cross-thread registry/cancel handshake must be implemented as a real lifecycle protocol, not by holding the existing one-shot work-pool barrier across indefinitely blocked descriptors.

Skips, TODOs, filtered tests, other platforms, #569, #574, and the remaining Bun corpus are not counted as complete. The full port and 100% logical suite parity remain in progress.

14 days ago

Parity checkpoint pushed as 597c8e1515e4a43ca7ebeab61ff8f3c3b2359ef4 (fix(runtime): own transpiler worker inputs and stack bounds).

Completed:

  • #574: native parser workers initialize WTF stack bounds; runtime import, sync transform, and async transform convert exhaustion into recoverable JS errors and remain reusable in the same VM.
  • #576: async Bun.Transpiler.transform() owns typed-array input before its worker hop, matching upstream Bun commit cd1ad59994; detached/reused input no longer corrupts parsing.

Unchanged pinned corpus evidence (4982b91e3702094330f3be3883354c52b8c01323):

  • full bundler/transpiler/transpiler.test.js: 163 pass / 4 fail / 21 todo / 1 skip, improved from 162/5 without filtering or editing the corpus
  • js/bun/transpiler: 46/46
  • Home runtime regression aggregate: 61/61
  • native debug build, Zig formatting, Pickier, and diff checks: pass

The four remaining failures from that full transpiler file now have focused trackers instead of being buried here:

  • #577 unused ternary simplification duplicates a side-effecting branch
  • #578 TypeScript leaves a dangling export for a block-scoped function
  • #579 sibling using switches reuse generated temp refs
  • #580 duplicate-binding diagnostic floods return stack overflow instead of AggregateError

#569 remains open for Blob/File body and stream I/O parity.

14 days ago

Second parser checkpoint pushed as 661d06dc87ceb3ee1af6643ff362d80947e8d33f.

Completed #577 and #578 with direct upstream semantics:

  • comma-test ternary simplification no longer duplicates the side-effecting branch
  • strict-mode block functions remain block-scoped even without the renamer, while sloppy-mode behavior is preserved

Updated evidence:

  • full unchanged bundler/transpiler/transpiler.test.js: 165 pass / 2 fail / 21 todo / 1 skip
  • unchanged js/bun/transpiler: 46/46
  • Home runtime regression aggregate: 62/62
  • native build and formatting checks: pass

The only remaining failures in that full transpiler file are #579 and #580.

14 days ago

Third parser checkpoint pushed as e4f0212a21b8d607a8f7feeaada87d5adad38f8c.

Completed:

  • #579: generated temp refs stay unique across sibling using switches; unchanged group is 5/5.
  • #580: four-cursor diagnostic position tracking plus the duplicate-symbol note path; unchanged 356 KB flood passes in about 302 ms instead of the 60-second kill.
  • Removed the non-upstream lexical nesting pre-scan, which incorrectly counted total delimiters across a file and violated the no-workaround requirement.

Validation:

  • native debug build: pass
  • unchanged js/bun/transpiler: 46/46
  • runtime regression aggregate: 63/63
  • focused stack-overflow recovery: pass
  • formatting and diff checks: pass

The no-workaround full bundler/transpiler/transpiler.test.js result remains 165 pass / 2 fail / 21 todo / 1 skip, but the two failures are now the real missing guards previously masked by the lexical pre-scan: deep expression shapes and deep statement blocks. #574 is reopened with the exact remaining Bun 41aa6724d8 pass/visitor/printer work. All other non-todo tests in this file pass.

14 days ago

Fourth parser checkpoint pushed as ff9dc16be5503b066bf5accc3af1071ffd358094 (fix(runtime): guard recursive transpiler passes).

Completed #574 with the full dynamic recursion-guard port from Bun 41aa6724d8: parsing, visit, side-effect/DCE analysis, AST primitive inference and reassociation, minifier substitution, printer bailout/error propagation, and scope-order resynchronization. This replaces the removed lexical delimiter pre-scan with upstream semantics and adds a local subprocess matrix for the dangerous AST shapes.

Updated unchanged-corpus evidence at Bun pin 4982b91e3702094330f3be3883354c52b8c01323:

  • complete bundler/transpiler/transpiler.test.js: 167 pass / 0 fail / 21 todo / 1 skip
  • focused deep-expression and deep-statement regressions: 2/2
  • runtime/sync/async overflow group: 3/3
  • native js/bun/transpiler: 46/46
  • native debug build, local subprocess regression, Pickier, and diff checks: pass

All non-TODO tests in the pinned upstream transpiler file now pass without filtering or corpus edits. The 21 explicit upstream TODOs remain future parity work; #569 remains open for Blob/File body and stream I/O parity.

14 days ago

Tracker reconciliation after the transpiler checkpoint:

  • closed #460: its print/eval commit is already on main; fresh native regression plus unchanged run-eval.test.ts are green (33/33)
  • closed #481: its test-option parser and isolation follow-up are already on main; fresh execution-sensitive CLI/filter regression is green
  • closed #490: its fake-clock implementation is already on main; fresh native lifetime regression plus unchanged core fake-timer file are green (30/30)

These closures remove stale pending-integration statuses; they do not claim the explicit upstream TODOs, other-platform verification, parallel test coordination, Blob I/O shutdown ownership (#569), or whole-suite parity.

14 days ago

Sign in to comment on this issue.