diff --git a/crates/executor/src/cache.rs b/crates/executor/src/cache.rs index 0ab5488..a91d7c7 100644 --- a/crates/executor/src/cache.rs +++ b/crates/executor/src/cache.rs @@ -65,11 +65,17 @@ impl CacheStore { let path = path.to_string(); let workspace = workspace.to_path_buf(); - tokio::task::spawn_blocking(move || { + match tokio::task::spawn_blocking(move || { this.restore_inner(&key, &restore_keys, &path, &workspace) }) .await - .ok()? + { + Ok(result) => result, + Err(e) => { + wrkflw_logging::warning(&format!("Cache restore task panicked: {}", e)); + None + } + } } /// Save the contents of `path` (relative to `workspace`) under `key`. diff --git a/crates/executor/src/engine.rs b/crates/executor/src/engine.rs index 5c12de6..f2cc031 100644 --- a/crates/executor/src/engine.rs +++ b/crates/executor/src/engine.rs @@ -2853,13 +2853,19 @@ async fn execute_step(ctx: StepExecutionContext<'_>) -> Result Vec { fn parse_command_line(line: &str) -> Option { // Format: ::command param1=val1,param2=val2::message // The line starts with "::" — strip it. - let rest = &line[2..]; + let rest = line.strip_prefix("::").unwrap_or(line); // Find the second "::" that separates command+params from the message let (cmd_part, message) = if let Some(idx) = rest.find("::") {