{"record":{"id":"2897643d190dd69e","repo":"dbt-labs/dbt-core","slug":"destination-path-must-be-an-absolute-path","errorCode":null,"errorMessage":"destination path must be an absolute path: {}","messagePattern":"destination path must be an absolute path: (.+?)","errorType":"validation","errorClass":"InstallError","httpStatus":null,"severity":"error","filePath":"crates/dbt-adbc/src/install.rs","lineNumber":541,"sourceCode":"    destination: &Path,\n    expected_sha256sum: Option<&str>,\n) -> Result<(), InstallError> {\n    debug_assert!(\n        destination.is_absolute(),\n        \"destination path must be absolute\"\n    );\n    let mut response = http_agent.get(url).call().map_err(InstallError::Http)?;\n\n    // Generate a random file name and create an empty temporary file\n    let tmp_path = {\n        let tmp_name = tmpname(\".\", 15, \".download\").map_err(InstallError::GetRandom)?;\n        // ensure the destination exists and create it if necessary\n        let parent = destination.parent().ok_or_else(|| {\n            let message = format!(\n                \"destination path must be an absolute path: {}\",\n                destination.display()\n            );\n            let error = io::Error::new(io::ErrorKind::InvalidInput, message);\n            InstallError::Io(error)\n        })?;\n        std::fs::create_dir_all(parent).map_err(|e| InstallError::CreateDir(e, parent.into()))?;\n        // write the file in the same directory as the destination to ensure\n        // the rename operation is atomic (happens on the same filesystem)\n        parent.join(tmp_name)\n    };\n    let mut tmp = std::fs::File::create(&tmp_path)\n        .map_err(|e| InstallError::CreateFIle(e, tmp_path.clone()))?;\n\n    // Download and Zstandard decompression buffers\n    const DECOMPRESSION_FACTOR: usize = 4;\n    let mut zstd_insize_hint = zstd_safe::DCtx::in_size(); // ~200KB\n    let mut download_buffer = Vec::with_capacity(zstd_insize_hint);\n    let write_buffer_capacity = (DECOMPRESSION_FACTOR * download_buffer.capacity()).max(64 * 1024);\n    let mut inner_write_buffer = ZstdWriteBuffer::with_fixed_capacity(write_buffer_capacity);\n    let mut write_buffer = zstd_safe::OutBuffer::around(&mut inner_write_buffer);\n","sourceCodeStart":523,"sourceCodeEnd":559,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-adbc/src/install.rs#L523-L559","documentation":"download_zst_driver_file asserts its destination argument is an absolute path: a relative path would break parent-directory creation and the atomic temp-file rename logic later in the function. The guard fires before any HTTP request is made.","triggerScenarios":"Thrown at crates/dbt-adbc/src/install.rs:541 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Canonicalize or absolutize the destination before calling the downloader","Build destination paths from an absolute install root","Validate at the public API boundary with a real error rather than a debug_assert"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0267ce9170576975b76b64ce856b2e5848e96617","analyzedAt":"2026-09-07T21:53:39.732Z","contentChangedAt":"2026-09-07T21:53:39.732Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}