From b6689a39273b3c10a93ebe0dea1e40a8daaf07ce Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Mon, 18 May 2026 11:58:46 -0400 Subject: [PATCH] rust-toolchain.toml: add rust-analyzer component (pin regression fix) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 1.95.0 pin (7171282) shipped components = [clippy, rustfmt], profile = minimal. The M4 LSP acceptance suite (tests/m4_acceptance.rs:1111 m4_5_rust_analyzer_initializes) spawns `rust-analyzer`; its skip-guard only checks PATH presence. The `rust-analyzer` on PATH is a rustup proxy shim — with the directory override active it resolves against the pinned toolchain, finds no rust-analyzer component, and the spawn dies before the LSP handshake, so the test runs (doesn't skip) and panics "must observe Initialized event". This was masked in CI before the pin because the Test job died at compile (rope.rs:1076); fixing compile unmasked it. A pin must ship a toolchain complete for the project's own test surface. Adding `rust-analyzer` to components. Verified under 1.95.0: `rust-analyzer --version` resolves; m4_5_rust_analyzer_initializes passes (was the sole failure in the ubuntu Test legs — CI log showed m4_acceptance 52 passed / 1 failed, all other suites ok). rust-toolchain.toml-only; no code change. Still independent / triage-pending (unchanged): macOS F9 nix PeerCredentials (Test (macos-*)), M1/M4/M6 perf/fuzz gates. Co-Authored-By: Claude Opus 4.7 --- rust-toolchain.toml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 78ba1ce..33340c3 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -6,5 +6,10 @@ # silently red-lined CI under newer rolling-stable lints. Bump # deliberately (its own validated cycle), never implicitly. channel = "1.95.0" -components = ["clippy", "rustfmt"] +# rust-analyzer is required: the M4 LSP acceptance suite spawns it +# (tests/m4_acceptance.rs). Without it the rustup proxy resolves +# `rust-analyzer` against this pinned toolchain, finds no component, +# and the spawn dies before the LSP handshake — pinning must ship a +# toolchain complete for the project's own test surface. +components = ["clippy", "rustfmt", "rust-analyzer"] profile = "minimal"