fix(oab-mcp): install rustls CryptoProvider before first TLS handshake (studio#119) - #120
Merged
Merged
Conversation
…e (studio#119) studio-cp pulls in both rustls crypto backends transitively (kube's rustls-tls -> hyper-rustls defaults to "ring"; the AWS SDK crates default to "aws-lc-rs"), and nothing installed a process-level default. The first real TLS handshake panicked on a tokio worker thread instead of returning an error, which silently hung any k8s call that reaches TLS without going through an exec-based auth step first (confirmed live: cert-based contexts like orbstack never got a response back over the MCP wire; exec-based contexts like GKE failed earlier, at the exec-spawn step, so never hit this). Install aws-lc-rs explicitly in OabMcp::from_env() (shared by both the stdio binary and the in-process reverse-MCP tunnel), matching the backend the AWS SDK side already uses. Ref #119.
This was referenced Aug 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes the blocker in #119 (item 1 of the runbook) — the actual crash behind the New Fleet → Kubernetes wizard's namespace listing silently hanging for cert-based contexts (e.g. orbstack).
studio-cppulls in both rustls crypto backends transitively:kube'srustls-tlsfeature →hyper-rustlsdefaults toring; the AWS SDK crates (aws-sdk-stsetc.) default toaws-lc-rs. Nothing in the process installed a default, so the first real TLS handshake panics on atokio-rt-workerthread:Confirmed via
cargo tree -e features -i ring/-i aws-lc-rsinsidecrates/studio-cp— both backends really are present in the resolved graph.Why this showed up as two different symptoms (live-debugged with Brett via the Debug drawer's MCP log):
list_namespacesJSON-RPC request never gets a response. Confirmed in the MCP debug log: requestid:1053with{"context":"orbstack"}has no matching result, unlike neighboringid:1052/1054/1055. Namespace field's datalist silently never populates.Fix
Install
aws-lc-rsas the process default inOabMcp::from_env()— the constructor shared by both the stdio binary (oab-mcpsidecar) and the in-process reverse-MCP tunnel driver, so both entry points are covered by one call site. Pickedaws-lc-rsto match the backend the AWS SDK side of this same crate already uses. The install call'sResultis discarded —install_default()can only succeed once per process, and if some other path already won that race, that's fine too, we only need a provider installed.Verification
aws-sdk-ec2transitively pulled into the workspace resolve regardless of which crate is targeted (cargo check -p oab-mcp -j 1still OOMs on it), a known pre-existing limitation (same as fix(src-tauri): register missing Tauri command bridges for k8s onboarding tools (studio#104) #117/feat(deploy): wire k8s provider through New Fleet wizard submit (studio#104) #118's disclaimer, not something new here).rustls::crypto::aws_lc_rs::default_provider() -> CryptoProvider,CryptoProvider::install_default(self) -> Result<(), Arc<Self>>— both signatures confirmed via docs.rs. Feature flag confirmed against rustls' ownCargo.toml(aws-lc-rs = ["aws_lc_rs"]alias,aws_lc_rsdoes not implystdso it's added explicitly).build-testjob is the real compile gate here.Ref #119.
🤖 Generated with Claude Code