{"record":{"id":"7c3d7ec2cdd16a6d","repo":"denoland/deno","slug":"laufey-cache-dir-has-no-parent","errorCode":null,"errorMessage":"LAUFEY cache dir has no parent: {}","messagePattern":"LAUFEY cache dir has no parent: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/tools/desktop.rs","lineNumber":1974,"sourceCode":"      .await\n      .with_context(|| format!(\"failed to download {url}\"))?;\n    let data = response\n      .into_maybe_bytes()?\n      .ok_or_else(|| deno_core::anyhow::anyhow!(\"empty response from {url}\"))?;\n\n    let actual =\n      faster_hex::hex_string(&sha2::Sha256::digest(&data)).to_lowercase();\n    let expected_lc = expected.to_lowercase();\n    if actual != expected_lc {\n      // Include the URL in the bail: an attacker who poisoned a redirect\n      // would otherwise be invisible in the failure log.\n      bail!(\n        \"checksum mismatch for {archive} (downloaded from {url})\\n  expected: {expected_lc}\\n  actual:   {actual}\"\n      );\n    }\n\n    let parent = dir.parent().ok_or_else(|| {\n      deno_core::anyhow::anyhow!(\n        \"LAUFEY cache dir has no parent: {}\",\n        dir.display()\n      )\n    })?;\n    std::fs::create_dir_all(parent)?;\n\n    // Stage extraction in a sibling tempdir so concurrent `deno desktop`\n    // builds don't see (or stomp on) a half-populated `dir` while one\n    // is mid-extract. tempfile's cleanup-on-drop covers panic /\n    // early-return paths; on the happy path we consume the TempDir via\n    // `into_path` so the rename below sees a real directory.\n    let staging = tempfile::Builder::new()\n      .prefix(\".staging-\")\n      .tempdir_in(parent)\n      .with_context(|| {\n        format!(\"failed to stage tempdir in {}\", parent.display())\n      })?;\n","sourceCodeStart":1956,"sourceCodeEnd":1992,"githubUrl":"https://github.com/denoland/deno/blob/89f33cbef296a2b287f323d42de54c871fa69c77/cli/tools/desktop.rs#L1956-L1992","documentation":"Error \"LAUFEY cache dir has no parent: {}\" thrown in denoland/deno.","triggerScenarios":"Thrown at cli/tools/desktop.rs:1974 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"89f33cbef296a2b287f323d42de54c871fa69c77","analyzedAt":"2026-08-16T07:54:21.310Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}