{"record":{"id":"0df1583149ec6a30","repo":"Hmbown/CodeWhale","slug":"unsupported-sandbox-backend-setting-choose-opensandbox-or","errorCode":null,"errorMessage":"Unsupported sandbox_backend setting. Choose opensandbox, or explicitly set none for local execution.","messagePattern":"Unsupported sandbox_backend setting\\. Choose opensandbox, or explicitly set none for local execution\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/sandbox/backend.rs","lineNumber":112,"sourceCode":"                .unwrap_or_else(|| \"http://localhost:8080\".to_string());\n            let api_key = config.sandbox_api_key.clone();\n            let backend = super::opensandbox::OpenSandboxBackend::new(base_url, api_key, 30)?;\n            Ok(Some(Box::new(backend)))\n        }\n    }\n}\n\n/// A configured execution boundary that is no longer supported. Keep it present\n/// in the tool context so every shell call is refused instead of running locally.\nstruct UnsupportedBackend;\n\n#[async_trait]\nimpl SandboxBackend for UnsupportedBackend {\n    fn kind(&self) -> SandboxKind {\n        SandboxKind::Unsupported\n    }\n    async fn exec(&self, _cmd: &str, _env: &HashMap<String, String>) -> Result<SandboxOutput> {\n        anyhow::bail!(\n            \"Unsupported sandbox_backend setting. Choose opensandbox, or explicitly set none for local execution.\"\n        )\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[tokio::test]\n    async fn unsupported_backend_refuses_execution_instead_of_falling_back_to_local() {\n        for name in [\"shannon\", \"shannonnet\", \"shannon-net\", \"levee\", \"unknown\"] {\n            let config = Config {\n                sandbox_backend: Some(name.into()),\n                ..Config::default()\n            };\n            let backend = create_backend(&config)\n                .unwrap()","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/tui/src/sandbox/backend.rs#L94-L130","documentation":"SandboxBackend::exec is called on UnsupportedBackend, a placeholder backend returned when the configured sandbox_backend is neither a real backend nor the explicit `none` value. It always fails, so any command routed through the sandbox during exec aborts. The message tells you the setting was unrecognized and that `none` is the opt-out for local execution.","triggerScenarios":"Config has `sandbox_backend` set to a value other than `opensandbox` or `none`, and then the exec path calls UnsupportedBackend::exec(cmd, env).","commonSituations":"Typo in a config file (e.g. `sandbox_backend = \"OpenSandbox\"` or `\"docker\"`); copying a config from another project or an older version whose backend names changed; an unset-but-not-empty value written by a script.","solutions":["Set sandbox_backend to `opensandbox` in your config if you want remote sandboxed execution.","Set sandbox_backend to `none` explicitly to run locally without a sandbox.","Check for typos and case: the accepted values are lowercase `opensandbox` and `none`.","If this came from a version upgrade, consult the current backend list in crates/tui/src/sandbox/backend.rs and migrate the old value."],"exampleFix":"// before (config)\nsandbox_backend = \"docker\"\n// after\nsandbox_backend = \"opensandbox\"  // or \"none\" for local execution","handlingStrategy":"validation","validationCode":"const VALID_BACKENDS: [&str; 2] = [\"opensandbox\", \"none\"];\nfn ensure_sandbox_backend(v: &str) -> Result<(), String> {\n    if VALID_BACKENDS.contains(&v.trim().to_ascii_lowercase().as_str()) { Ok(()) } else {\n        Err(format!(\"sandbox_backend must be opensandbox or none, got '{v}'\"))\n    }\n}","typeGuard":"fn is_valid_sandbox_backend(v: &str) -> bool {\n    matches!(v.trim().to_ascii_lowercase().as_str(), \"opensandbox\" | \"none\")\n}","tryCatchPattern":null,"preventionTips":["Validate sandbox_backend at config load time, before any exec runs.","Keep accepted values lowercase; normalize input before comparison.","When upgrading, diff your config against the backend list in crates/tui/src/sandbox/backend.rs."],"tags":["config","sandbox","validation"],"backgroundTag":"invalid-config-value","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}