Skip to content

Remove dead code from js_printer, bun_io, and UpdateRequest - #44293

Open
robobun wants to merge 1 commit into
mainfrom
robobun/9eff59ee/dead-code-sweep
Open

robobun wants to merge 1 commit into
mainfrom
robobun/9eff59ee/dead-code-sweep

Conversation

@robobun

@robobun robobun commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Behaviour change: none

Problem

  • 3 files hold code that has a textual user but cannot run. Example: print_internal_bun_import in src/js_printer/lib.rs has three None arms, and its one caller passes Some(b"globalThis.Bun").
  • The lints do not report it. rustc's dead_code counts a forwarded argument, a flag test and a match arm as a use. mordant has no finding for these files.

Fix

  • Remove 3 groups: 104 lines removed, 19 added (proofs in the Notes).
  • Each proof is local: a parameter with one value at its one call site, or a flag that nothing sets.
  • Verified: bun bd, bun run rust:check-all (12 targets), 8 more cargo check configurations, 7 test files (Notes).
  • Self-reviewed: 11 concerns raised, 9 addressed. Rejected: a .text size estimate (not measured) and two origin pull requests that git log -S does not confirm.

Background

  • print_internal_bun_import prints an import ... from "bun" statement as a read of globalThis.Bun, when the printer targets Bun.
  • bun_io::Poll is the epoll request of the I/O thread on Linux. FilePoll, the event-loop poll, has its own Flags set.
  • UpdateRequest::parse reads the package arguments of bun add, bun remove and bunx.
  • Left out: 11 verified groups that overlap an open pull request, and findings that read as staged work or a bug (Notes).

Downsides

  • None found for users. No removed name has a user in src/, packages/, scripts/ or the generated code, on 12 targets.
  • 8 open pull requests get more conflicted files. Each already conflicts with main. None that merges cleanly today gains a conflict.
Notes

Removed, one group each

# File Removed Proof
1 src/js_printer/lib.rs The three None arms in print_internal_bun_import. The parameter is &'static [u8] now. One caller, print_global_bun_import_statement, which passes Some(b"globalThis.Bun"). The two names have 4 hits in the tree together, all in this file. git log -S shows no None caller since the Rust port (#30412). The printed bytes are the same.
2 src/io/lib.rs bun_io::Flags::{PollProcess, Process, NeedsRearm}, the Process pattern, the NeedsRearm test and removal, and a match that mapped PollReadable and PollWritable to themselves. Both callers of Poll::register_for_epoll pass PollReadable or PollWritable. Nothing inserts the three flags, and git log -S shows no setter since the Rust port. The first match flag still stops on any other flag. The flag set has no repr and is not stored. The one cast is flag as u8 in a log line, which prints 0 or 1 as before. posix_event_loop::Flags has members with the same three names. They have users and stay.
3 src/install/PackageManager/UpdateRequest.rs The fatal parameter of parse_with_error, the two else branches, and a comment that names from_js. One caller, UpdateRequest::parse, which passes true. #39420 deleted update_request_jsc.rs, which held from_js, the one caller that passed false.

Left in the same functions

Verification

All on the final commit, rebased on 2722608.

  • bun bd passes.
  • bun run rust:check-all: 12 ok, 0 failed.
  • 8 more cargo check --workspace configurations pass: the host with --all-targets, then Linux, Windows and macOS with --cfg=bun_asan --cfg=bun_debug --cfg=socket_fault_injection, the same three in the release profile with --cfg=bun_codegen_embed, and bun_shim_impl with --features shim_standalone.
  • cargo clippy --no-deps for bun_io, bun_js_printer and bun_install reports nothing.
  • cargo fmt --all --check: no change.
  • Tests with the debug build: test/cli/install/bun-add.test.ts (71 pass), test/bundler/transpiler/runtime-transpiler.test.ts (15), test/bundler/transpiler/transpiler.test.js (237), test/js/bun/io/bun-write.test.js (86) and test/js/bun/spawn/spawn-streaming-stdout.test.ts (1), all with no failure.
  • test/js/bun/spawn/spawn.test.ts: the first run had 4 tests that stopped at the 5 s timeout, while the load average of the machine was above 400. The second run passed (177 and 178 pass, 0 fail). The file does not reach the changed code.
  • test/cli/install/bunx.test.ts: 33 pass, 1 fail. The failure is should set "npm_config_user_agent" to bun: the test expects bun/1.4.3-debug (Bun.version of a debug build) and the user agent says bun/1.4.3. This change touches neither string. The test was not run on a debug build of main.
  • A probe with five forms of import ... from "bun" (default, namespace, named, default with named, bare) prints the same values with the debug build and with the released bun. The runtime transpiler prints a var declaration that reads globalThis.Bun for each form.
  • test/internal/source-lints/: 170 pass, 0 fail.
  • Not built here: macOS, Windows, FreeBSD. For those, cargo check covers the Rust code.
  • Binary size: not measured. The change removes code from three functions and adds none.

