{"record":{"id":"ad578463f1fd5ac8","repo":"denoland/deno","slug":"laufey-backend-executable-not-found-at","errorCode":null,"errorMessage":"LAUFEY backend executable not found at '{}'","messagePattern":"LAUFEY backend executable not found at '(.+?)'","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/tools/desktop.rs","lineNumber":3203,"sourceCode":"  // (the same guard the removed shell launcher applied) instead of emitting a\n  // malformed plist that silently fails to launch.\n  validate_launcher_name(&app_name, \"app name\")?;\n  let app_bundle = parts.parent.join(format!(\"{}.app\", app_name));\n\n  // Find the LAUFEY backend .app and its main executable.\n  let backend = desktop_flags.backend.as_deref().unwrap_or(\"webview\");\n  let target = laufey_target_for(desktop_flags);\n  let laufey_app = laufey_resolver.find_app_bundle(backend, target).await?;\n  let laufey_executable_name = read_plist_string(\n    &laufey_app.join(\"Contents/Info.plist\"),\n    \"CFBundleExecutable\",\n  )\n  .unwrap_or_else(|| \"laufey_webview\".to_string());\n  let laufey_binary = laufey_app\n    .join(\"Contents/MacOS\")\n    .join(&laufey_executable_name);\n  if !laufey_binary.exists() {\n    bail!(\n      \"LAUFEY backend executable not found at '{}'\",\n      laufey_binary.display()\n    );\n  }\n\n  // Remove an existing bundle we previously built; never delete unrelated\n  // user data that collided with the inferred `<name>.app` (issue #35510).\n  reserve_app_dir(&app_bundle)?;\n\n  // Copy the entire LAUFEY .app as the shell (CEF needs Frameworks/, Resources/, etc.).\n  crate::tools::compile::copy_dir_all(&laufey_app, &app_bundle)?;\n\n  let contents_dir = app_bundle.join(\"Contents\");\n  let macos_dir = contents_dir.join(\"MacOS\");\n  let resources_dir = contents_dir.join(\"Resources\");\n  std::fs::create_dir_all(&resources_dir)?;\n  // Marker lives under Resources/ (not the bundle root) so it is sealed as a\n  // normal resource when the bundle is codesigned below.","sourceCodeStart":3185,"sourceCodeEnd":3221,"githubUrl":"https://github.com/denoland/deno/blob/f7822238cab635a3a19f99f493f675fa81a7f9d8/cli/tools/desktop.rs#L3185-L3221","documentation":"During macOS bundle assembly, the tool resolves the cached laufey .app for the chosen backend (default \"webview\"), reads CFBundleExecutable from its Info.plist (falling back to laufey_webview), and expects that binary under Contents/MacOS/. Its absence means the laufey bundle on disk is incomplete or has an unexpected layout — most often a corrupted/partial cache.","triggerScenarios":"The laufey bundle download was interrupted (first run killed, network drop, disk full), or the bundle's Info.plist names an executable that isn't in Contents/MacOS/. Printed path shows exactly where the binary was expected.","commonSituations":"Killed first run leaving a half-populated cache; switching laufey versions where the on-disk bundle is from an incompatible release; disk-full during download; overzealous cleanup tools deleting inside the cache.","solutions":["Inspect the printed path: list `<laufey.app>/Contents/MacOS/` to see what actually exists.","Delete the cached laufey bundle (the directory containing the .app named in the error) so the next run re-downloads it intact.","Verify the desktop backend flag value is one the resolver actually has a bundle for (default is \"webview\").","Check disk space and re-run once the environment is stable."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"# After a failed/suspect first run, verify the cached bundle is complete\nAPP=\"$(dirname \"$(find \"$HOME\" -path '*laufey*.app/Contents/Info.plist' 2>/dev/null | head -1)\")\"\n[ -n \"$APP\" ] && ls \"$APP/Contents/MacOS/\" || echo \"laufey bundle incomplete — delete its cache dir and re-run\"","typeGuard":null,"tryCatchPattern":"deno desktop ... || {\n  echo \"If the error is a missing laufey executable, clear the laufey cache and retry once:\";\n  echo \"  rm -rf <laufey-cache-dir>  # path prefix shown in the error message\";\n  exit 1;\n}","preventionTips":["Don't kill first-run downloads midway; if you do, clear the cache before the next build.","Ensure adequate disk space before builds that download the backend bundle.","Pin/verify the laufey version so cache and CLI expectations stay aligned."],"tags":["desktop","macos","laufey","cache-corruption","missing-file"],"backgroundTag":"missing-executable","analyzedSha":"f7822238cab635a3a19f99f493f675fa81a7f9d8","analyzedAt":"2026-08-20T13:07:44.778Z","contentChangedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}