{"record":{"id":"8e2b77c96cf2f4c4","repo":"zeroclaw-labs/zeroclaw","slug":"bridge-app-not-found-at-run-from-zeroclaw-repo","errorCode":null,"errorMessage":"Bridge app not found at {}. Run from zeroclaw repo root.","messagePattern":"Bridge app not found at (.+?)\\. Run from zeroclaw repo root\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-hardware/src/peripherals/uno_q_setup.rs","lineNumber":19,"sourceCode":"//! Deploy ZeroClaw Bridge app to Arduino Uno Q.\n\nuse anyhow::{Context, Result};\nuse std::process::Command;\n\nconst BRIDGE_APP_NAME: &str = \"uno-q-bridge\";\n\n/// Deploy the Bridge app. If host is Some, scp from repo and ssh to start.\n/// If host is None, assume we're ON the Uno Q — use embedded files and start.\npub fn setup_uno_q_bridge(host: Option<&str>) -> Result<()> {\n    let bridge_dir = std::path::Path::new(env!(\"CARGO_MANIFEST_DIR\"))\n        .join(\"firmware\")\n        .join(\"uno-q-bridge\");\n\n    if let Some(h) = host {\n        if bridge_dir.exists() {\n            deploy_remote(h, &bridge_dir)?;\n        } else {\n            anyhow::bail!(\n                \"Bridge app not found at {}. Run from zeroclaw repo root.\",\n                bridge_dir.display()\n            );\n        }\n    } else {\n        deploy_local(if bridge_dir.exists() {\n            Some(&bridge_dir)\n        } else {\n            None\n        })?;\n    }\n    Ok(())\n}\n\nfn deploy_remote(host: &str, bridge_dir: &std::path::Path) -> Result<()> {\n    let ssh_target = validated_ssh_target(host)?;\n\n    println!(\"Copying Bridge app to {}...\", host);","sourceCodeStart":1,"sourceCodeEnd":37,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-hardware/src/peripherals/uno_q_setup.rs#L1-L37","documentation":"setup_uno_q_bridge with Some(host) deploys over ssh/scp from the bridge app directory at <CARGO_MANIFEST_DIR>/firmware/uno-q-bridge — a path baked in at compile time. This bail fires when that directory is absent on the machine running the command. As with the Nucleo firmware error, 'Run from zeroclaw repo root' is about having the repo content; the current working directory is irrelevant.","triggerScenarios":"Running remote deployment from a prebuilt binary or a checkout without firmware/uno-q-bridge; the repo being moved or deleted after zeroclaw was built.","commonSituations":"Users installing a released binary and then trying the remote bridge setup; sparse or partial clones; running setup on a machine that has only the runtime, not the source tree.","solutions":["Run from a full zeroclaw git clone containing firmware/uno-q-bridge next to crates/zeroclaw-hardware","Verify the path printed in the error exists and contains app.yaml; if not, restore the directory","If executing on the Uno Q itself, call setup with host = None — that path writes embedded files and needs no repo directory"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let bridge = std::path::Path::new(env!(\"CARGO_MANIFEST_DIR\"))\n    .join(\"firmware\").join(\"uno-q-bridge\");\nif host.is_some() && !bridge.exists() {\n    anyhow::bail!(\"full repo required at {} for remote deploy\", bridge.display());\n}\nsetup_uno_q_bridge(host)?;","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run remote bridge deployment only from a full zeroclaw checkout","The path is compile-time (CARGO_MANIFEST_DIR) — cwd changes cannot fix it","Prefer host = None when already on the Uno Q; it uses embedded files"],"tags":["uno-q","bridge","compile-time-path","missing-directory"],"backgroundTag":"missing-resource-path","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}