From d79d5af0365094a7ca06d8674f4b9531b6b267f2 Mon Sep 17 00:00:00 2001 From: claude Date: Sun, 12 Jul 2026 19:52:01 +0200 Subject: [PATCH] fix(cli): a missing [nodes] directory refuses with a clean message An existence pre-check on the [nodes] pointer target fires before the crate pipeline: the refusal names the absent directory and keeps the [nodes] context, instead of leaking cargo metadata's os-error wrap. Existing-but-broken crates keep the ArtifactMissing/CargoMetadata errors under the pointer prefix. closes #245 --- crates/aura-cli/src/project.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/crates/aura-cli/src/project.rs b/crates/aura-cli/src/project.rs index e9d4db6..625b4f3 100644 --- a/crates/aura-cli/src/project.rs +++ b/crates/aura-cli/src/project.rs @@ -59,6 +59,10 @@ pub enum ProjectError { Charter(String), MultiCrate(usize), NodesPointer { pointer: String, inner: Box }, + /// #245: the `[nodes]` pointer target does not exist — checked before + /// handing off to `load_crate`, so this never reaches the cargo-metadata + /// probe (whose raw os-error text would otherwise leak through). + PointerDirMissing(PathBuf), } impl fmt::Display for ProjectError { @@ -95,6 +99,7 @@ impl fmt::Display for ProjectError { f, "node crate at `{pointer}` (from [nodes] in Aura.toml): {inner}" ), + Self::PointerDirMissing(p) => write!(f, "{} does not exist", p.display()), } } } @@ -488,9 +493,19 @@ pub fn load(root: &Path, release: bool) -> Result { None } } - [pointer] => Some(load_crate(&root.join(pointer), release).map_err(|e| { - ProjectError::NodesPointer { pointer: pointer.clone(), inner: Box::new(e) } - })?), + [pointer] => { + let dir = root.join(pointer); + if !dir.is_dir() { + return Err(ProjectError::NodesPointer { + pointer: pointer.clone(), + inner: Box::new(ProjectError::PointerDirMissing(dir)), + }); + } + Some(load_crate(&dir, release).map_err(|e| ProjectError::NodesPointer { + pointer: pointer.clone(), + inner: Box::new(e), + })?) + } many => return Err(ProjectError::MultiCrate(many.len())), }; Ok(ProjectEnv {