Repository navigation
Conversation
…d the C++ bindings Delete code that nothing references: - _set_remove and __bun_dynamic_comp in completions/bun.zsh. - The lazy-loader entries of sqlite3_bind_blob, sqlite3_bind_text and sqlite3_bind_text16. The bindings call the 64 variants only. - The Bun::vm(Zig::GlobalObject*) overload. Each call passes a JSC::VM& or a JSC::JSGlobalObject*. - JSFFIFunction::symbolFromDynamicLibrary, which is written and never read. - 19 #include lines that repeat an earlier #include of the same header. - Commented-out code in EventNames.h and JSEventTargetCustom.cpp. - The bun_sha alias of bun_sha_hmac in bun_install.
…and bindgen #45631 added these without a reader, or removed their last reader: - signatureOfBindgen, parseBufferAccessors, jsonSerializationUses and unplacedPath in src/codegen/builtins. - Bun::Bindgen::ArgumentInFrame. - $Node.PreallocatedEvents and the emitEventWithArgs re-export of internal/trace_events. - The notImplementedIssueFn build-time macro. - A second include of wtf/WTFConfig.h in c-bindings.cpp.
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. WalkthroughThe pull request removes helper code and native declarations, including selected SQLite lazy bindings. It also removes duplicate includes and commented-out code, and adjusts platform-specific includes in ChangesCode and include cleanup
Merge Risk:
|
|
Status: ready for review.
|
|
Updated 1:09 PM PT - Nov 10th, 2026
❌ @robobun, your commit 9d4dc5a has 1 failures in
🧪 To try this PR locally: bunx bun-pr 47439That installs a local version of the PR into your bun-47439 --bun |
There was a problem hiding this comment.
I reviewed this PR and didn't find any bugs. Because it spans 24 files including platform-gated includes and a .d.ts covered by CODEOWNERS, a human look would still be worthwhile.
What was reviewed:
- Grepped every removed symbol (
signatureOfBindgen,parseBufferAccessors,notImplementedIssueFn,ArgumentInFrame,symbolFromDynamicLibrary,$Node.PreallocatedEvents, thebun_shaalias, the two zsh functions,sqlite3_bind_text/blob/text16) across src, test and completions — no remaining reader;emitEventWithArgsis still exported byinternal/trace_event_recorder, which is whatnode:netrequires. - The
Bun::vm(Zig::GlobalObject*)removal: all seven callers already pass aJSC::VM&or aJSC::JSGlobalObject*(bindings.cpp and InspectorTestReporterAgent.cpp declareglobalObjectasJSC::JSGlobalObject*), so the deleted overload was never selected and dispatch is unchanged. - Each removed
#includeis still included earlier in the same file in an enclosing or implied preprocessor scope (e.g. BunProcess.cpp's#ifndef WIN32block covers the__linux__ || __FreeBSD__removals; c-bindings.cpp's<atomic>/<signal.h>/<pthread.h>are in both arms or an implied!OS(WINDOWS)scope).
Extended reasoning...
The change is a 127-line pure deletion across zsh completions, the builtins codegen, built-in JS, C++ bindings headers/includes, the macOS-only lazy SQLite loader, and one Rust extern-crate alias, with no additions. It touches no security-sensitive surface; the crypto files only lose duplicate include lines. Every deletion was verified to have no remaining consumer and every include removal to be covered in the same file, and the sole overload removal provably changes no call resolution. Deferring rather than approving because src/js/builtins.d.ts falls under the *.d.ts CODEOWNERS entry, the diff is wide, and the lazy_sqlite3.h and Windows/FreeBSD include paths cannot be compiled from this Linux checkout.
One conflict, in src/jsc/bindings/ZigGlobalObject.h. On main, #47498 moved the declaration of `Bun::putDirectNamed` to root.h. This branch removes the unused `Bun::vm(Zig::GlobalObject*)`, the next lines of the file. Both are removed.
|
Merged main (204d701) into this branch. The old head was 7b5eb29, the new head is 4d5484b.
The search for users, run again on the merged tree:
Checked on the merged tree (Linux x64, debug build with ASAN):
|
…f-time node:http texts - `bun_aot::diagnostics::log_internal_error` and its re-export. Nothing calls it. - `$Node.OutgoingMessageConstructor` and `$Node.ClientRequestConstructor` in `src/js/ahead-of-time/node`. Nothing names these type declarations.
|
A later run of the dead-code sweep added commit 3cbe3a5 here instead of opening another pull request. It removes 22 more lines that #45631 left unused: |
There was a problem hiding this comment.
I reviewed the latest push (including the third commit) and found no bugs; since src/js/builtins.d.ts is a CODEOWNERS-covered path, a human look is still the right final step.
What was reviewed:
- Grepped the tree for every deleted symbol: the only surviving
emitEventWithArgscaller (src/js/node/net.ts) imports frominternal/trace_event_recorder, which keeps its export; the threeBun::vm(globalObject)sites (bindings.cpp x2, InspectorTestReporterAgent.cpp) all takeJSC::JSGlobalObject*, so the remaining overload still binds; no non-64sqlite3_bind_blob/text/text16call exists outside the vendored amalgamation headers. - Checked each platform-gated
#includeremoval against an earlier include in an enclosing or implied scope (e.g. BunProcess.cpp<sys/stat.h>is unconditional at line 49; c-bindings.cpp<atomic>,<signal.h>,<pthread.h>are in both arms of!OS(WINDOWS)). - Confirmed
write_internal_errors,listAccessors,createField/createReceiverkeep callers after their wrappers were removed, and that the non-AOT_http_*twins never declared the removed$Nodetypes.
Extended reasoning...
The PR is a pure deletion sweep (+1/-149 across 28 files): unused zsh helpers, a Rust re-export, codegen helpers, TypeScript type-only declarations, a C++ class and member, a Bun::vm overload, three lazy-sqlite entries, commented-out code, and duplicate includes. It touches no security-sensitive surface; the crypto and sqlite files only lose redundant includes and never-called function-pointer slots. Every removed symbol was grepped for remaining references and none was found, and each removed include was traced to an equivalent include in an enclosing or implied preprocessor scope. Approval is withheld only because *.d.ts is covered by CODEOWNERS and the cfg-gated include removals cannot be compiled here; no third-party objections are outstanding in the timeline.
Open pull request #47635 merges with main and changes a line in the body of `signatureOfBindgen`. The removal of that function made the two conflict. Put the function back, with `unplacedPath` and the two type imports that only it uses. The function still has no caller.
Four files conflict. main (#47942, #48120) already removed `log_internal_error` from src/aot/diagnostics and the `PreallocatedEvents` declaration from internal/streams/readable.ts, so those files take main's text. In ahead-of-time/node/_http_outgoing.ts the unused `OutgoingMessageConstructor` interface is removed again, on main's text. `internal/trace_events` keeps its `emitEventWithArgs` export. Since #48120, node:net reads the function from that module.
Open pull request #48356 calls `notImplementedIssueFn` twice in src/js/builtins/BundlerPlugin.ts at its head. Put the rule of src/codegen/replacements.ts and the declaration of src/js/builtins.d.ts back. No source on main calls the macro.
…exts #48120 changed the body of `$Node.OutgoingMessageConstructor` and kept the interface. So the owners of these texts maintain the declarations, and a sweep does not remove them. `$Node.ClientRequestConstructor` is the same kind of declaration. Both still have no user.
There was a problem hiding this comment.
LGTM — pure deletion, and each removed line checks out as dead on the rebased tree.
What was reviewed:
- Removed symbols: no remaining uses of
symbolFromDynamicLibraryas a member (only the function parameter inBun__CreateFFIFunctionValue),ArgumentInFrame,bun_sha::, the zsh helpers, or the non-64 lazy sqlite binders outside the vendoredsqlite3_local.hdeclarations. Bun::vm(Zig::GlobalObject*)removal: the fourglobalObjectcallers passJSC::JSGlobalObject*(and anyZig::GlobalObject*converts to the surviving overload);clientData->bunVMandm_bunVMare the same per-VM pointer, as the neighboringBun::bunVM()helper already assumes.- Removed includes: every one is still included in the same TU either unconditionally or in the enclosing/sibling arm of the same platform guard (
<sys/stat.h>line 53 of BunProcess.cpp;<atomic>in both arms of c-bindings.cpp;<wtf/WTFConfig.h>,<signal.h>,<pthread.h>in the!OS(WINDOWS)block), and the webcore/crypto ones are exact duplicates of an earlier line. - Not done: no build or test run on any platform; cross-platform compilation was checked by reading the guards only.
Extended reasoning...
The change deletes 83 lines across 18 files with nothing added: two unused zsh functions, an unused Rust extern-crate alias, an unused bindgen helper class, an unread FFI member, a redundant Bun::vm overload, three non-64 lazy sqlite binder entries, duplicate or redundant #include lines in nine C++ files, and stale commented-out code. It touches no security-sensitive surface (the crypto files only lose a duplicate include, the FFI change removes a write to a field nothing reads). Every removed symbol was grepped for remaining users and every removed include was confirmed still present in the same translation unit under the same platform conditions, so the only unverifiable claim is a compile on each platform, which reading the guards makes very unlikely to fail. No CODEOWNERS entry covers the changed files, no CHANGES_REQUESTED review is outstanding, and the three commits since the last review rebased onto current main and dropped the hunks that had been overtaken, which narrowed rather than widened the scope.
No conflict. main is one commit ahead (#48436), and that commit changes no file of this diff.
Problem
main.#includelines, comments, and one Rust line that only the disabledunused_extern_crateslint reports.Fix
bun build --compile --aot#45631. 17 lines came with Compile TypeScript to machine code ahead of time:bun build --compile --aot#45631: an unused bindgen class and one repeated#include.main89452d2. No open pull request adds one (Notes).bun bdand 16 test files on the merged tree (Notes).mainor an open pull request overtook 50, and 16 stay with their owners. The Notes name each one.Behaviour change: none
Background
lazy_sqlite3.hcompiles on macOS only. There Bun loads the system SQLite withdlopen. It calls each function through a pointer that this header declares and resolves.completions/bun.zshis embedded in the binary.bun completionswrites it to disk.#includeof a guarded header compiles to nothing.Downsides
node:netreadsemitEventWithArgsfrominternal/trace_events, and that hunk is out. The Notes hold a check of every open head.Notes
Removed
completions/bun.zsh(-21)._set_removeand__bun_dynamic_comp. Each name has one hit in the tree, its definition. The script dispatches by name nowhere: its onlycompdefiscompdef _bun bun.src/jsc/bindings/sqlite/lazy_sqlite3.h(-12). The typedef, the pointer, the#defineand thedlsymline ofsqlite3_bind_blob,sqlite3_bind_textandsqlite3_bind_text16. A word search oversrcoutside the vendored amalgamation finds these 12 lines only. The two includers call the64variants. The macOS link is the check for a missed caller: no libsqlite3 is linked there. Remove dead code from the JSC, WebCore, and node bindings, uWS/uSockets, SecretsLinux, and seven Rust crates #42431 found the same three entries and left them out because the header compiles on macOS only.src/jsc/bindings/ZigGlobalObject.h(-5).Bun::vm(Zig::GlobalObject*). The twelve calls pass aJSC::VM&(eight) or aJSC::JSGlobalObject*(four).src/jsc/bindings/JSFFIFunction.{h,cpp}(-2). The membersymbolFromDynamicLibraryand its one write. Remove dead code from Bun.Terminal, FileSink, and URLSearchParams: four write-only fields #46268 held it for bun:ffi: make cc() symbols' .ptr the address of the compiled C function #38031. At its head, bun:ffi: make cc() symbols' .ptr the address of the compiled C function #38031 reads the function parameter of the same name, not the member.#includelines in 9 files.bun-spawn.cpp(<fcntl.h>,<signal.h>),BunProcess.cpp(<sys/stat.h>),c-bindings.cpp(<cstdlib>),node/crypto/JSHmac.cppandJSHash.cpp(<JavaScriptCore/Error.h>),node/crypto/DiffieHellmanFunctions.h,webcore/JSWebSocket.cpp(four),webcore/JSAbortSignal.cpp,webcore/JSDOMURL.cpp.#if/#elsewhose two arms both include the header:<fcntl.h>inBunProcess.cpp,<atomic>inc-bindings.cpp.<sys/resource.h>and<sys/types.h>inBunProcess.cpp(__linux__or__FreeBSD__implies!WIN32),<signal.h>and<pthread.h>inc-bindings.cpp(OS(LINUX) || OS(DARWIN) || OS(FREEBSD)implies!OS(WINDOWS)).webcore/EventNames.h(-2),webcore/JSEventTargetCustom.cpp(-4). Commented-out code.git blamedates the lines 2022-03-28 in the first file, and 2022-05-08 to 2026-04-25 in the second.src/install/lib.rs(-1).extern crate bun_sha_hmac as bun_sha;. The crate namesbun_sha_hmacdirectly. rustc reports the line with-W unused_extern_crates.src/jsc/bindings/Bindgen/IDLConvert.h(-14).Bun::Bindgen::ArgumentInFrame, which Compile TypeScript to machine code ahead of time:bun build --compile --aot#45631 added. Nothing names the class. The generated host functions hand acppInlineBodythe classArgumentsInFrame, and acppSymbolfunction takes its arguments as a Rust thunk does.src/jsc/bindings/c-bindings.cpp(-3). An#include <wtf/WTFConfig.h>underENABLE(AOT_GUARDED_PAGES), which Compile TypeScript to machine code ahead of time:bun build --compile --aot#45631 added. The same#if !OS(WINDOWS)block includes the header 25 lines above.Taken out of this pull request since it opened (66 lines)
signatureOfBindgenincollect-bindgen.ts, withunplacedPathand two type imports (16 lines). aot: a bindgen method that runs no JavaScript keeps nothing of an instance it is handed as &T #47635 changed a line of its body. Remove dead code from headers.h, the REPL shims, builtin-names.ts and the builtins code generator: what #45631 left unused #47324 now deletes the function.mainwas at 98cda0d:mainremoved them itself (25 lines):jsonSerializationUses,parseBufferAccessorsandlog_internal_errorin AOT: front end, test runs and tests for the rewritten compiler #47942, and the$Node.PreallocatedEventsdeclaration ofinternal/streams/readable.tsin AOT: the next base #48120.mainuses it again (2 lines): theemitEventWithArgsexport ofinternal/trace_events. Since AOT: the next base #48120,src/js/node/net.tsreads the function from that module. The old hunk merged withmainwith no conflict, and it left that call with no function.notImplementedIssueFnmacro ofsrc/codegen/replacements.tsandsrc/js/builtins.d.ts. At its head, AOT: a loop over a Map or a Set reads the facts of its table once, in front of the loop #48356 calls it twice insrc/js/builtins/BundlerPlugin.ts.$Node.OutgoingMessageConstructorand$Node.ClientRequestConstructorof the ahead-of-timenode:httptexts. Both still have no user. AOT: the next base #48120 changed the body of the first and kept it.bun build --compile --aot#45631 left unused. In 10 daysmainremoved 4 of them,mainor an open pull request used 2 again, an open pull request edited 1, and the owners changed and kept 1. The sibling of that one went out with it. The 2 that stay are the class and the#includeabove.Open pull requests
main98cda0d with the heads of all 6,205 other pull requests that were open at 08:06 UTC, drafts and every author included.main. A trial merge of each (git merge-tree) shows that the branch adds a conflict to none of the 63. In each merged tree, every header that lost a repeated#includeline still has an include in its file.main. The branch adds a conflicted file to none of them.maintoday: Rename Zig-prefixed identifiers to Bun/Rust equivalents #30747 rewrites theBun::vmoverload, Remove cross-crate layering workarounds #33152 deletes thebun_shaalias, crypto: Hash, Hmac, Cipheriv, Decipheriv as single native classes; drop LazyTransform #40075 rewrites the includes ofJSHash.cppandJSHmac.cpp, bun:dom and the Vitest work in one tree (not for merging) #45415 deletes the twoEventNames.hcomments.Bun::vm()calls that fix(inspector): defer full garbage collection for local sessions #44549, bun:dom and the Vitest work in one tree (not for merging) #45415, Locate the failing import of a module link error in the source of the importer #47531, Watch the file that a runtime plugin's onLoad serves, before the callback runs #47566, process: node's fallback streams for an fd 0, 1 or 2 of an unknown type #47597 and Map stack traces through a loaded file's own source map with --enable-source-maps #47713 add pass aJSC::VM&or aJSC::JSGlobalObject*.main89452d2, with the heads of the 104 open pull requests updated since 07:30 UTC. 8 of them change a file of this diff. 5 of the 8 merge cleanly withmain, and the branch adds a conflict to none. The other 3 already conflict withmain, and the branch adds no conflicted file to them. No head adds a use of a removed name.mainand the search must run again. I do both on approval.Found dead in this run, and left alone (list of 2026-11-01, not checked again)
IDLByte,IDLShortandIDLLongLong, theconvertToInteger*specializations behind them, nineJSConverterspecializations and threeconvert<T>()overloads that nothing onmaininstantiates, andEvent::currentTargetIsInShadowTree(). The bun:dom draft bun:dom and the Vitest work in one tree (not for merging) #45415 calls them (51toJS<IDLLong>, 73toJS<IDLAtomStringAdaptor<...>>). bindgen: deleteb.anyand.variadic#46789 maps the bindgeni64toIDLLongLong. Remove dead code from headers.h, the REPL shims, builtin-names.ts and the builtins code generator: what #45631 left unused #47324 and Remove dead code from bun_lint, bun_sema, BunProcess.cpp, and NodeDirent.cpp #45764 held them for the same reason.(@gamut none ...)arm ofdefine_colorspace!(Remove dead code from bun_glob and bun_css #46196), 12 commented-out option placeholders inthirdparty/undici.tsand 3 lines inFetchHeaders.cpp(http: consolidate the open fetch, Bun.serve, node:http, node:http2 and HTTP/3 pull requests #46528), a commented-outstatic_assertinJSPerformanceObserverEntryList.cpp(PerformanceObserver: observe Node's entry types in the global class, with one queue per observer #45340 replaces the line).signatureOfBindgenincollect-bindgen.ts, withunplacedPathand two type imports (16 lines, still with no caller: aot: a bindgen method that runs no JavaScript keeps nothing of an instance it is handed as &T #47635 changes a line of its body), 11 private names ofBunBuiltinNames.has counted on 2026-10-30 (http: consolidate the open fetch, Bun.serve, node:http, node:http2 and HTTP/3 pull requests #46528, AOT: bun test --aot on large suites, module loading fixes, fuzzer fixes #47316 and bun test: Vitest compatibility #44833 edited the list then, and Remove dead code from ZigGlobalObject, FuzzilliREPRL.cpp, BunBuiltinNames.h and launch.json #47672 now removes one of the 11,initialExports), 10 commented-out lines inJSEventListener.cpp(worker: keep a TerminationException pending through microtask jobs, event listeners, and emit() #40128 changes the file).InspectorHTTPServerAgent::m_serverIdToServerInstanceis written and never read. Without it theserverInstancepointer crosses C++, the bindgen shim and anunsafe fnin Rust for nothing. That removal is +13/-38 in 5 files, not a deletion.#includelines not taken: 18 are in Remove dead code from the JSC, WebCore, and node bindings, uWS/uSockets, SecretsLinux, and seven Rust crates #42431.<limits>inSerializedScriptValue.cppis next to a hunk of Remove dead code from SerializedScriptValue, ncrypto, and the WebCore IDL converters #43644. The one inNodeUtilTypesModule.cppadds a conflict to util.inspect andutil.types.isAsyncFunction: read the kind of a function from the engine #45735.<vector>inroot_certs.cppis in a Windows-only block.<unistd.h>inBunProcess.cpphas another guard macro (_MSC_VERagainstWIN32).WEBCORE_GENERATED_CONSTRUCTOR_GETTERhas 48 uses and 12 of the<Class>_getterfunctions have a reader. Resolve runtime globals in builtin modules to the intrinsic, not globalThis #40303 removes the getters.KeyObject::exportJwkhas ahandleRsaPssparameter and every caller passesfalse.internalConnectinnode:netcallscheckBindError(err, ...)whileerris alwaysundefined.SecretsLinux.cpploads and null-checks six GLib functions that it never calls.WebSocketProtocol.hkeeps the client role, and Bun instantiates the server role only.PerformanceResourceTiming,ResourceTimingandNetworkLoadMetricscannot be constructed, but the JS constructors are public.LOG_ALLOCATIONSinsrc/collections/pool.rsis a constantfalsethat a developer flips by hand.src/codegen/builtins/that nothing imports (the lists mirror the engine's modules).scripts/gamble.ts,scripts/github-metrics.ts,scripts/lldb-inline.shandscripts/lldb-inline-tool.cpphave no mention in the tree, but they still work.$-alias members inbuiltins.d.tsthat no builtin can spell, thethrowErrormode ofnullCheckinnode:child_process, a check infs.readthat runs before its value is assigned, the#if IS_BIG_ENDIANarm ofsrc/runtime/ffi/FFI.h, the write-onlyTestExpectation.bugsinscripts/runner.node.ts,vscodeToInspectorinbun-vscode, 45 stale lines in.gitignore,.dockerignoreand.gitattributes, and 8 dead flags incompletions/bun.bash.type HttpServerConstructorinahead-of-time/node/_http_server.tshas no user. http: consolidate the open fetch, Bun.serve, node:http, node:http2 and HTTP/3 pull requests #46528 inserts an interface directly below it.udp_recvbuf.buflenin uSockets (#if defined(_WIN32)) is written once and never read. Without it thedatabuflenparameter has no use, and its removal adds a conflict to udp: take every queued ICMP report before the first error handler runs #44461.us_loop_integrateis an empty function, and the libuv definitions ofus_poll_startandus_internal_accept_poll_eventhave no caller. usockets: fail loop creation when the wakeup source cannot be registered #44455 and Remove libuv on Windows #42819 delete them.Default for AtomicCell<T>andRacyCell<T>,From<T> for JsCell<T>,Parse for Size2D<T>andRect<T>,Located for NameOf<Node>. Earlier runs left the same impls for the owners to decide (Remove dead code: 49 trait impls nothing uses, across 12 crates #43664, Remove dead code: six trait impls nothing uses #44696, Remove dead code from bun_sema and bun_format: 6 trait impls nothing uses #45430, Remove dead code: 8 trait impls nothing uses, in bun_bundler, bun_core and bun_css #45988), and a unit test in open RacyCell: replace the unconditional Sync impl with an owner-thread runtime check #31178 callsRacyCell::default().resolveComputedSpecifierofbun:internal-for-testing, with its bindgen entry andresolve_computed_specifierinsrc/runtime/code_resolver_testing.rs: no test calls it. It is a test hook, so the intent is not certain.unused_extern_cratesin the workspace. Remove dead code from bun_glob and bun_css #46196 removes the only hit ofunused_macro_rules. Turn on the Rust lints and build restrictions that are already clean #46703 turns on the lints that are already clean, and these two then qualify.How the candidates were found
src/js(two parts), the C++ bindings (five parts), uSockets and uWS, the build scripts, the side packages, and commented-out code.--gc-sections --print-gc-sections, with each dropped function mapped to its source line. The linker drops 379 functions of the hand-written C and C++. Almost all are Windows or macOS code, or are deleted by an open pull request.cargo check --workspacewith-W unused_crate_dependencies -W unused_macro_rules -W unused_extern_crates: two hits, and no unused Cargo dependency.#includelines.Tests, debug build of this branch
main98cda0d:bun bdbuilds. A word search of the merged tree finds no user of a removed name. 16 files pass with--timeout 60000:test/aot/shell-completions-list-flags.test.ts,source-lints/no-iostream-include.test.ts,source-lints/shim-stdint-includes.test.ts,test/internal/bindgen.test.ts,bindgen-declared-results.test.ts,crypto.hmac.test.ts,crypto-hmac-algorithm.test.ts,crypto-lazyhash.test.ts,ecdh.test.ts,url.test.ts,abort.test.ts,websocket-close-code.test.ts,sqlite.test.js,ffi.test.js,trace-events.test.tsandbun/spawn/spawn.test.ts. One earlier run ofspawn.test.tsdid not end in 40 minutes.main89452d2 (AOT: bun compile, build output, module mocks, fixes and new names #48436), head 9d4dc5a: no conflict, and that commit changes no file of this diff.bun bdbuilds. The word search finds no user of a removed name. 13 of the 16 files above pass again with--timeout 60000. The other 3 did not run again:bindgen-declared-results.test.ts,crypto-hmac-algorithm.test.tsandspawn.test.ts.rust:check-alldid not run on this head. The one Rust line of the diff is thebun_shaalias, and no file ofsrc/installnamesbun_shafor any target.bun bd,bun run rust:check-all(12 triples) and up to 26 test files, on 2026-10-30, 2026-10-31 and 2026-11-01. The one failure then was "should be the node version on the host that we expect" inprocess.test.js: the sandbox has node v26.3.0 and the test expects v26.12.1.no test proof · iteration 15 · the description declares no behaviour change, so there is no failing test to prove; the existing suite in CI is the check