Repository navigation
Conversation
steipete
added a commit
to openclaw/bun
that referenced
this pull request
Sep 14, 2026
### What does this PR do? Integrates the 19 captured upstream compatibility PRs into the OpenClaw Bun fork, retaining their original commits as merge parents. The base is upstream `86771d09fd486a7256790d6f36602b683f7a19de`. This integration is separate from upstream PR review and does not publish a Bun release. The two stacked PRs also bring their prerequisites: [worker support oven-sh#34424](oven-sh#34424) and [file-URL query handling oven-sh#35601](oven-sh#35601). | Upstream PR | Captured head | | --- | --- | | [42349: fix(sqlite): allow workers to reuse custom library](oven-sh#42349) | `65924882863e` | | [42374: fix(node:fs): preserve POSIX locks in realpath](oven-sh#42374) | `4df5e0600308` | | [42446: fix(node:fs): preserve child rm permission errors](oven-sh#42446) | `17d1237bcbac` | | [42469: fix(runtime): preserve encoded file URL path delimiters](oven-sh#42469) | `cc5b9fb06de9` | | [42576: fix(node:https): support live secure context updates](oven-sh#42576) | `b8666fde28e6` | | [42593: fix(worker_threads): preserve async context for worker events](oven-sh#42593) | `f72285db962b` | | [42594: fix(node:https): wrap injected raw connections with TLS](oven-sh#42594) | `82a9d26cf2cc` | | [42599: fix(node:os): observe runtime HOME changes](oven-sh#42599) | `772e4acb9263` | | [42600: fix(worker_threads): preserve cloned error metadata](oven-sh#42600) | `7254eaec568c` | | [42601: fix(node:path): honor replaced process.cwd](oven-sh#42601) | `e040ec4cf1c0` | | [42607: fix(process): allow clearing exitCode](oven-sh#42607) | `bacfa9ee3cb3` | | [42610: fix(node:http): uncork reused upgrade sockets](oven-sh#42610) | `33f89359c50a` | | [42614: fix(node): resolve listen hosts before binding](oven-sh#42614) | `5b9ab5644122` | | [42616: fix(node:module): synchronize builtin ESM exports](oven-sh#42616) | `aa78523549c1` | | [42620: fix(worker_threads): apply execArgv preloads](oven-sh#42620) | `60fbb60c9a16` | | [42621: fix(node:async_hooks): report timer lifecycles](oven-sh#42621) | `6e044db91d6b` | | [42622: fix(node:http): align shutdown transport lifecycle](oven-sh#42622) | `98d5f813e8fe` | | [42635: fix(node:fs): preserve Win32 semantics in recursive mkdir checks](oven-sh#42635) | `891eb8df52f3` | | [42636: fix(runtime): derive data URL loaders from MIME](oven-sh#42636) | `4570e105f422` | Integration repairs preserve newer upstream loop-init error handling, use current Rust loader/string-view interfaces, coordinate WORKER init hook mutations with timer/nextTick dispatch, apply TLS context updates made during pending listen, retain draining native listeners for force-close, and preserve literal filename delimiters across ESM/CommonJS resolution and lookup paths. Superseded C++ CommonJS key reconstruction is removed in favor of the shared resolver owner. ### How did you verify your code works? - Fresh optimized macOS arm64 build: 1,687 passed, 37 existing skips, one existing todo, zero failures across the 22 selected suites, including standalone compilation. - Debug/ASAN build and focused integration regressions passed. Its earlier full run passed 1,681 tests but hit an inherited standalone-compilation fixture limitation: the large debug template exceeded that test budget, and relocated output needs its ASAN sidecar. The optimized run covers that production flow; no sanitizer setting, test timeout, or skip was weakened. - Ten directly affected vendored Node conformance files passed with retries disabled. - All twelve Rust targets passed: zero failed and zero skipped. These are compilation checks, not native execution claims for every target. - Oxlint, root TypeScript, Rust formatting, and `git diff --check` passed. - Independent review is clean through P2. Confirmed integration regressions were repaired; an empty-query/fragment review claim was rejected using actual Node 26.8.2 behavior and protected by a regression. - Repeated recursive-directory testing keeps its 200 optimized-build iterations and descriptor-leak checks, with a fixed nested fixture instead of scanning the growing source tree. ### Final CI corrections The follow-up removes MIME decoding and response cork adapters whose last callers were replaced by the integrated PRs, documents raw-slice ownership immediately above the unsafe operations, and sorts HTTP exports. Workspace Clippy and formatting pass locally. The final debug/ASAN check passes 392 tests across the data-URL, worker-thread, and HTTP suites, with one existing skip and no failures. Independent review of this follow-up is clean through P2. The first CI run also exposed two fork-service limitations: the issue-linking bot has no Anthropic credentials, and autofix.ci cannot push formatter changes without its GitHub App. The formatting change was applied locally. Mordant's advisory `unchecked_construction` warning points to the existing server reload assignment of `user_routes_to_build`. That assignment moves fields from `new_config`, which `on_reload` obtains through `ServerConfig::from_js` before calling `on_reload_from_zig`; the integrated TLS setter also parses its replacement through `SSLConfig::from_js`. This is not an unchecked user-input path. Its baseline and enforcement were left intact; the three unused-helper findings were repaired. The final optimized macOS arm64 build passes all four affected suites: **433 passed, one existing skip, zero failures** in 9.11 seconds, including standalone compilation. This supplements the initial 22-suite run (1,687 passed), ten vendored Node conformance files, and twelve Rust compilation targets. The final cleanup also passes **392 debug/ASAN tests** and workspace Clippy. The reload validation path discussed above is visible at [ServerConfig::from_js before reload](https://github.com/openclaw/bun/blob/597b78c2c4b6a0e15b4b1724ab0e5ebff80f5678/src/runtime/server/server_body.rs#L2262), while [the flagged assignment](https://github.com/openclaw/bun/blob/597b78c2c4b6a0e15b4b1724ab0e5ebff80f5678/src/runtime/server/server_body.rs#L2208) transfers that parsed configuration. Final hosted validation on `597b78c2c4b6a0e15b4b1724ab0e5ebff80f5678`: formatting, JavaScript/source lint, TypeScript types, package tests, Clippy, Miri, and lol-html tests passed. The [Rust workflow](https://github.com/openclaw/bun/actions/runs/34808804630) succeeded; its advisory Mordant job retains only the documented reload-validation false positive.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Preserves cloneable Error metadata when a Node Worker reports an uncaught exception to its parent.
Bun's ordinary structured-clone Error path carries standard Error fields but drops own enumerable properties and recursively nested
causemetadata. This follow-up to #34424 carries Worker-only metadata separately, restores numeric and named enumerable properties, preserves whethercausewas enumerable, and recursively applies nested Error causes. Metadata traversal is capped at 32 levels so serialization, reconstruction, and destruction remain bounded.The PR is temporarily based on #34424's branch because both changes touch the same Worker error serializer. It preserves that PR's
error.codefallback and throwing-stack-getter handling. The PR head's parent still exactly matches the live #34424 head.AI-assisted: yes. Codex helped isolate the serialization boundary, implement the patch, resolve the stack conflict, design the stress regressions, and review the exact stacked head. I reviewed the code and validation results.
How did you verify your code works?
error.cause.git diff --checkpass.For an uncloneable
cause, Bun omits that cause while preserving unrelated cloneable metadata. Node may expose an inspected-text fallback for the cause itself; this PR does not expand into that separate behavior.OpenClaw integration context: openclaw/openclaw#146807