Skip to content

ci: update shared Bun fork and WebKit pin - #178224

Merged
steipete merged 1 commit into
mainfrom
ci/bun-pin-ef37c31de3
Oct 20, 2026
Merged

steipete merged 1 commit into
mainfrom
ci/bun-pin-ef37c31de3

Conversation

@steipete

Copy link
Copy Markdown
Contributor

What Problem This Solves

Updates the shared OpenClaw Bun fork pin after upstream runtime and engine qualification, including native lint/format performance fixes and explicit package-script bypass with --no-script.

User Impact

The shared pin advances from 7bd4fdff3d to ef37c31de3, retaining Bun 1.4.4 and updating WebKit from f8521bb454 to a2976f02e6. Linux qualification and the qualified macOS gate passed, with the retained observations described below. The six-platform pin JSON is copied exactly from the supplied release conversion.

Why This Change Was Made

The upstream sync imports 58 oven-sh/bun commits from f2405c38 through ad4089bf, including upstream native lint/format performance work and --no-script. The new WebKit release replays the 16 fork patches onto upstream WebKit 87ee10da, with all 14 required exports qualified on ten targets.

Fork repairs reattach normalize_source behavior, correct Bake's pathless built-in entry, preserve iterator-aware Headers conversion and native WebSocket close scheduling in server.upgrade, and restrict the runtime-only auto-install flag to runtime commands. The macOS native realpath test expectations now follow Node's native macOS results; the descriptor-free implementation is unchanged.

The inherited call-start stack columns and sourcemap segments, bytecode fingerprints, external-require output, namespace/export behavior, strict Worker argv floor, package-parser behavior, percent-path annotation error, invoked symlink spelling, virtual TypeScript loader limitations, Node-compatible ppid descriptor and manifest-pinned WebKit layout remain preserved. The upstream sync retains the narrow POSIX trailing-directory-backslash path.relative() difference, malformed/unreadable entry-adjacent package configuration failing before user code, and npm ws over TLS losing queued frames on termination inside a large-write callback.

Existing TLS differences include pre-connect setServername, early close_notify, fatal Duplex transport-close timing, nested reset notifications and portions of live setSecureContext. Array holes over process.env, repeated Worker throwing-stack getter evaluation, HTTP2 backpressure fixture preconditions and the earlier one-off install-staging observation remain documented follow-ups. This update does not claim broad Node/upstream parity.

The one upstream SQLite native node:vm timeout failure on macOS 15 with the new engine remains unresolved and not reproduced. The next macOS CI run and 36 local macOS runs passed; those observations do not erase the original failure. No SQLite test or timeout was changed.

Evidence

The Linux paired replay completed all 201 selections, including all Bun-admitted CI groups and the explicit JSC/Worker-memory supplements. It retained every completed comparison and found no unclassified candidate-only regression. S2 recorded 190,954 passing / 47 failing / 1,350 skipped assertion observations; S3 recorded 190,940 / 61 / 1,350. The complete difference is 14 SHARED_LEAK_PATH session-sharing failures, plus one PRODUCT_BUG_EXPOSED dev-gateway failure, minus one S2-only first-signin failure. Both product defects are fixed on the required base. All 16 differing identities were reconciled, and shared failures remain recorded.

The targeted matrix completed 660 calls with 4,155 passing assertions and five shared skips per Bun runtime. The Node 24.19.0 control recorded ten failed assertions across five scheduled runs in src/infra/owned-directory-observation.test.ts (duplicate watch call and watch-path mismatch), classified NODE_CONTROL_ONLY; both Bun arms passed that file. No control retry was run. The preinstall supplement passed 225 assertions per runtime, and the actual Node-hidden smoke passed all ten stages without attempting Node. The test/scripts/run-node-lifecycle.test.ts native-watch confirmation passed five runs per Bun under its declared rule, yielding INHERITED_OR_ENVIRONMENTAL; the original observation remains unattributed and retained.

The dual-all trial passed its count criterion: two Bun-only failures versus four on the prior pin, with zero incomplete shards across 410 paired shards. The two failures are the classified OpenClaw lifecycle/retained-read bugs. The prepared base contains both fixes: #177066 (4cba3b50298f) and #176913 (2a49c621e7f7). Fresh-main dev-gateway acceptance at 5a85669bb331bf1ccc291897b66743411478fd62 passed all 15 calls, 40 assertions per runtime, with its own dependency installation.

The completed quiet-Linux performance gates passed:

Gate Result
Gateway readiness, 12 pairs Median paired ratio 0.925129; 0/12 candidate-slower pairs
TERM-to-exit, 12 pairs Median difference +10.8008 ms; 7/12 slower, below the declared +150 ms and 9/12 failure rule
Messaging RSS, 3 runs/runtime Median ratio 0.980313, within 1.05
HTTP throughput, 5 pairs Geometric ratio 0.997820; 95% interval [0.960059, 1.037066], within the declared noise rule
CLI cold start, 10 pairs Median ratio 0.991786, within 1.05

The macOS gate is a qualified PASS: all 70 historical paired files were accounted for, native and Rosetta targeted coverage passed, and the VM-timeout probe produced all 48 expected timeout outcomes per runtime. The retained initial catalog-retention failure did not reproduce in the prescribed five-run confirmation on either runtime (INHERITED_RETENTION_FLAKE); the catalog-performance timeout passed its allowed quiet reversed-order pair. Native Worker root RSS ratio was 1.028997 (limit 1.10), and VM messaging RSS ratio was 0.990239 (limit 1.05). Signing, notarization and the native darwin-x64 release smoke passed. These qualifications retain the original observations.

The original 30-file memory pair stopped under a zero-tolerance RSS rule: 4,051,341,312 bytes on S2 and 4,060,192,768 on S3. Before further data, the five-pair confirmation rule was declared: median paired ratio ≤1.02, no pair >1.05. The original pair was retained; the complete five-pair/five-Node-control cohort passed with median 1.000588457 and maximum 1.006253031. Every run had the same 279 passes and one predeclared inherited sessionless-media failure. No candidate-only assertion was lost.

Native tooling passed on clean main c34e0c9c9621b8007dd5ef69d5272e41a9b5e3f5. bun lint --no-script was accepted and matched oxlint 1.87.0's 4,476 findings across 49,637 files, with identical location tuples, severity and labels at both thread settings. Exit 1 reflects the same existing findings. bun fmt --check --no-script matched oxfmt 0.72.0 with zero differences across 52,479 files, including empty list-different output.

Threads Bun lint (s) oxlint (s) Bun fmt check (s) oxfmt check (s)
Default (32) 2.118830 3.775411 0.615637 1.369205
4 5.873251 9.128264 3.318975 6.474012

The exact plain lint invocation took 2.169781 seconds. Times are single observations. Pin resolver tests passed 24/24 under Node and 24/24 under the pinned Bun; the Linux stager's functional reports passed 11/11 per runtime. That supplementary wrapper's raw-Git-diff equality post-check did not pass, so no post-run source-equivalence pass is claimed for it; the full Gate A source-custody audit passed separately. The initial local macOS stager retains one Rosetta timeout in a generated x64 C fixture (10 other assertions passed); the actual S3 Darwin arm64 release staged with its expected hash. The changed-file check retains the same test-root budget error reproduced on the untouched base (727/721/727 roots versus 720). P2 code review found no actionable issue in the pin/documentation diff.

Focused file / platform Node wall time S3 Bun wall time Result
pinned-bun.test.ts, macOS arm64 4.235 s 3.206 s 24/24 each
stage-openclaw-bun.test.ts, Linux x64 5.084 s 4.619 s 11/11 each
stage-openclaw-bun.test.ts, macOS 133.069 s Not repeated locally 10 pass; generated x64 fixture timeout

Advance the shared Bun 1.4.4 fork to ef37c31de3 and WebKit a2976f02e6, including the upstream sync and native lint/format improvements. Keep the release pin byte-identical to the qualified manifest and document the engine update.
@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@steipete
steipete marked this pull request as ready for review October 20, 2026 07:23
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation scripts Repository scripts size: XS labels Oct 20, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-20T07:25:44.553489Z 60ee480 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@clawsweeper clawsweeper Bot added P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Oct 20, 2026
@clawsweeper

clawsweeper Bot commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

What this changes

This PR updates the shared six-platform Bun fork pin and documents its newer WebKit engine and native tooling improvements.

Example: A developer runs Bun's native lint command in a repository with a lint package script.

  • Before: The shared runtime is pinned to 7bd4fdff3d.
  • After: The shared runtime is pinned to ef37c31de3 and supports bun lint --no-script to bypass the package script.

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused, qualified runtime refresh with no actionable diff defect; recorded limitations remain explicit, and current-head CI is still completing.
Proof confidence 🐚 platinum hermit (4/6) Sufficient (live_output): The PR records candidate Bun native lint/format execution on clean OpenClaw source, parity with the existing tools, successful Node-hidden installation smoke, and Linux/macOS Gateway qualification; these exercise the selected runtime beyond unit tests and retain adverse observations.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Maintenance · Worth it: Yes · Fix scope: Complete
User problem: Developers and packaged runtimes remain on the previous qualified Bun build without the newer native tooling improvements.
Reason: The established runtime owner supplied the direction and detailed qualification, and the diff preserves the existing shared-pin architecture.

Merge readiness

✅ Ready for maintainer review

