{"record":{"id":"abc38171cc0751d7","repo":"jdx/mise","slug":"rust-s-mr-boxington-option-requires-mr-boxington-i","errorCode":null,"errorMessage":"rust's mr_boxington option requires mr-boxington in [tools]; add `mr-boxington = \"latest\"`","messagePattern":"rust's mr_boxington option requires mr-boxington in \\[tools\\]; add `mr-boxington = \"latest\"`","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/config/command_wrapper.rs","lineNumber":85,"sourceCode":"        .find(|tool| tool.ba().full() == \"core:rust\")\n        .is_some_and(|rust| {\n            // Match explicit wrappers: safe mode cannot activate project commands.\n            let safe = !crate::config::Settings::safe_mode()\n                || rust\n                    .source()\n                    .path()\n                    .is_none_or(crate::config::is_global_config);\n            safe && BackendOptions::new(&rust.options()).bool(\"mr_boxington\")\n        });\n    if !enabled {\n        return Ok(());\n    }\n    let mbx = BackendArg::from(\"mr-boxington\");\n    if !tools\n        .iter()\n        .any(|tool| tool.ba().short == mbx.short || tool.ba().full() == mbx.full())\n    {\n        eyre::bail!(\n            \"rust's mr_boxington option requires mr-boxington in [tools]; add `mr-boxington = \\\"latest\\\"`\"\n        );\n    }\n    wrappers.insert(\n        \"cargo\".into(),\n        CommandWrapper::Detailed(CommandWrapperOptions {\n            command: \"mbx\".into(),\n            args: Vec::new(),\n            env: [(\"MBX_CARGO_SHIM_MODE\".into(), \"1\".into())].into(),\n        }),\n    );\n    Ok(())\n}\n","sourceCodeStart":67,"sourceCodeEnd":99,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/config/command_wrapper.rs#L67-L99","documentation":"Raised by add_rust_wrapper in src/config/command_wrapper.rs when configuration enables the `mr_boxington` option for the rust tool but the mr-boxington tool itself is not declared in the same config's [tools] section. The wrapper transparently redirects cargo builds through mbx, which must be installed as a managed tool, so mise refuses to configure it half-way.","triggerScenarios":"A mise.toml with rust settings containing `mr_boxington = true` (or equivalent) while the [tools] table lacks `mr-boxington`.","commonSituations":"Copying a repo's rust tool settings without copying its [tools] entries; enabling mbx caching after mise already pinned a tools list; typos in the tool name such as `mrboxington` or `mbx`.","solutions":["Add `mr-boxington = \"latest\"` to the [tools] section of your mise.toml","Verify the spelling: the tool key must be exactly `mr-boxington`","Alternatively remove/disable the `mr_boxington` option if you don't want the cargo wrapper"],"exampleFix":"# before\n[tools]\nrust = \"latest\"\n[settings.rust]\nmr_boxington = true\n# after\n[tools]\nrust = \"latest\"\nmr-boxington = \"latest\"\n[settings.rust]\nmr_boxington = true","handlingStrategy":"validation","validationCode":"// validate mise.toml consistency before enabling the option\n// tools table must contain mr-boxington\nlet has_mbx = toml[\"tools\"].as_table().map_or(false, |t| t.contains_key(\"mr-boxington\"));\nlet wants_mbx = toml.dig(\"settings\", \"rust\", \"mr_boxington\") == Some(true);\nif wants_mbx && !has_mbx {\n    eprintln!(\"add mr-boxington = \\\"latest\\\" to [tools]\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep rust options and [tools] entries in sync when copying configs between repos","Spell the tool key exactly as mr-boxington","Run `mise doctor` to catch config inconsistencies early","Comment in shared mise.toml files that mr_boxington requires the [tools] entry"],"tags":["config","rust","missing-tool","mise-toml"],"backgroundTag":"missing-required-config-field","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}