Self-review

  1. spawnSync: release polls and keep-alives on the loop they counted on #40078 merges cleanly again and would conflict with two Flags::Closed hunks. The hunks are out.
  2. The base was 17 commits behind main. The branch is rebased, and each check ran again.
  3. one_shot and Flags::OneShot are dead by the same proof. They are listed above with the reason they stay.
  4. The from_js comment in UpdateRequest.rs was stale. It is removed.
  5. Name the pull requests that orphaned the code. Remove dead code from react_compiler, the WebCore/IDL bindings, install_jsc, node-fallbacks, and misc crates #39420 is named. Rejected for Remove ~39k lines of dead Rust across the workspace #35002 and Remove dead code from napi/NodeVM C++, zlib, io event-loop, net.ts #36742: git log -S shows no link to the three groups that are left.
  6. The title did not match the final cut. Fixed.
  7. "No cast" was wrong, because flag as u8 is a cast. The table says so now.
  8. The Valkey row named the wrong pull request. redis: send percent-decoded URL credentials byte for byte #41795 removes connection_strings.
  9. Findings that are bugs were listed as residue. They have their own list now, with the pull request that fixes each one.
  10. "No lint reports them" was vague. The Problem section names the two lints.
  11. Give a .text size estimate. Rejected: no release build was made here, so there is no number.

Open pull requests

Applied, compiled on 12 targets, then taken out

The first version of this change had 26 files and removed 708 lines. bun run rust:check-all passed for it, and so did 13 test files. 11 groups are out because an open pull request removes, rewrites or uses the same code:

Group Lines Open pull request
migrate_yarn_lockfile: the locals package_dependents, usage_count, scoped_count, created_packages, and VersionInfo.yarn_idx (src/install/yarn.rs) 112 #39001 and #37244 remove or rewrite the same lines
11 arms of tag_print_help, pm_print_help, Tag::UpdateInteractiveCommand (src/runtime/cli/mod.rs) 86 #39487 rewrites two of the arms and calls pm_print_help
ValkeyClient.connection_strings and 8 parameters nothing reads (src/runtime/valkey_jsc) 91 #41795 removes connection_strings, #40139 rewrites the three files
NodeFS::watch_file and the Result of StatWatcher::init (src/runtime/node) 48 #40200 and #40420 rewrite the watcher modules
RmState::ParseOpts.wait_write_err, RmState::Err, DirTask.deleting_after_waiting_for_children (src/runtime/shell/builtin/rm.rs) 43 #40033, #32278 and #39225
Linker::generate_import_path(use_hashed_name) and intern (src/bundler/linker.rs) 31 #38123 removes the same parameter
Parser.jsobjs, JSValueRaw, Lexer.delimit_quote (src/shell_parser) 29 #43861, #43921 and #43922
The Result of changed_files_filter::filter, Scanner.exclusion_names (src/runtime/cli/test) 28 #42810 and #36865
The Arena in Glob::__scan and 3 parameters (src/runtime/api/glob.rs) 27 #33181 and #41930
ByteStream.pending_buffer, FileReader.pending_view (src/runtime/webcore) 26 #40411 removes both fields
One test and one removal of Flags::Closed in the POSIX FilePoll (src/io/posix_event_loop.rs). Only the Windows FilePoll inserts the flag. 6 #40078 changes the same lines

Two more were applied and taken out in review, not for an open pull request. src/runtime/api/bun/Terminal.rs: the signal argument of the exit callback is always null, and bun.d.ts calls it reserved. src/runtime/shell/builtin/which.rs: the removal of two fallbacks needs an expect in their place.

