ReviewOS

home-lang/home

Bun parity: close native events, URL, and util audit gaps

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

Follow-up to #66 from the strict native Home audit on macOS arm64.

The next 45-file Node-core group (events, eventtarget, URL, util, string-decoder) currently has 35 successful fixtures, 3 failures, and 7 explicit skips when the one node:test file uses the real test runner. These are fixture outcomes, not proof that skipped/comment-only files implement their intended contract.

Remaining work:

  • test-events-uncaught-exception-stack.js exits 1 with no diagnostic; verify uncaughtException delivery and handled-error exit status.
  • test-url-parse-invalid-input.js emits the deprecation message but omits DEP0170.
  • test-util-emit-experimental-warning.js is currently comment-only upstream, but parsing it crashes Home: integer overflow in collections/multi_array_list.zig:228, reached through DeclaredSymbol.forEachTopLevelSymbol and p.toAST. Fix empty/comment-only parser state; do not count the disabled test body as feature coverage.
  • Four URL fixtures skip for missing Intl; determine whether this is a real capability gap or inaccurate process feature metadata before enabling them.
  • Three util fixtures explicitly skip Node-only internals; keep these visible and separate from pass counts.

Acceptance: regression tests for each real gap, exact fixtures run through Home without Bun/Node delegation, crashes/failures eliminated, and no skip or empty-body inflation of the parity total. Keep #66 cross-linked.

10 days ago

Root causes confirmed: (1) empty CJS wrapping exposed an uninitialized Part, unlike Bun default insertion; (2) Home discarded the handled return from uncaughtException and forced exit 1; (3) JSObject.getCodePropertyVMInquiry was a null stub, hiding DEP0170. Fixes and native regressions are under verification. The Intl skips are a metadata typo in the linked BunProcess.cpp: v8_enable_i8n_support instead of v8_enable_i18n_support. Real Intl is present (ICU 78.1 and de-DE number formatting verified), so those skips do not establish an Intl implementation gap.

10 days ago

Local commit d48e410 fixes all three observed native failures: default-initialize empty CJS Part metadata, honor handled uncaughtException and custom exitCode while draining async work, and replace the null error-code lookup stub with the getter-safe native JSC bridge. Four native regression files pass; JSC build 5/5; focused pickier passed. Rerun of this 45-file group: 38 clean exits and 7 explicit skips, but one clean exit is the upstream comment-only fixture, so count 37 executable passing fixtures + 1 disabled body + 7 skips, not 38 feature passes. The 124-file core group remains 116 passes/8 explicit skips. Remaining: capability metadata typo and explicit Node-only/disabled-body accounting. Push still blocked by GitHub DNS.

10 days ago

Local commit a561c97 fixes the Intl metadata typo in a Home-compiled BunProcess.cpp (external stale object excluded). Main, worker, and native test-runner Intl/IDNA regression passes. Build 7/7; all five native runtime regressions pass; 2 build-helper tests and 17 exact-source corpus checks pass. Corpus routing now covers 220 files. Combined 169-file core audit: 154 pass, 12 unsupported, 3 failed; 228 passed checks, 3 failed, 12 unsupported. Unsupported includes the disabled comment-only util body, never counted as a pass. Activating Intl uncovered three URL contracts now tracked in #458. This is not full parity; most C++/codegen dependencies still come from the configured Bun build. Push remains GitHub-DNS blocked.

10 days ago

Follow-up from #458: local commit 6562477 now owns native URL builtin generation/registry linking and passes the three URL fixtures exposed by corrected Intl metadata. Updated 169-file audit: 157 pass, 12 unsupported, no failures (231 passing checks). The three util Node-internal skips and disabled experimental-warning body remain unsupported; this issue stays open. Six native regressions and eight build-time generator/binding tests pass. #66 has the full checkpoint. Publication is still pending because git push cannot resolve github.com.

10 days ago

The implementation commits are now published on codex/runtime-port and remain ancestors of the current remote head e6aacc5ad:

  • d48e410f2: preserve handled uncaught exceptions, real error-code lookup, and empty-module state.
  • a561c97f4: own the process binding and correct native Intl capability metadata.
  • 6562477c0: own generated node:url and complete the exposed URL contracts.

All are authored and committed solely by Chris Breuer without coauthor trailers.

Current exact revalidation on native Home:

  • Intended 45-file events/eventtarget/URL/util/string-decoder set: all 45 source-identical to Bun pin 4982b91e3702094330f3be3883354c52b8c01323.
  • 41 executable passes / 3 explicit upstream skips / 1 disabled commented body / 0 failures.
  • The node:test URL fixture ran through Home's native test runner: 1 test pass, 0 fail.
  • No help-output substitutions were accepted.
  • The three skips are test-util-internal.js, test-util-sigint-watchdog.js, and test-util-sleep.js; they remain explicit Node-internal skips and are not counted as implemented parity.
  • test-util-emit-experimental-warning.js contains only 'use strict' plus a commented test body; it is recorded as disabled, not as a feature pass.
  • Current scoped runtime gate: 1,829 pass / 19 skip / 0 fail. Current native debug build and cached build: 18/18.

This satisfies the issue's executable failure/crash scope while preserving unsupported accounting. Closing as completed; the explicit skips and disabled body remain visible and do not become parity claims. Parent #66 remains incomplete.

Sign in to comment on this issue.