Keep open: this maintainer-directed runtime refresh is absent from current main, and the pinned diff has no actionable findings.

Priority: P2
Reviewed head: 60ee4805257dbdb252502c1cbb7341b654aecf11

Before merge

None.

Findings

None.

Agent review details

How this fits together

The shared manifest supplies runtime identities and checksums to CI setup, local tooling, installers, and app packaging; existing consumers verify and stage the selected Bun executable.

flowchart TD
  A[Shared Bun pin] --> B[Runtime resolver]
  A --> C[Checksum verifying stager]
  D[Published Bun release] --> C
  B --> C
  C --> E[CI and local tooling]
  C --> F[App runtime packaging]
Loading

Technical review

Best possible solution:

Advance the existing shared pin and matching documentation while preserving checksum verification and the recorded qualification limitations.

Do we have a high-confidence way to reproduce the issue?

This is a dependency refresh rather than a single bug report; its recorded qualification exercises the candidate runtime, and no target code was executed during this read-only review.

Is this the best way to solve the issue?

Updating the existing manifest is the smallest complete change: runtime identity, artifact hashes, and documentation advance together without adding machinery or competing owners.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against a4a0223bc9bc.

Provenance checked

  • Shared runtime identity and artifact pins keeps the original intent (847f7fa: The previous refresh qualified Bun 1.4.4 and its WebKit build for lower retained source memory and disabled-source-map startup; the new release explicitly preserves those contracts.)
  • Pipeline runtime documentation keeps the original intent (847f7fa: The documentation records the executable and engine selected by the shared pin; this PR updates that record consistently.)

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

  • Pinned introduction and current-main comparison: The verified introduced diff changes only the shared runtime manifest and matching pipeline documentation; fetched main still selects 7bd4fdff3d. (scripts/lib/openclaw-bun.json:2, 60ee4805257d)
  • Existing verification owner: The unchanged stager checks release identity, archive and executable hashes, architecture, and executable revision before publishing the runtime; the resolver separates cached runtimes by release tag. (scripts/stage-openclaw-bun.sh:31, 60ee4805257d)
  • Published artifact identities and dependency policy: The OpenClaw stager directly downloads and executes this dependency, establishing the policy applicability signal. Its pinned AGENTS.md and merged upstream-sync PR were read; the release identifies ef37c31de3 and WebKit a2976f02e6, and all six published archive digests match the proposed pin. (AGENTS.md, ef37c31de3d3)
  • Recorded qualification and accepted limitations: The full PR body records actual native lint/format invocations, Node-hidden installation smoke, Gateway readiness and shutdown measurements, and Linux/macOS comparisons. The maintainer-authored direction explicitly retains the unresolved macOS SQLite timeout observation and inherited runtime differences rather than claiming they were fixed. (60ee4805257d)
  • Qualification failures have landed owners: The linked repairs fix(ui): close stalled development Gateway proxy sockets #177066 and fix(gateway): preserve accepted results and stop late queued replies #176913 are merged and describe the development proxy and queued-result defects exposed during qualification; the historical trial is not an all-green CI claim. (cb4ade99e985)
  • Feature history and ownership: History across openclaw-bun-macos.json and openclaw-bun.json consistently identifies steipete as the runtime-pin contributor, including the shared Linux cutover and subsequent pin refreshes; the rename was independently confirmed through the commit API. (scripts/lib/openclaw-bun.json:2, 847f7fade0d6)

PR surface

Docs +3, Other 0. Total +3 across 2 files. Added test files: 0.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 1 8 5 +3
Config 0 0 0 0
Generated 0 0 0 0
Other 1 15 15 0
Total 2 23 20 +3

Labels

Label changes:

  • add P2: A qualified shared-runtime refresh provides tooling improvements across development, CI, and packaged apps without establishing an urgent user regression.
  • add proof: sufficient: Contributor real behavior proof is sufficient.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Label justifications:

  • P2: A qualified shared-runtime refresh provides tooling improvements across development, CI, and packaged apps without establishing an urgent user regression.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • proof: sufficient: Contributor real behavior proof is sufficient.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed October 20, 2026, 3:39 AM ET / 07:39 UTC.

@steipete
steipete merged commit 10f02ef into main Oct 20, 2026
182 of 186 checks passed
@steipete
steipete deleted the ci/bun-pin-ef37c31de3 branch October 20, 2026 08:00
@steipete

Copy link
Copy Markdown
Contributor Author

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Oct 21, 2026
Advance the shared Bun 1.4.4 fork to ef37c31de3 and WebKit a2976f02e6, including the upstream sync and native lint/format improvements. Keep the release pin byte-identical to the qualified manifest and document the engine update.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Improvements or additions to documentation P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. scripts Repository scripts size: XS status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant