Remove dead code from the streams bindings, node:http, bun_sys, lsquic_sys, and orphaned files - #38213
Conversation
…Bun__resolve export
…fixtures and upstream leftovers
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (45)
Disabled knowledge base sources:
WalkthroughThe pull request removes obsolete runtime bindings, system wrappers, FFI APIs, debugging tools, generated metadata, scripts, documentation, and workspace configuration. It also simplifies HTTP parser imports and updates one platform comment. ChangesWebCore stream and encoder cleanup
Runtime binding and helper removal
Platform syscall and process-interface cleanup
QUIC and TinyCC FFI cleanup
Development configuration cleanup
Possibly related PRs
Suggested reviewers: Comment |
|
Updated 4:17 PM PT - Aug 13th, 2026
✅ @robobun, your commit 59bf369d3ffa41236fb760599bcba406fc45c3cc passed in 🧪 To try this PR locally: bunx bun-pr 38213That installs a local version of the PR into your bun-38213 --bun |
There was a problem hiding this comment.
Thanks for addressing the two doc-comment nits and narrowing the hawk.toml guard in 59bf369. This run found no further issues. Given the scope — ~2.7k lines removed across 45 files spanning platform-gated bun_sys syscall arms, the WebCore streams bindings, and the node:http request path — a human pass is still worthwhile before landing.
What was reviewed:
- Confirmed
$disturbed/$bunNativeTypehave no remaining readers insrc/js/;m_disturbed(the field) stays and is still written byReadableStream__detach. - Confirmed
Bun__resolvehas no C++/JS callers (only theBun__resolveSync*family remains). - Checked that
OriginalWriteHeadFn/OriginalImplicitHeadFnare still consumed by the surviving flush path in_http_server.tsafterdrainHeadersIfObservablewas removed. - Verified the
link_wandnode_os.rsdoc comments no longer reference the removed functions, and the guard-test regex now matches onlydarwin::Category::.
Extended reasoning...
Overview
This PR is a scheduled dead-code sweep removing ~2.7k lines across 45 files. It deletes: unread m_detached/m_nativeType slots and the $bunNativeType/$disturbed private-name accessors from the WebCore streams cells; the WebCore TextEncoder::encode/encodeInto stubs and their dictionary converters; JSKeyObject::create/subspaceFor and their iso-subspace slots; the Bun__resolve host export; the unreachable kDeprecatedReplySymbol path (~200 lines) and the no-op isNextIncomingMessageHTTPS save/restore in _http_server.ts; a large set of bun_sys platform arms (posix link/fdatasync, the non-Linux sendfile stub, ~15 Windows-only wrappers, c::kqueue/kevent/fork, posix::sysctlbyname/write, clonefile/get_fd_path_w stubs); the lsquic_sys::Engine wrapper and several Conn accessors; PosixSpawnResult::close and the non-Linux pifd_from_pid stub; tcc_sys::State::run; six stale hawk.toml overrides; and 16 orphaned files (Zig-era misctools, patches/ncrypto.patch, meta.json, workspace.code-workspace, EventNames.in, the bake syntax-highlighter demo component, upstream uSockets misc/, etc.). It adds a source-lint guard test and three small #[cfg]/comment adjustments.
Prior review
My previous run flagged two stale doc comments (link_w in src/sys/lib.rs still cross-referencing the removed link/sys_uv::link, and node_os.rs still naming posix::sysctlbyname) and an over-broad bun_platform| alternative in the guard test's hawk.toml regex. All three were fixed in commit 59bf369 and the inline threads are resolved.
Security risks
None identified. This is pure removal of code confirmed to have no callers; no new code paths, no changed validation, no auth/crypto logic (the JSKeyObject change removes only the never-instantiated base-class allocation helpers — the three concrete subclasses each define their own create/subspaceFor).
Level of scrutiny
High. Although the change is mechanically simple (deletions), it spans many subsystems and includes platform-gated Rust where a missing arm only surfaces on that target's build. The PR description documents cargo check --workspace on all six target OS families, a hawk dead_public report across all 11 shipped targets, rg/git grep across the tree and regenerated codegen, and passing test suites for each touched area — which is strong evidence, but the removed bun_sys Windows arms and the ~200-line _http_server.ts deletion are the kind of change a maintainer familiar with those subsystems should confirm.
Other factors
I spot-checked the highest-risk deletions this run: no builtin references $disturbed or $bunNativeType; Bun__resolve has no remaining callers repo-wide; OriginalWriteHeadFn/OriginalImplicitHeadFn retain a live consumer after drainHeadersIfObservable was removed. The guard test follows the existing test/internal/source-lints/ pattern and reads HEAD via git ls-tree for the deleted-file check. Given the breadth (streams C++, node:http hot path, cross-platform syscall wrappers, orphaned-file deletions including a build patch), I'm deferring rather than approving.
| using WrapperClass = JSTextEncoder; | ||
| using ToWrappedReturnType = TextEncoder*; | ||
| }; | ||
| template<> TextEncoder::EncodeIntoResult convertDictionary<TextEncoder::EncodeIntoResult>(JSC::JSGlobalObject&, JSC::JSValue); | ||
|
|
||
| JSC::JSObject* convertDictionaryToJS(JSC::JSGlobalObject&, JSDOMGlobalObject&, const TextEncoder::EncodeIntoResult&); | ||
|
|
||
| } // namespace WebCore |
There was a problem hiding this comment.
🟡 Removing the convertDictionary<EncodeIntoResult>/convertDictionaryToJS declarations here leaves #include "JSDOMConvertDictionary.h" (JSTextEncoder.h:25) with no remaining users; likewise TextEncoder.cpp now contains only return "utf-8"_s; but still includes <JavaScriptCore/GenericTypedArrayViewInlines.h> and <JavaScriptCore/JSCInlines.h> (lines 28-29). The PR already dropped the analogous now-dead includes from TextEncoder.h in the same commit, so these three were just missed — header hygiene only.
Extended reasoning...
What the issue is
This PR removes dead members from the WebCore TextEncoder binding but leaves behind three #include lines whose only users were the removed code. Per REVIEW.md's "Delete dead code in the same PR that makes it dead", these should go in the same PR — and the PR already applied exactly this cleanup to the sibling header, so this is the same class of change with three sites missed.
JSTextEncoder.h:25 — #include "JSDOMConvertDictionary.h". That header declares the primary convertDictionary<T> template and the IDLDictionary converter machinery. This PR removes the template<> TextEncoder::EncodeIntoResult convertDictionary<TextEncoder::EncodeIntoResult>(...) specialization declaration and the convertDictionaryToJS(..., const TextEncoder::EncodeIntoResult&) overload from the bottom of JSTextEncoder.h. Those were the only reason this include existed. The remaining header contents — JSDOMWrapper<TextEncoder>, JSTextEncoderOwner, the toJS/toJSNewlyCreated helpers, and JSDOMWrapperConverterTraits<TextEncoder> — are satisfied by JSDOMWrapper.h, TextEncoder.h, and <wtf/NeverDestroyed.h>.
TextEncoder.cpp:28-29 — #include <JavaScriptCore/GenericTypedArrayViewInlines.h> and #include <JavaScriptCore/JSCInlines.h>. After this PR strips TextEncoder::encode and TextEncoder::encodeInto, the entire remaining body of the translation unit is:
String TextEncoder::encoding() const { return "utf-8"_s; }That needs only WTF::String and the _s literal operator, both of which arrive via TextEncoder.h → <wtf/text/WTFString.h>. The two JSC includes existed solely for the removed bodies (Uint8Array::baseAddress/byteLength, U8_APPEND, StringView::codePoints) and are now dead.
Why this is inconsistent with the PR's own approach
The same commit removes #include "JSDOMConvertBufferSource.h" and #include <JavaScriptCore/Forward.h> from TextEncoder.h because they became dead when EncodeIntoResult/encode/encodeInto were removed. These three includes are the identical class of newly-dead include in the two sibling files, and were just missed.
Step-by-step proof (JSTextEncoder.h case)
- Before this PR, JSTextEncoder.h declared
template<> TextEncoder::EncodeIntoResult convertDictionary<TextEncoder::EncodeIntoResult>(JSC::JSGlobalObject&, JSC::JSValue);at what is now line 96.convertDictionary<T>is the primary template declared inJSDOMConvertDictionary.h, so the specialization declaration required that include. - The diff removes that declaration (and
convertDictionaryToJS, and the corresponding definitions in JSTextEncoder.cpp). - Grepping the post-PR JSTextEncoder.h for anything from JSDOMConvertDictionary.h (
convertDictionary,IDLDictionary,DefaultConverter<IDLDictionary) yields nothing. - The include on line 25 is now dead.
Impact
None at runtime. Unused includes in a .cpp translation unit have zero effect on the shipped binary and negligible build-time cost; a dead include in a header (JSTextEncoder.h) transitively pulls JSDOMConvertDictionary.h into every TU that includes it, but the effect is still build-time-only. This is header hygiene, mentioned only because the PR already did this cleanup for the sibling header and REVIEW.md explicitly asks for dead code to be deleted in the PR that makes it dead.
Fix
src/jsc/bindings/webcore/JSTextEncoder.h: drop line 25 (#include "JSDOMConvertDictionary.h").src/jsc/bindings/webcore/TextEncoder.cpp: drop lines 28-29 (<JavaScriptCore/GenericTypedArrayViewInlines.h>and<JavaScriptCore/JSCInlines.h>).
|
|
||
| [[override]] | ||
| lint = "hawk::dead_public" | ||
| crate = "bun_platform" | ||
| item = "darwin::Category::PointsOfInterest" | ||
| kind = "enum_variant" | ||
| level = "expect" | ||
| reason = "external code table: OSLog signpost category values" | ||
|
|
||
| [[override]] | ||
| lint = "hawk::dead_public" | ||
| crate = "bun_platform" | ||
| item = "darwin::Category::Dynamicity" | ||
| kind = "enum_variant" | ||
| level = "expect" | ||
| reason = "external code table: OSLog signpost category values" | ||
|
|
||
| [[override]] | ||
| lint = "hawk::dead_public" | ||
| crate = "bun_platform" | ||
| item = "darwin::Category::SizeAndThroughput" | ||
| kind = "enum_variant" | ||
| level = "expect" | ||
| reason = "external code table: OSLog signpost category values" | ||
|
|
||
| [[override]] | ||
| lint = "hawk::dead_public" | ||
| crate = "bun_platform" | ||
| item = "darwin::Category::TimeProfile" | ||
| kind = "enum_variant" | ||
| level = "expect" | ||
| reason = "external code table: OSLog signpost category values" | ||
|
|
||
| [[override]] | ||
| lint = "hawk::dead_public" | ||
| crate = "bun_platform" | ||
| item = "darwin::Category::SystemReporting" | ||
| kind = "enum_variant" | ||
| level = "expect" | ||
| reason = "external code table: OSLog signpost category values" | ||
|
|
||
| [[override]] | ||
| lint = "hawk::dead_public" | ||
| crate = "bun_platform" | ||
| item = "darwin::Category::UserCustom" | ||
| kind = "enum_variant" | ||
| level = "expect" | ||
| reason = "external code table: OSLog signpost category values" | ||
|
|
||
| [[override]] |
There was a problem hiding this comment.
🟡 The PR description's Verification section still claims test/internal/source-lints/dead-symbols-streams-http-misctools.test.ts "pins everything above; all 40 content checks and 16 deleted-file checks fail against main and pass here", but tip commit 72cac7f deletes that file (added earlier in this PR, edited in 59bf369 for the hawk.toml regex nit, then removed with no stated reason). Dropping the guard is likely correct per REVIEW.md ("Do not add tests to check dead code stays dead"), so the fix is just to update the Verification section — and optionally note why this sweep omits a guard where the sibling dead-symbols-*.test.ts files kept theirs.
Extended reasoning...
What the issue is
The tip commit of this PR is:
72cac7fa Delete test/internal/source-lints/dead-symbols-streams-http-misctools.test.ts
That file was added in e183b85, edited in c1758fb and 59bf369 (the latter narrowed the hawk.toml regex from /bun_platform|darwin::Category::/ to /darwin::Category::/ in response to the now-resolved inline review on this hunk), and then deleted entirely in 72cac7f with a bare commit message and no explanation in the PR body. Because it was added and deleted within the same PR, the file does not appear in the net diff at all.
However, the PR description's Verification section still says:
test/internal/source-lints/dead-symbols-streams-http-misctools.test.tspins everything above; all 40 content checks and 16 deleted-file checks fail against main and pass here.
And the robobun evidence block ("fails on main / passes on PR") shows that test running at commit 59bf369 — one commit before it was deleted. So both the Verification bullet and the evidence block now describe verification that no longer exists at tip.
Step-by-step proof
git log -- test/internal/source-lints/dead-symbols-streams-http-misctools.test.tsshows: added e183b85 → edited c1758fb → edited 59bf369 → deleted 72cac7f (tip).ls test/internal/source-lints/at tip: the file is absent, whiledead-symbols-install-sql-bindings.test.tsanddead-symbols-pub-exports-sweep.test.ts(from earlier sweeps) remain.- The PR description's Verification section (last bullet) and the robobun "fails on main" / "passes on PR" console blocks both name the deleted file and show it running at
59bf369d3. - Commit 72cac7f's message is bare ("Delete test/internal/source-lints/...") with no rationale, and the PR body was not updated after that commit.
Why the deletion itself is probably fine
REVIEW.md's Code style section says explicitly: "Do not add tests to check dead code stays dead." The guard test was doing exactly that (regex-matching source files to prevent reintroduction of removed symbols), so a maintainer deleting it is consistent with current review guidance. The two sibling dead-symbols-*.test.ts files predate that guidance and are not necessarily precedent to follow. The dead-code removals themselves are already verified by the build succeeding, cargo check on all targets, and the functional test suites listed in the Verification section — the guard test was belt-and-suspenders, not load-bearing.
Why it's still worth a comment
- The PR description is now factually incorrect about its own verification. A reviewer reading it would assume a 40-check + 16-deleted-file guard test exists and passed; it doesn't exist.
- The resolved inline review on this file ("drop the
bun_platform|half of the alternation") was addressed in 59bf369, but the entire file was then deleted in the very next commit — so the resolution is moot, and that's not obvious from the thread. - REVIEW.md also says "Every deletion needs a stated reason or replacement"; the deletion commit carries neither.
Impact
None at runtime — this is PR hygiene only. Nothing in the merged code would misbehave. Per the rubric, PR-description mismatches default to nit, and there is no indication the code (as opposed to the description) is wrong.
Fix
Update the PR description's Verification section to drop the last bullet about dead-symbols-streams-http-misctools.test.ts (and optionally the robobun evidence block, which is auto-generated and will refresh on the next push anyway). If the guard was dropped deliberately per the "do not add tests to check dead code stays dead" rule, a one-line note to that effect would explain the divergence from the two sibling dead-symbols-*.test.ts files that remain in the directory.
Scheduled dead-code sweep. Areas were chosen to avoid the 17 dead-code PRs currently open (#35437 through #38005): every file below was either untouched by those PRs or, where a file is shared, the hunks are different symbols (checked mechanically against the open PR diffs; the only shared removed lines are
level = "expect"style TOML boilerplate in unrelatedhawk.tomlblocks).Net: 47 files, about 2.7k lines removed; the only additions are the guard test, three one-line
#[cfg]/ import adjustments, and two doc-comment fixes for functions that went away.Removed
WebCore streams bindings (transferable streams were never implemented)
m_detachedbitfields onJSReadableStream,JSWritableStream,JSTransformStream: never read or written.$bunNativeType/$disturbedprivate-name accessors onReadableStream.prototype(4 getters/setters, their installs,m_nativeType, the reset inReadableStream__detach, the twoBunBuiltinNames.hentries andbuiltins.d.tsdeclarations): no builtin, C++ or test referenced either name.$bunNativePtris still used and stays.TextEncoder
TextEncoder::encode/encodeInto/EncodeIntoResultand theconvertDictionary<EncodeIntoResult>/convertDictionaryToJSspecializations (TextEncoder.h,TextEncoder.cpp,JSTextEncoder.h,JSTextEncoder.cpp): the wrapper implements both methods through the RustTextEncoder__encode*exports and only ever callsimpl.encoding(), which is all that is left of the impl class.node:crypto
JSKeyObject::createandJSKeyObject::subspaceForplus them_subspaceForJSKeyObject/m_clientSubspaceForJSKeyObjectslots: every key object is one of the three final subclasses, each of which defines its owncreate/subspaceFor; the base class is only used as a downcast target.switch (m_curve)block inCryptoKeyOKP::algorithm()(2023).Other bindings
WriteBarrierList::list(), theWeakRefFinalizeFntypedef inWeak.cpp,JSC_MAC_VERSION_TBA/JSC_IOS_VERSION_TBAinroot.h(unused by every JSC header in the WebKit builds we ship against).Bun__resolvehost export (bun_resolveinBunObject.rs+ theextern "C"declaration inImportMetaObject.h): nothing in C++ or JS called it; theBun__resolveSync*family is what is used.node:http (
src/js/node/_http_server.ts)kDeprecatedReplySymbolis a module-privateSymbol()ininternal/httpthat nothing ever sets on a response's options, so the constructor branch that installed the fetch-Responsebasedwrite/endwas unreachable. Removed it together with everything only it reached:ServerResponse_writeDeprecated,ServerResponse_finalDeprecated,ensureReadableStreamController,drainHeadersIfObservable,emitRequestCloseNT,GlobalPromise, and the now-unused imports (controllerSymbol,firstWriteSymbol,deferredSymbol,runSymbol,emitErrorNextTickIfErrorListenerNT). This also stops adding anundefined-valuedSymbol(deprecatedReply)own property to everyServerResponse.isNextIncomingMessageHTTPSsave/set/restore around request dispatch: the flag's only reader was removed in c4a937c, so the calls had no effect.cluster._getServerblock inServer.prototype.listen.Rust (cross-crate analysis with hawk per
tools/hawk/README.md, then each item re-checked withrg; callers were confirmed to be platform-gated, e.g.node_fsusessys_uvon Windows)bun_sys:link,fdatasyncand the non-Linuxsendfilestub (both the posix and Windows arms), the Windows arms offchown,chmod,chown,fsync,linkat,fchmodat,lchmod,lchown,futimens,lutimens,fcntl,socketpair, the WindowsName::as_zstr,c::kqueue/c::kevent/c::fork/c::fd_t,linux::Errno,darwin::OSLog::as_ptr, the non-macOSclonefilestub, the non-Windowsget_fd_path_wstub,posix::sysctlbyname(the typedsysctl_read*helpers stay),posix::write; and the two helpers that became unreferenced as a result,linux_syscall::write_rawand thesafe_libc::fdatasyncimport, pluswindows::timespec_to_filetime.Tag::futimensis now#[cfg(not(windows))]like the other tags whose only users are posix-side (the Windowscargo checkflagged it once its Windows user was gone).bun_lsquic_sys: theEnginewrapper (struct, impl,Drop),Conn::{raw, set_ctx, ctx, n_avail_streams, sockaddr, status},global_init,enable_logging,LSQVER_I001/I002, and thelsquic_conn_n_avail_streamsextern.node:quicdrives lsquic through the raw externs directly.bun_spawn_sys:PosixSpawnResult::closeand the non-Linuxpifd_from_pidstub (the only call site is Linux-gated). TheFdExtimport thatclosewas the last Windows user of is now#[cfg(unix)].bun_tcc_sys:State::runand thetcc_runextern.hawk.toml: the sixbun_platformdarwin::Category::*overrides, whose variants were deleted in Remove dead code from platform/darwin, webcrypto, sqlite, NodeVM, ast #36833 (hawk reports them asunknown_item).Orphaned files (zero references repo-wide, searched with
git grepincluding.github,.buildkite,.vscode,scripts/,packages/and the generatedbuild/debug/codegen/)misctools/gdb/std_gdb_pretty_printers.py(Zig standard-library pretty printers; the repo has no Zig left) and the.vscode/launch.jsonline that sourced it;misctools/mime.js(emitted a ZigComptimeStringMap; MIME types now come fromsrc/http_types/mime_type_list.txt);misctools/.gitignore(ignored outputs of Zig programs deleted long ago).patches/ncrypto.patch: a one-off diff against Node's ncrypto committed withnode:crypto: moveSignandVerifyto c++ #17692. Unlike every other file underpatches/, noscripts/build/deps/*.tsapplies it, andncrypto.cpp/.hhave changed many times since, so it no longer describes anything.meta.json(stray--metafileoutput committed in feat(build): add --metafile-md CLI option for LLM-friendly bundle analysis #26441),workspace.code-workspace(2021 single-folder VS Code workspace with Zig settings;.vscode/is the live config).src/jsc/bindings/v8-capture-stack-fixture.cjs,src/jsc/bindings/webcore/EventNames.in(WebKitmake_event_factory.plinput; Bun'sEventNames.his hand-written),src/runtime/ffi/libtcc1.a.macos-aarch64(superseded by the embeddedlibtcc1.c).src/runtime/bake/client/JavaScriptSyntaxHighlighterComponent.tsx(its header says the client never uses it) andJavaScriptSyntaxHighlighter.css, which only it imported. The liveJavaScriptSyntaxHighlighter.tsis untouched.packages/bun-release/scripts/npm-exec.ts(upload-npm.tsbundles onlynpm-postinstall.tsand ships placeholder bins),packages/bun-usockets/misc/{manual.md,gen_test_certs.sh,layout.png}andpackages/bun-usockets/module.modulemap(upstream leftovers, same class as thebun-uws/miscfiles removed in Remove dead code from bun-uws, the native BufferList class, and built-in JS #37659).Verification
rg/git grepfor every symbol and file name above acrosssrc/,scripts/,packages/,test/,vendor/WebKit/Source(for the C++ symbols) and freshly regeneratedbuild/debug/codegen/.dead_publicreport on this tree (release profile, all 11 shipped targets), filtered to items no open PR deletes; findings that are FFI struct fields, code tables, or API added in the last week were deliberately left alone.bun bdbuilds, and the removed symbols are absent from the resulting binary / bundled JS /generated_host_exports.rs.bun bd testpasses ontest/js/web/streams/streams.test.js,test/js/web/encoding/text-encoder.test.js,test/js/node/crypto/crypto.key-objects.test.ts,test/js/node/fs/fs.test.ts,test/js/bun/resolve/import-meta*.test.*andtest/js/node/quic/quic-stream.test.ts;test/js/node/http/node-http.test.tspasses except "request via http proxy, issue#4295", which fails identically with an unmodified bun in this container (ECONNREFUSED to its local proxy).cargo check --workspaceon the windows-msvc, darwin, freebsd, linux-musl, android and linux-gnu targets.test/internal/source-lints/dead-symbols-streams-http-misctools.test.tspins everything above; all 40 content checks and 16 deleted-file checks fail against main and pass here.Left alone (probably dead, not deleted)
src/simdutf_sys/simdutf.rs: the wholeutf32/ big-endian wrapper tree (~150 lines, plus its externs and the matching shims inbun-simdutf.cpp) has no callers, but Remove dead code from libuv_sys, cares_sys, simdutf FFI, test_runner, and C++ bindings #37332 is editing the same extern block; worth a follow-up once that lands. Same story for the unusedLoop/uv_stat_t/ReturnCodehelpers inlibuv_sys.src/js/internal/http.ts:kDeprecatedReplySymbol,controllerSymbol,runSymbol,deferredSymbol,firstWriteSymbolandget/setIsNextIncomingMessageHTTPSlost their last users in this PR, but Remove dead code from C++ bindings, src/js builtins, CSS, and Rust util crates #35437 rewrites that exact region of the file.JSCrossRealmTransformState(never created; its only references are itsFOR_EACH_WEB_STREAMS_INTERNAL_STRUCTUREentry and iso-subspace slots),CrossRealmTransform.cpp, and theSourceKind::CrossRealm/SinkKind::CrossRealmarms with theircaselabels. Remove dead code from libuv_sys, cares_sys, simdutf FFI, test_runner, and C++ bindings #37332 is already editing that cluster, so it is best removed as one unit once that lands.misctools/gen-unicode-table.ts+unicode-generator.tsemit Zig source, butsrc/bun_core/string/identifier.rsstill points at them as the generator to port;misctools/generate-cli-completions.ts+completions/bun-cli.jsonandcompletions/spec.yamlhave no in-repo consumers but may have external ones.src/runtime/bake/{incremental,memory}_visualizer.html(~800 lines): nothing serves them since the port, butDevServerstill carries the message writers and stubs, so this looks like an unfinished port rather than dead code.packages/bun-inspector-frontend(build script points at a path that no longer exists) andpackages/bun-build-mdx-rs(2024 proof of concept) are unreferenced but are a product call.bun_shim_impl::read_without_launchis the Windowsbunxfast path that nothing calls any more; deleting it would drop a feature rather than a leftover.[review] gate passed · iteration 1 · 47 files touched
fails on main (without fix)
passes on PR (with fix)
diff hotspot
gate history · 1 passed · 1 rejected · iteration 1
evidence per changed file