{"record":{"id":"acb7c0b22661bd4c","repo":"BoundaryML/baml","slug":"usage-baml-toolchain-install-canary-nightly-version","errorCode":null,"errorMessage":"usage: baml toolchain install <canary|nightly|version>","messagePattern":"usage: baml toolchain install <canary\\|nightly\\|version>","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"baml_language/crates/baml/src/main.rs","lineNumber":358,"sourceCode":"        fs::create_dir_all(parent)?;\n    }\n    let tmp = path.with_extension(\"tmp\");\n    fs::write(&tmp, toml::to_string_pretty(value)?)?;\n    fs::rename(tmp, path)?;\n    Ok(())\n}\n\nfn toolchain(args: Vec<String>) -> Result<()> {\n    let (args, manifest_base_url) = parse_manifest_base_url(args)?;\n    match args.first().map(String::as_str) {\n        Some(\"--help\" | \"-h\" | \"help\") | None => {\n            print!(\"{TOOLCHAIN_HELP}\");\n            Ok(())\n        }\n        Some(\"install\") => {\n            let selector = args\n                .get(1)\n                .ok_or_else(|| anyhow!(\"usage: baml toolchain install <canary|nightly|version>\"))?;\n            let force = args.iter().any(|arg| arg == \"--force\");\n            install_toolchain(selector, false, manifest_base_url.as_deref(), force)\n        }\n        Some(\"use\") => {\n            let selector = args.get(1).ok_or_else(|| {\n                anyhow!(\"usage: baml toolchain use <canary|nightly|version|path>\")\n            })?;\n            use_toolchain(selector, manifest_base_url.as_deref())\n        }\n        Some(\"pin\") => {\n            let selector = args.get(1).ok_or_else(|| {\n                anyhow!(\"usage: baml toolchain pin <canary|nightly|version|path>\")\n            })?;\n            if args.len() > 2 {\n                return Err(anyhow!(\n                    \"usage: baml toolchain pin <canary|nightly|version|path>\\nunexpected arguments: {}\",\n                    args[2..].join(\" \")\n                ));","sourceCodeStart":340,"sourceCodeEnd":376,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/baml_language/crates/baml/src/main.rs#L340-L376","documentation":"`baml toolchain install` requires exactly one selector argument naming which toolchain to install: `canary`, `nightly`, or a specific version. When the selector argument is missing entirely, the `toolchain` function throws this usage error via `args.get(1).ok_or_else(...)`.","triggerScenarios":"Running `baml toolchain install` with no further arguments, or with only flags like `baml toolchain install --force` (the flag is scanned later but the selector slot is empty).","commonSituations":"Users forgetting the version selector, scripts calling `baml toolchain install` with an unset variable, or mistyping the subcommand so the selector lands in the wrong position.","solutions":["Provide a selector: `baml toolchain install canary`, `baml toolchain install nightly`, or `baml toolchain install <version>` (e.g. `0.210.0`).","Run `baml toolchain install --help` or `baml toolchain --help` for usage.","If the selector comes from a shell variable, verify it is non-empty before invoking."],"exampleFix":"# before\nbaml toolchain install --force\n\n# after\nbaml toolchain install canary --force","handlingStrategy":"validation","validationCode":"selector=\"${SELECTOR:?SELECTOR must be set (canary|nightly|version)}\"\ncase \"$selector\" in canary|nightly|[0-9]*.[0-9]*.[0-9]*) ;; *) echo \"invalid selector: $selector\" >&2; exit 1;; esac\nbaml toolchain install \"$selector\"","typeGuard":"function isValidInstallSelector(s: string): boolean {\n  return s === \"canary\" || s === \"nightly\" || /^\\d+\\.\\d+\\.\\d+$/.test(s);\n}","tryCatchPattern":"try:\n    subprocess.run([\"baml\", \"toolchain\", \"install\", selector], check=True)\nexcept subprocess.CalledProcessError as e:\n    if \"usage: baml toolchain install\" in e.stderr.decode():\n        raise SystemExit(\"Selector missing — pass canary, nightly, or a version\")","preventionTips":["Always pass an explicit selector after `toolchain install`.","Validate shell variables for emptiness before interpolating into the command.","Remember `--force` is optional but the selector is not."],"tags":["cli","usage","missing-argument","toolchain"],"backgroundTag":"missing-cli-argument","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}