How the candidates were found

  • The search was for code that has a textual user but cannot run. Earlier sweeps removed the items with no reference at all, and the tools for that class report nothing new. mordant lists 170 unused_pub items: each is in an open pull request, or is an entry of an OS constant table that earlier sweeps kept.
  • 35 areas of src/ and scripts/ were read for 8 classes: a parameter with one value at each call site, a variant with no constructor, a field or local with no reader, a branch behind a constant, a dead chain behind one of those, a trait method with no caller, a duplicate item, and the same in TypeScript. A second reading tried to refute each finding. 366 findings passed, 9 did not.
  • A scan of all 1,540 Rust files with syn gave a second list (variants with no constructor by name, parameters with one literal value, fields with no read). Most of its hits were false: a derive, a string map or FFI builds the variant.
  • Each finding in this change was then applied, read again in the diff, and compiled.

Findings that are a bug, not residue

Each has a reproduction with the released bun, and an open pull request already covers each one.

Found and left in place

Read twice, not compiled, and not verified further. One finding of this kind did not hold when it was run: fs.promises.readdir with recursive does honour encoding: "buffer". The line counts are estimates of the readers. The 44 findings of 60 lines or more:

Lines (estimate) Main file Symbols Why it is not in this change
800 src/react_compiler/validation/validate_no_set_state_in_effects.rs (+10) validate_no_set_state_in_effects, validate_no_jsx_in_try_statement, validate_static_components (+5 config flag... port of an upstream, can be staged work
300 src/runtime/shell/interpreter.rs (+9) bun_shell_parser::ast::Expr::Async / ExprTag::Async, shell::states::r#async::Async (+AsyncState, NextAction, r... needs a decision
250 src/js/node/repl.js (+4) sendInspectorCommand success callbacks, getInputPreview, inputPreviewCallback body, isInStrictMode, getGlobalL... port of an upstream, can be staged work, removes a side effect or an error exit, needs a decision
225 src/crash_handler/lib.rs (+3) bun_core::debug::SymbolInfo::source_location, bun_core::debug::SourceLocation, crash_handler print_line_from_f... can be staged work, needs a decision
220 src/react_compiler/program.rs (+8) Host::scope_for_loc, push_scope/pop_scope/current_scope/scope_stack on HirBuilder, CaptureWalker, ContextIdent... port of an upstream, can be staged work
210 src/bundler/options.rs (+7) options::ImportPathFormat, Linker::link<IGNORE_RUNTIME, IS_BUN>(.., origin, import_path_format), Linker::gener... not reached in this run
190 src/resolver/lib.rs (+6) bun_resolver fs::read_file_with_handle_impl<USE_SHARED_BUFFER, STREAM>(size_hint, ..), fs::read_file_contents,... can be staged work, needs a decision
180 src/runtime/test_runner/pretty_format.rs (+2) JestPrettyFormat::format params vals/len (always exactly 1 value), pretty_format::Formatter::remaining_val... not reached in this run
170 src/runtime/bake/client/JavaScriptSyntaxHighlighter.ts DraculaSyntaxHighlighter: '<' and '>' arms of lexPunctuator, isInJSXTag, isJSXTagStart, isInGenericType, htmlT... needs a decision
160 src/sql_jsc/mysql/JSMySQLQuery.rs (+13) createQuery columns argument -> QueryCtorArgs.columns, columns cached slot, columns_value plumbing, QueryBin... not reached in this run
141 src/runtime/api/bun/subprocess/Readable.rs (+2) Readable::Memfd (api/bun/subprocess), Stdio::take_memfd, bun_jsc::ArrayBuffer::to_js_buffer_from_memfd, ArrayB... can be staged work
140 src/react_compiler/codegen.rs (+5) Environment.hook_guard_name, maybe_wrap_hook_call, is_hook_identifier, wrap_hook_call_with_guard, create_funct... port of an upstream
135 src/css/css_parser.rs (+6) AtRuleParser::{parse_block, rule_without_block}, QualifiedRuleParser::{parse_prelude, parse_block}, Declaratio... port of an upstream
135 src/css/css_parser.rs (+1) CustomAtRuleParser::{Prelude, parse_prelude, rule_without_block, parse_block}, BundlerAtRuleParser impls of th... port of an upstream, can be staged work, needs a decision
135 src/react_compiler/hir/mod.rs (+10) InstructionValue::{TypeCastExpression,JSXText}, Terminal::Unsupported, AliasingEffectConfig::{Impure,MutateTra... port of an upstream, can be staged work
125 src/css/rules/mod.rs (+7) MinifyOptions.unused_symbols, MinifyContext.unused_symbols, PropertyHandlerContext.unused_symbols, parent_is_u... port of an upstream, can be staged work
123 src/runtime/api/bun/spawn/stdio.rs (+2) Stdio::as_spawn_option file-backed-Blob branch, stdio::ToSpawnOptsError (+ to_str, throw_js), stdio::ResultT, ... can be staged work, needs a decision
120 src/js_parser/visit/mod.rs (+5) P::keep_expr_symbol_name, P::maybe_keep_expr_symbol_name, VisitDeclOpts::was_anonymous_named_expr can be a bug or a missing feature, can be staged work, removes a side effect or an error exit, needs a decision
120 src/runtime/test_runner/pretty_format.rs (+2) pretty_format::FormatOptions {enable_colors, add_newline, flush, quote_strings}, const ENABLE_ANSI_COLORS on p... not reached in this run
115 src/ast/lib.rs bun_ast::StringBuilder (stub), Location/Data/Msg::count, Location/Data/Msg::clone_with_builder, if recycled ... not reached in this run
115 src/bun_alloc/lib.rs (+2) bun_alloc::MaxHeapAllocator, MaxHeapScope, MaxHeapAllocator::{init,scope,reset}, bun_alloc::MAX_ALIGN_T / MaxA... not reached in this run
110 src/react_compiler/validation/validate_use_memo.rs (+4) validate_use_memo return value (void_memo_errors), unused_use_memos, has_non_void_return, diag_void_return, di... port of an upstream, can be staged work
105 src/css/generics.rs (+4) generics::ParseWithOptions (trait), generics::parse_with_options (free fn), impl_pwo_via_parse!, all 12 impl s... port of an upstream, needs a decision
95 src/react_compiler/hir/dominator.rs (+10) compute_post_dominator_tree(include_throws_as_exit_node), analyse_functions(debug_logger), rename_variables_wi... port of an upstream
93 src/bundler/linker_context/writeOutputFilesToDisk.rs (+2) max_heap_allocator, _max_heap_allocator_source_map, _max_heap_allocator_inline_source_map, _code_allocator (wr... can be staged work
90 src/runtime/bake/DevServer.rs (+6) DevServer::emit_visualizer_message_if_needed, DevServer::emit_memory_visualizer_message_if_needed, DevServer::... can be staged work, needs a decision
85 src/css/selectors/parser.rs (+1) SelectorParser::default_namespace, GenericComponent::DefaultNamespace, QNamePrefix::ImplicitDefaultNamespace, ... port of an upstream
85 src/css/selectors/parser.rs (+1) SelectorParser::{parse_is_and_where, parse_host, parse_part, parse_slotted, is_and_where_error_recovery, names... port of an upstream, needs a decision
82 src/standalone_graph/StandaloneModuleGraph.rs (+1) bun_standalone_graph::inject _ => arm (append-to-end-of-file fallback), outside area: bun_sys::set_file_offs... not reached in this run
80 src/runtime/webcore/Blob.rs (+1) webcore::Lifetime arms in BlobExt::{to_string, to_json, to_array_buffer_view, to_string_with_bytes, to_json_wi... not reached in this run
80 src/bundler/options.rs (+5) TransformOptions.write, BundleOptions.write, options::open_output_dir, BundleOptions.output_dir_handle, option... can be staged work
79 src/bundler/transpiler.rs (+4) transpiler::ParseOptions.macro_remappings, VirtualMachine.has_any_macro_remappings, JSTranspiler TransformTask... can be a bug or a missing feature
75 src/runtime/shell/subproc.rs (+1) shell::subproc::Writable::Pipe, Writable::on_close, WritableInitError, the FileSink close-signal wiring in spa... not reached in this run
75 src/react_compiler/options.rs (+5) ReactCompilerOptions.{enabled,is_dev,gating,ignore_use_no_forget,logger_test_only,expect_nothing_compiled,targ... can be a bug or a missing feature, port of an upstream, can be staged work
71 src/bundler/transpiler.rs (+2) transpiler::ParseResult.pending_imports, ParseResult::is_pending_import, is_deferred/skip_deferred in Link... not reached in this run
70 src/install/lockfile.rs (+3) Printer::print_with_lockfile (options / env loading), PrinterFormat, printer::Yarn::print(this: &mut Printer) removes a side effect or an error exit, needs a decision
60 src/jsc/VirtualMachine.rs (+2) bun_jsc::virtual_machine::runtime_hooks() and the None/else branches of its 31 call sites not reached in this run
60 src/js/bun/sql.ts (+2) pool.getCommitDistributedSQL / getRollbackDistributedSQL / getConnectionForQuery / supportsReservedConnections... can be staged work
60 src/md/ansi_renderer.rs (+5) md::SpanType::{Latexmath, LatexmathDisplay, U}, md::TextType::Latexmath, ansi_renderer SPAN_U, md Flags::{late... can be a bug or a missing feature, can be staged work
60 src/bundler/linker_context/postProcessCSSChunk.rs (+2) CompileResult::Css.source_map, post_process_css_chunk line_offset / compile_results_for_source_map / chunk.out... can be staged work, needs a decision
60 src/css/printer.rs (+4) PrinterOptions.pseudo_classes, PseudoClasses, Printer.pseudo_classes, pseudo! macro, PrinterOptions.project_ro... port of an upstream, can be staged work
60 src/s3_signing/credentials.rs (+5) bun_s3_signing::SignOptions.content_md5, SignOptions.content_hash (and the downstream SignResult.content_md5, ... can be staged work, needs a decision
60 src/runtime/webcore/Blob.rs (+1) BlobExt::to_json lifetime (always Lifetime::Share), the Lifetime::Share arms of to_string, to_string_with_by... can be staged work
60 src/runtime/node/path.rs path.rs T: PathCharCwd = u16: get_cwd_u16, impl PathCharCwd for u16, T::IS_U16 arms in create_js_string_t, P... can be staged work

Also left in place, by a decision in this run:

  • src/react_compiler: 12 findings, about 1,800 lines (for example InstructionValue::JSXText and TypeCastExpression, which nothing constructs, and Terminal::Unsupported). scripts/sync-react-compiler.sh keeps hir/, validation/, inference/ and 6 more directories close to the upstream crates. A removal of variants and match arms works against that. The removal of the three variants compiled on 12 targets.
  • configure_allocator in src/bun_core/Global.rs is an empty function with 5 callers. Its comment says that it stays on purpose.

no test proof · iteration 0 · the description declares no behaviour change, so there is no failing test to prove; the existing suite in CI is the check

- js_printer: print_internal_bun_import has one caller, which passes
  Some(b"globalThis.Bun"). The three None arms are removed and the
  parameter is a plain slice.
- bun_io: nothing inserts Flags::PollProcess, Flags::Process or
  Flags::NeedsRearm. The three members and the code that tests them are
  removed.
- bun_install: UpdateRequest::parse_with_error has one caller, which
  passes fatal = true. The parameter and the two else branches are
  removed, and a comment that points at a deleted file.
@robobun

robobun commented Sep 30, 2026

Copy link
Copy Markdown
Collaborator Author

Status: ready for review.

  • Scope: 104 lines removed and 19 added in 3 files (src/js_printer/lib.rs, src/io/lib.rs, src/install/PackageManager/UpdateRequest.rs). No behavior change.
  • How the dead code was found: a reading of 35 areas of src/ and scripts/ for code that has a textual user but cannot run, a second reading that tried to refute each finding, and rg for each name over src, packages, scripts and build/debug/codegen.
  • Verification: bun bd, bun run rust:check-all (12 targets), 8 more cargo check configurations (test targets, debug and release cfgs, the Windows shim), cargo clippy for the three crates, cargo fmt --check, and 7 test files with the debug build. The PR body lists them, with one failure in bunx.test.ts that compares the version string of a debug build.
  • Tests: none added. The change only deletes code that cannot run, so no test can fail before it and pass after it.
  • Overlap: a merge simulation against the 133 open pull requests that touch these files. 8 get more conflicted files, and each of them conflicts with main today. No open dead-code pull request removes the same lines.

@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.

LGTM — three self-contained dead-code deletions, each verified unreachable from the code rather than the description.

What was reviewed:

  • bun_io::Flags removal: grepped every PollProcess/Process/NeedsRearm reference in the tree; all remaining hits (windows_event_loop.rs, ParentDeathWatchdog.rs via file_poll::Flags, posix_event_loop.rs) resolve to posix_event_loop::Flags, not the lib.rs enum, so no cfg-gated target loses a variant it names.
  • register_for_epoll: both callers pass PollReadable/PollWritable and the first match flag already unreachable!()s on anything else, so the deleted second match (and its linux/android branch) was dead; nothing in lib.rs ever inserted NeedsRearm, so the EPOLL_CTL_MOD/ADD choice is unchanged in practice.
  • print_internal_bun_import / parse_with_error: single caller each (Some(b"globalThis.Bun"), fatal = true); print_require_or_import_expr keeps two other callers and Loc has no remaining use in UpdateRequest.rs.
Extended reasoning...

The change is a single commit of +19/-104 across src/js_printer/lib.rs, src/io/lib.rs, and src/install/PackageManager/UpdateRequest.rs that only deletes unreachable branches, three enum variants, and one always-constant parameter. It touches no security-sensitive surface: the epoll registration logic keeps the same syscall flags and MOD/ADD selection for every reachable input, and the install error path still emits the identical message for its only caller. Every deletion was confirmed dead by grepping callers and cross-checking which of the two same-named Flags enums each cfg-gated reference binds to, which also covers the Windows and macOS paths without needing a build. No changed file is under CODEOWNERS, the hunt ran dry with no findings, and there are no third-party objections on the timeline.

@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: oven-sh/bun/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Essentials

Run ID: 90a8fa0c-fe57-4688-8809-999301a4c7ca

📥 Commits

Reviewing files that changed from the base of the PR and between 2722608 and 346d7c9.

📒 Files selected for processing (3)
  • src/install/PackageManager/UpdateRequest.rs
  • src/io/lib.rs
  • src/js_printer/lib.rs

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 5 remain after this review.


Walkthrough

The changes update update-request error reporting, epoll registration flags, and printing of the global Bun import statement.

Changes

Dependency Format Errors

Layer / File(s) Summary
Update request error reporting
src/install/PackageManager/UpdateRequest.rs
parse_with_error no longer accepts a fatality argument. Both unrecognized-format checks call Output::err_generic before returning UnrecognizedDependencyFormat. parse calls the revised method and still crashes if it returns an error.

Epoll Polling

Layer / File(s) Summary
Epoll registration flags
src/io/lib.rs
Flags removes PollProcess, Process, and NeedsRearm. Registration accepts PollReadable and PollWritable, selects EPOLL_CTL_MOD only when WasEverRegistered is set, and stores the supplied flag after successful registration.

Bun Import Printing

Layer / File(s) Summary
Bun import statement printing
src/js_printer/lib.rs
The global Bun import caller passes globalThis.Bun as a required statement slice. The helper prints that statement for namespace, default, and side-effect imports.

Suggested reviewers: jarred-sumner

Priority: ⬇️ Low

Merge Risk: ⚪ Minimal · up to 346d7

This dead-code removal is not expected to change behavior, and no actionable merge-blocking risk was found.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the main change: removing dead code from the three affected areas.
Description check ✅ Passed The description thoroughly explains the problem, fix, scope, behavior impact, verification steps, known test failure, and platform coverage. It does not use the exact template headings, but it provide…

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

@robobun

robobun commented Sep 30, 2026

Copy link
Copy Markdown
Collaborator Author

Both automated reviews found nothing to change. The branch stays at 346d7c9.

Check status at this time:

  • These GitHub checks pass: Format, Lint JavaScript, Source lints, cargo clippy, cargo miri test, lol-html cargo test, mordant.
  • The claude-find-issues check is red. The job stops with an error in its first second, before it reads the diff. It has failed on every pull request since 2026-09-20 at the latest, so this change is not the cause.
  • Buildkite build 121837 is in progress.

This branch has not been deployed

No deployments
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