{"record":{"id":"cce2a76231028bb5","repo":"jdx/mise","slug":"relay-unavailable","errorCode":null,"errorMessage":"relay unavailable","messagePattern":"relay unavailable","errorType":"http","errorClass":null,"httpStatus":403,"severity":"error","filePath":"src/github_relay.rs","lineNumber":809,"sourceCode":"                            builder = builder.header(name, value);\n                        }\n                    }\n                    let stream = futures_util::stream::try_unfold(\n                        (response, permit),\n                        |(mut response, permit)| async move {\n                            let chunk = response\n                                .chunk()\n                                .await\n                                .map_err(|_| std::io::Error::other(\"relay disconnected\"))?;\n                            Ok::<_, std::io::Error>(chunk.map(|chunk| (chunk, (response, permit))))\n                        },\n                    );\n                    Ok(builder.body(Body::from_stream(stream))?)\n                }\n                .await;\n                result.unwrap_or_else(|_| {\n                    Response::builder()\n                        .status(403)\n                        .body(Body::from(\"relay unavailable\"))\n                        .expect(\"valid response\")\n                })\n            }\n        });\n        let task = tokio::spawn(async move {\n            let _ = axum::serve(BoundedListener::new(listener), service).await;\n        });\n        // Aborting this task is sufficient here: exiting the adapter also closes\n        // all accepted loopback connections. Local broker cancellation is separate.\n        let guard = AbortTask(task);\n        let mut child = if command.is_empty() {\n            let shell = std::env::var_os(\"SHELL\").unwrap_or_else(|| \"/bin/sh\".into());\n            let mut child = tokio::process::Command::new(shell);\n            child.arg(\"-l\");\n            child\n        } else {\n            let mut child = tokio::process::Command::new(&command[0]);","sourceCodeStart":791,"sourceCodeEnd":827,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/github_relay.rs#L791-L827","documentation":"tool_stub resolves a tool request into a Toolset, then requires that the resolved toolset exposes at least one current version via toolset.list_current_versions(). If the resolution produced an empty set of current versions, mise cannot proceed to install or exec the stub tool and throws this error. It signals that the requested tool/version resolved to nothing usable.","triggerScenarios":"Calling execute_with_tool_request (via run) where after resolving the ToolRequest, toolset.list_current_versions() returns an empty list — e.g. the requested version matches no available release.","commonSituations":"Typo'd or nonexistent tool version passed to a shim; a tool configured with a version prefix that matches nothing; registry/backend changes removing the pinned version; running `mise x tool@weirdversion` with an unresolvable spec.","solutions":["Check the requested version spec for typos: run `mise ls-remote <tool>` to see valid versions","Fix the version in the config file (mise.toml / .tool-versions) to a resolvable version","Run `mise reshim` / `mise install` to refresh installed state and shims","Verify the backend for the tool is configured and can list versions"],"exampleFix":"// before\nmise exec node@99.0.0 -- node -v\n\n// after\nmise exec node@22 -- node -v","handlingStrategy":"validation","validationCode":"mise ls-remote <tool> | grep -Fx \"<version>\" || echo \"version not available\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate version specs with `mise ls-remote` before pinning them","Keep config files (mise.toml/.tool-versions) in sync with actually installed versions","Run `mise reshim` after config changes"],"tags":["toolset","version-resolution","cli"],"backgroundTag":"empty-result-set","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}