Skip to content

Remove dead code from the WebCore bindings, IDL converters, and Rust FFI wrappers - #38005

Open
robobun wants to merge 2 commits into
mainfrom
claude/farm/374e73f2/dead-code-webcore-idl-css-jsc
Open

Remove dead code from the WebCore bindings, IDL converters, and Rust FFI wrappers#38005
robobun wants to merge 2 commits into
mainfrom
claude/farm/374e73f2/dead-code-webcore-idl-css-jsc

Conversation

@robobun

@robobun robobun commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

Removes 1,501 lines of code nothing references (one line outside the new lint is modified, the tail of a macro list), across the WebCore/JSC C++ bindings, a few Rust FFI wrapper crates, and stale hawk.toml overrides. No behavior change: everything removed was either never compiled into anything, never instantiated, or written and never read.

How the candidates were found

  • Rust: the cross-crate hawk analysis configured in hawk.toml (release profile unioned over the 11 shipped targets) run against current main. Almost all of its 1218 dead_public findings sit in files that one of the open dead-code PRs already touches; those were left alone, and the remainder was re-checked with rg (hawk only analyzes the release profile, so e.g. ntstatus::ACCESS_DENIED, which has a debug-only reader, was kept).
  • C++: per-header pass over the bindings files not touched by any open dead-code PR, looking for the things the earlier linker-based sweep (Remove dead code from node:crypto bindings, JSC/WebCore bindings, uSockets, and llhttp #37454) cannot see: declarations without definitions, header-only templates and specializations nothing instantiates, enumerators, macros, and preprocessor branches that can never be taken. Every candidate was checked with rg across src/, packages/, scripts/, test/ and freshly regenerated build/debug/codegen/, and symbol by symbol against the diffs of the open PRs that touch the same files (no overlap; JSDOMConvert.h is also touched by Remove dead code from webcore bindings, watcher, node-fallbacks, and misc crates #37062, on a different include line).
  • src/js/ was scanned as well and is clean (oxlint's unused checks keep it that way); nothing from there is in this PR.

Removed

ENABLE(BINDING_INTEGRITY) scaffolding in 19 generated-style bindings (536 lines)
JSAbortController, JSAbortSignal, JSBroadcastChannel, JSCloseEvent, JSCustomEvent, JSDOMFormData, JSDOMURL, JSMessageChannel, JSMessageEvent, JSMessagePort, JSPerformanceMark, JSPerformanceObserver, JSPerformanceObserverEntryList, JSPerformanceServerTiming, JSPerformanceTiming, JSTextEncoder, JSWebSocket, JSWorker, JSSubtleCrypto (.cpp). The RELEASE_ASSERT(actualVTablePointer == expectedVTablePointer) these blocks exist for has been commented out since the files were imported, so the file-scope block only declared an unused _ZTV... vtable symbol and the if constexpr (std::is_polymorphic_v<T>) body in toJSNewlyCreated was empty after preprocessing (its only remaining statement sits under PLATFORM(WIN), which is never true in a BUILDING_JSCONLY__ build). JSURLPattern.cpp still performs the check and is untouched; JSFetchHeaders.cpp / JSPerformance.cpp have the same blocks but are claimed by open PRs.

IDL conversion layer (webcore/JSDOMConvert*.h)

  • JSDOMConvertPromise.h (whole file) and its include in JSSubtleCrypto.cpp: every toJS<IDLPromise<...>> call there passes a void-returning functor, which JSDOMConvertBase.h short-circuits without instantiating the converter; Converter<IDLPromise> had no callers. Cascade: DOMPromise::create(), promise() and the constructor in JSDOMPromise.h (only the static whenPromiseIsSettled remains in use).
  • JSDOMConvertNull.h (whole file) and its includes in JSDOMConvert.h / JSDOMConvertUnion.h: no union names IDLNull, and ConditionalConverter<.., IDLNull, false> never touches the converter.
  • Converter/JSConverter for IDLFloat and IDLUnrestrictedFloat (codegen only emits the double variants), JSConverter<IDLByteString>, JSConverter<IDLObject>, JSConverter<IDLAtomStringAdaptor<T>>, both IDLRequiresExistingAtomStringAdaptor<T> converters, both IDLCallbackInterface<T> converters, JSConverter<IDLCallbackFunction<T>> and the two-argument Converter<IDLCallbackFunction<T>>::convert overload (the one live caller, JSPerformanceObserver.cpp, uses the global-object overload), the UncachedString / OwnedString overloads of the DOMString / USVString converters (nothing constructs those adaptors), and VariadicConverter<IDLAny> / VariadicConverter<IDLInterface<T>> (their consumer, convertVariadicArguments, lives in a header nothing includes).
  • CastedThisErrorBehavior::ReturnEarly (JSDOMCastThisValue.h).

Other JSC / WebCore binding helpers

  • WTF::EnumTraits<HTTPHeaderName> (98 lines) and EnumTraits<ExceptionCode>: EnumTraits<E>::values is only consumed by EnumeratedArray, OptionSet and isZeroBasedContiguousEnum, none of which is used with either enum.
  • ExceptionOr<T&> (never instantiated), the isolatedCopy(ExceptionOr<void>&&) / isolatedCopy(Exception&&) free functions (crossThreadCopy uses the member), ExceptionOr::m_wasReleased, Exception::extra().
  • Opaque roots: the ImplType* / ImplType& forwarding overloads of addWebCoreOpaqueRoot, all three containsWebCoreOpaqueRoot overloads, the nullptr_t constructor, and the root(MessagePort*) / root(CryptoKey*) functions only those overloads could reach (plus the includes / forward declarations that existed for them). The one live user, JSAbortController, passes a WebCoreOpaqueRoot value.
  • BunCommonStrings.h: ConnectionWasClosed, OperationFailed, OperationTimedOut, ec, ed25519, rsa, rsaPss, jwkDsa, jwkG, systemError, x25519 (each one expands to a LazyProperty, accessor, initializer and GC visit; the http* entries are reached via token pasting and stay).
  • EventLoopTask(Function<void()>&&) (every construction site passes a Function<void(ScriptExecutionContext&)>), m_bakeGetAsyncLocalStorage (initialized and visited, never read) and a duplicate LazyPropertyOfGlobalObject alias in BakeAdditionsToGlobalObject.h.
  • Enumerators nothing names: six of TaskSource (only PostedMessageQueue / WebSocket are used), eight of EventListener::Type (JSEventListener is the only subclass).
  • Branches that can never be taken: #if 1 ... #else in CryptoAlgorithmRSA_PSSOpenSSL.cpp, #if ENABLE(OFFSCREEN_CANVAS) / #if ENABLE(MEDIA_SOURCE) includes of headers that do not exist in this tree (JSEventTargetCustom.cpp, JSDOMURL.cpp).
  • Declarations with no definition: CryptoKeyOKP::platformExportSpki / platformExportPkcs8, SecretKeyJobCtx::result(), KeyPairJobCtx::deinit(), and the never-defined template<typename Visitor> visitChildren declarations next to DECLARE_VISIT_CHILDREN in JSNodePerformanceHooksHistogram.h and JSX509Certificate.h.
  • Unreferenced accessors / fields / macros: JSNodePerformanceHooksHistogram::histogram() (+ a commented-out declaration), NodeVMSourceTextModule::cachedExecutable(), Worker::isOnline(), OnLoadResult::wasMock and its one store, JSOneShotDirectSink::m_asUint8Array and its one store (the flag reaches JS through startOptions), expectedEnumerationValues<BufferEncodingType> (no IDLEnumeration<BufferEncodingType> anywhere), G_FALSE / G_TRUE in SecretsLinux.cpp, BUN_WRAP_FWD_VOID in workaround-missing-symbols.cpp.

Rust

  • bun_mimalloc_sys: Heap::malloc / calloc / realloc and the mi_heap_calloc / mi_heap_realloc imports only they used (callers go through the raw mi_heap_* functions with a *mut Heap; MimallocArena deliberately never hands out a &Heap).
  • bun_libdeflate_sys: Compressor::destroy / Decompressor::destroy (the RAII wrappers free directly).
  • bun_uws_sys: App::run, App::listen and the uws_app_run / uws_app_listen imports behind them (the server listens through listen_with_config), uws_app_listen_config_t::new, and a duplicate NewApp alias in App.rs (the live one is in lib.rs).
  • bun_css: DeclarationContext::Keyframes, and the empty generated_color_conversions marker module whose use no longer exists.

hawk.toml: 13 overrides for mysql::status_flags::StatusFlag::* variants that #37229 deleted; hawk now reports them as unknown_item. (The six bun_platform ones in the same state are removed by #37328.)

test/internal/source-lints/dead-symbols-binding-integrity-idl-convert.test.ts pins the removed symbols so they cannot quietly come back; it fails on main and passes here.

Verification

  • bun bd (full debug/ASAN build) passes with the removals; the new source lint fails with src/ reset to main and passes on the branch; bun bd test test/internal/source-lints/ passes (87 tests).
  • bun bd test passes on test/js/web/abort/abort.test.ts, workers/{message-channel,message-event,performance-observer-leak}.test.ts, encoding/text-encoder.test.js, html/FormData.test.ts, url/url.test.ts, broadcastchannel/broadcast-channel.test.ts, crypto/web-crypto.test.ts, streams/streams.test.js, test/js/node/perf_hooks/perf_hooks.test.ts, test/js/bun/perf_hooks/histogram.test.ts, test/js/node/crypto/x509.test.ts, test/js/node/zlib/zlib.test.js, test/js/bun/test/mock/mock-module.test.ts, and on everything in test/js/web/websocket/websocket.test.js, test/js/node/crypto/crypto.key-objects.test.ts, test/js/bun/css/color.test.ts and test/js/web/workers/worker.test.ts except for tests that need the public internet or that spawn subprocesses and time out at their 5 s budget on this (heavily loaded) machine; the seven worker.test.ts terminate() tests fail identically on a debug build with src/jsc reset to main, and the other timeouts hit a different subset on every run.
  • Rust: cargo check of the touched crates passes; the removed items had no readers in any cfg (hawk unions all 11 targets, and the rg checks are cfg-agnostic), so the per-target cargo check pass is left to CI.

Left alone on purpose (follow-ups, not in this diff)

  • WorkerMessagingProxy::isOnline() is now unreferenced, but that header is touched by Remove dead code from libuv_sys, cares_sys, simdutf FFI, test_runner, and C++ bindings #37332 on the neighbouring lines.
  • StringAdaptors.h (UncachedString / OwnedString) has no remaining construction sites, but IDLTypes.h (claimed by an open PR) still names the types.
  • The TextCodec::encode side of the text codecs (~700 lines across TextCodecCJK / TextCodecSingleByte / TextCodecUserDefined / UnencodableHandling.h) is only reachable from TextEncoding::encodeForURLParsing, which has no callers; TextEncoding.h/.cpp are claimed by Remove dead code from libuv_sys, cares_sys, simdutf FFI, test_runner, and C++ bindings #37332, so this should go in one piece once that lands.
  • DOMPromise / JSDOMPromise.cpp as a whole become dead once Remove dead code from webcore bindings, watcher, node-fallbacks, and misc crates #37062 removes DeferredPromise::whenSettled.
  • hawk also flags bun_install::read_without_launch (the shell-side .bunx fast path, whose caller was not carried over in the Rust port), a handful of bun_jsc helpers added four days ago in 9d519e8 (JSPromise settle_task / resolve_task, VM::has_termination_request, LoopHandle::accepting_work / ref_keep_alive / unref_keep_alive, job.rs accessors), and bun_sys::ErrorCase::LeakFdOnFail; these look like API surface still settling rather than leftovers, so they are not touched here.

…FFI wrappers

Drops the inert ENABLE(BINDING_INTEGRITY) scaffolding from 19 generated-style
bindings (the vtable check it existed for has been commented out since the
files were imported), the EnumTraits tables for HTTPHeaderName and
ExceptionCode, IDL converter specializations nothing instantiates
(JSDOMConvertPromise.h and JSDOMConvertNull.h go away entirely),
ExceptionOr<T&>, the unused opaque-root helpers, and a number of
declarations, enumerators, macros and never-taken preprocessor branches in
the JSC bindings.

On the Rust side removes the unreachable Heap methods in bun_mimalloc_sys,
Compressor/Decompressor::destroy in bun_libdeflate_sys, App::run/listen and
their imports in bun_uws_sys, and two bun_css leftovers, plus 13 hawk.toml
overrides for StatusFlag variants that no longer exist.

A source lint pins the removed symbols.
@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 14 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 6a0cfe01-fc7a-40d5-bcd0-7fcb16b6fa71

📥 Commits

Reviewing files that changed from the base of the PR and between f1b3a92 and 5f986e2.

📒 Files selected for processing (71)
  • hawk.toml
  • src/css/context.rs
  • src/css/values/color_generated.rs
  • src/jsc/bindings/BakeAdditionsToGlobalObject.h
  • src/jsc/bindings/BunCommonStrings.h
  • src/jsc/bindings/EventLoopTask.h
  • src/jsc/bindings/Exception.h
  • src/jsc/bindings/ExceptionCode.h
  • src/jsc/bindings/ExceptionOr.h
  • src/jsc/bindings/JSBufferEncodingType.cpp
  • src/jsc/bindings/JSBufferEncodingType.h
  • src/jsc/bindings/JSNodePerformanceHooksHistogram.h
  • src/jsc/bindings/JSX509Certificate.h
  • src/jsc/bindings/ModuleLoader.cpp
  • src/jsc/bindings/ModuleLoader.h
  • src/jsc/bindings/NodeVMSourceTextModule.h
  • src/jsc/bindings/SecretsLinux.cpp
  • src/jsc/bindings/WebCoreOpaqueRoot.h
  • src/jsc/bindings/WebCoreOpaqueRootInlines.h
  • src/jsc/bindings/node/crypto/CryptoGenKeyPair.h
  • src/jsc/bindings/node/crypto/CryptoKeygen.h
  • src/jsc/bindings/webcore/EventListener.h
  • src/jsc/bindings/webcore/HTTPHeaderNames.h
  • src/jsc/bindings/webcore/JSAbortController.cpp
  • src/jsc/bindings/webcore/JSAbortSignal.cpp
  • src/jsc/bindings/webcore/JSBroadcastChannel.cpp
  • src/jsc/bindings/webcore/JSCloseEvent.cpp
  • src/jsc/bindings/webcore/JSCustomEvent.cpp
  • src/jsc/bindings/webcore/JSDOMCastThisValue.h
  • src/jsc/bindings/webcore/JSDOMConvert.h
  • src/jsc/bindings/webcore/JSDOMConvertAny.h
  • src/jsc/bindings/webcore/JSDOMConvertCallbacks.h
  • src/jsc/bindings/webcore/JSDOMConvertInterface.h
  • src/jsc/bindings/webcore/JSDOMConvertNull.h
  • src/jsc/bindings/webcore/JSDOMConvertNumbers.h
  • src/jsc/bindings/webcore/JSDOMConvertObject.h
  • src/jsc/bindings/webcore/JSDOMConvertPromise.h
  • src/jsc/bindings/webcore/JSDOMConvertStrings.h
  • src/jsc/bindings/webcore/JSDOMConvertUnion.h
  • src/jsc/bindings/webcore/JSDOMFormData.cpp
  • src/jsc/bindings/webcore/JSDOMPromise.h
  • src/jsc/bindings/webcore/JSDOMURL.cpp
  • src/jsc/bindings/webcore/JSEventTargetCustom.cpp
  • src/jsc/bindings/webcore/JSMessageChannel.cpp
  • src/jsc/bindings/webcore/JSMessageEvent.cpp
  • src/jsc/bindings/webcore/JSMessagePort.cpp
  • src/jsc/bindings/webcore/JSPerformanceMark.cpp
  • src/jsc/bindings/webcore/JSPerformanceObserver.cpp
  • src/jsc/bindings/webcore/JSPerformanceObserverEntryList.cpp
  • src/jsc/bindings/webcore/JSPerformanceServerTiming.cpp
  • src/jsc/bindings/webcore/JSPerformanceTiming.cpp
  • src/jsc/bindings/webcore/JSTextEncoder.cpp
  • src/jsc/bindings/webcore/JSWebSocket.cpp
  • src/jsc/bindings/webcore/JSWorker.cpp
  • src/jsc/bindings/webcore/MessagePort.cpp
  • src/jsc/bindings/webcore/MessagePort.h
  • src/jsc/bindings/webcore/TaskSource.h
  • src/jsc/bindings/webcore/Worker.h
  • src/jsc/bindings/webcore/streams/BunStreamConsumers.cpp
  • src/jsc/bindings/webcore/streams/JSOneShotDirectSink.h
  • src/jsc/bindings/webcrypto/CryptoAlgorithmRSA_PSSOpenSSL.cpp
  • src/jsc/bindings/webcrypto/CryptoKey.cpp
  • src/jsc/bindings/webcrypto/CryptoKey.h
  • src/jsc/bindings/webcrypto/CryptoKeyOKP.h
  • src/jsc/bindings/webcrypto/JSCryptoKey.cpp
  • src/jsc/bindings/webcrypto/JSSubtleCrypto.cpp
  • src/jsc/bindings/workaround-missing-symbols.cpp
  • src/libdeflate_sys/libdeflate.rs
  • src/mimalloc_sys/mimalloc.rs
  • src/uws_sys/App.rs
  • test/internal/source-lints/dead-symbols-binding-integrity-idl-convert.test.ts

Comment @coderabbitai help to get the list of available commands.

@robobun

robobun commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator Author
Updated 1:05 AM PT - Aug 13th, 2026

@autofix-ci[bot], your commit 5f986e2 has some failures in Build #93944 (All Failures)


🧪   To try this PR locally:

bunx bun-pr 38005

That installs a local version of the PR into your bun-38005 executable, so you can run:

bun-38005 --bun

@robobun

robobun commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator Author

Status (head 5f986e2): ready for a maintainer. Build 93944 finished with every job that ran green; its only red marks are the four darwin test shards, which never ran (macOS queue backlog, details below), so I am not retriggering.

  • 5f986e2 is autofix.ci re-wrapping three long lines in the new lint; the src/ and hawk.toml changes are exactly those of 1c704c7 (clang-format and rustfmt had nothing to fix).
  • The diff is -1501/+1 in src/ and hawk.toml plus the new source lint (test/internal/source-lints/dead-symbols-binding-integrity-idl-convert.test.ts), which fails with src/ at main and passes here. The description lists every removed item and how each was verified.
  • Overlap with open PRs: every file touched here was checked against the open removal PRs at the symbol level; nothing removed here is removed by any of them (the one shared file, JSDOMConvert.h, loses a different include line in Remove dead code from webcore bindings, watcher, node-fallbacks, and misc crates #37062, and Remove dead code from C++ bindings, bindgen glue, ast, and orphaned scripts #37149 removes a different EnumTraits specialization).
  • Automated reviews: claude[bot] found no bugs and left two questions for a human (answered in a comment below as well); CodeRabbit has been rate-limited on this PR so far. No open threads. On the two questions:
  • CI (build 93944, finished): 177 of 177 jobs that ran passed, including all 13 build-bun lanes (darwin, FreeBSD, Linux glibc/musl/Android/ASAN, Windows x64 and aarch64), which covers every target the Rust removals could affect. The two test files Buildkite lists as flaky (bun-lockb.test.ts, a Verdaccio start-up timeout on debian aarch64; web-crypto.test.ts and malformed-integrity-base64.test.ts, which failed only inside a parallel batch) passed on retry and are outside this diff (web-crypto.test.ts also passes locally against the debug build). The four darwin test shards are the build's only red marks and none of them executed: the two darwin 26 aarch64 shards were canceled two minutes after becoming runnable without an agent, and the two darwin 14 aarch64 shards expired after five hours in the queue. At the time of writing the test-darwin queue has about 500 jobs waiting on ten busy arm64 slots (two latest, eight previous), so a re-push would expire the same way; nothing in this diff is platform-specific (the darwin build lane passed and the Linux test lanes ran everything), so I am leaving it as is. If a darwin run is wanted before merging, retrying those four jobs once the queue drains is the cheap option.
  • Local verification is in the description: full bun bd passes, the listed test files pass, and the only local failures were subprocess tests timing out on a heavily loaded machine (the seven worker.test.ts terminate() tests fail identically on a debug build with src/jsc reset to main).

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed this PR and didn't find any bugs. Because it removes ~1,500 lines across 71 files in core JSC/WebCore bindings and IDL converter templates, a human look would still be worthwhile before landing.

What was reviewed:

  • Confirmed toJS<IDLPromise<...>> in JSSubtleCrypto short-circuits on void functors (JSDOMConvertBase.h:180/210), so removing JSDOMConvertPromise.h is safe.
  • Confirmed IDLNull remains defined in IDLTypes.h and ConditionalConverter<.., IDLNull, false> in JSDOMConvertUnion.h never touches the removed converter.
  • Confirmed jsFunctionBakeGetAsyncLocalStorage is still reached via $newCppFunction in BakeSSRResponse.ts; only the never-read m_bakeGetAsyncLocalStorage LazyProperty was dropped.
  • Spot-checked AbortController::opaqueRoot() returns WebCoreOpaqueRoot by value (matches the sole remaining overload), and that OnLoadResult::wasMock, m_asUint8Array, DeclarationContext::Keyframes, and the removed BunCommonStrings entries have no remaining readers (including via token pasting / codegen).
Extended reasoning...

Overview

This PR removes ~1,501 lines of unreferenced code across 71 files: inert ENABLE(BINDING_INTEGRITY) scaffolding in 19 generated-style WebCore binding .cpp files, unused IDL converter template specializations (JSDOMConvert*.h), EnumTraits tables, opaque-root helper overloads, unused BunCommonStrings entries, declarations without definitions, unreferenced accessors/fields, dead Rust FFI wrappers in mimalloc_sys/libdeflate_sys/uws_sys, one CSS enum variant, and stale hawk.toml overrides. The only non-deletion is the trailing-comma fix on the last macro entry in BunCommonStrings.h. A new source-lint test pins every removal.

Security risks

None identified. This is pure removal of never-instantiated templates, never-called functions, never-read fields, and preprocessor-dead branches. No control flow, validation, or crypto logic is altered — the RSA-PSS change just unwraps #if 1, and the OpaqueRoot removals leave the one live addWebCoreOpaqueRoot(Visitor&, WebCoreOpaqueRoot) overload intact.

Level of scrutiny

Medium-high. While every individual removal is mechanical and the compiler/linker would catch most mistakes, the change spans template-heavy IDL converters (where a missing specialization surfaces as a confusing instantiation error only when someone later adds a caller), GC opaque-root machinery, and struct-layout-affecting field removals (JSOneShotDirectSink::m_asUint8Array, OnLoadResult::wasMock). The PR description is unusually thorough — every removal is enumerated with its verification method (rg across src/packages/scripts/test/codegen, hawk cross-crate analysis, checked against open PRs). I spot-checked the four riskiest claims (IDLPromise void short-circuit, IDLNull in unions, the Bake LazyProperty, opaque-root overload resolution) and all held.

Other factors

The PR includes a source-lint test that fails on main and passes here, and the description reports a full bun bd build passing plus targeted test runs. CI is still building (#93944). I'm deferring rather than approving because 71 files across core JSC bindings is above my comfort threshold for auto-approval — a maintainer may also want to weigh in on whether any of the removed IDL converter specializations or common strings were intentionally staged for near-term work, and whether the coordination with the several open dead-code PRs (#37062, #37149, #37229, #37328, #37332) is as claimed.

@robobun

robobun commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks for the pass. On the two points left for a human:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants