diff --git a/lib/crates/fabro-workflow/src/operations/start.rs b/lib/crates/fabro-workflow/src/operations/start.rs index 3c1d6c184..8227f8735 100644 --- a/lib/crates/fabro-workflow/src/operations/start.rs +++ b/lib/crates/fabro-workflow/src/operations/start.rs @@ -158,6 +158,7 @@ pub(super) async fn execute_persisted_run( { let error = FabroError::engine(err.to_string()); let _ = persist_detached_failure( + run_id, run_store.as_ref(), run_dir, "bootstrap", @@ -175,6 +176,7 @@ pub(super) async fn execute_persisted_run( Ok(persisted) => persisted, Err(err) => { let _ = persist_detached_failure( + run_id, run_store.as_ref(), run_dir, "bootstrap", @@ -191,6 +193,7 @@ pub(super) async fn execute_persisted_run( Ok(session) => session, Err(err) => { let _ = persist_detached_failure( + run_id, run_store.as_ref(), run_dir, "bootstrap", @@ -790,6 +793,7 @@ fn load_run_id(run_dir: &Path) -> Option { } async fn persist_detached_failure( + run_id: RunId, run_store: &dyn RunStore, run_dir: &Path, phase: &'static str, @@ -832,26 +836,24 @@ async fn persist_detached_failure( tracing::warn!(error = %err, "Failed to save detached failure status to store"); } - if let Some(run_id) = load_run_id(run_dir) { - let event = WorkflowRunEvent::RunNotice { - level: RunNoticeLevel::Error, - code: format!("{phase}_failed"), - message: message.clone(), - }; - let envelope = canonicalize_event(&run_id, &event); - let line = redacted_event_json(&envelope).map_err(|err| FabroError::Io(err.to_string()))?; - append_progress_event_with_line(run_dir, &envelope, &line) - .map_err(|err| FabroError::Io(err.to_string()))?; - match event_payload_from_redacted_json(&line, &run_id) { - Ok(payload) => { - if let Err(err) = run_store.append_event(&payload).await { - tracing::warn!(error = %err, "Failed to append detached failure event to store"); - } - } - Err(err) => { - tracing::warn!(error = %err, "Failed to build detached failure event payload"); + let event = WorkflowRunEvent::RunNotice { + level: RunNoticeLevel::Error, + code: format!("{phase}_failed"), + message: message.clone(), + }; + let envelope = canonicalize_event(&run_id, &event); + let line = redacted_event_json(&envelope).map_err(|err| FabroError::Io(err.to_string()))?; + append_progress_event_with_line(run_dir, &envelope, &line) + .map_err(|err| FabroError::Io(err.to_string()))?; + match event_payload_from_redacted_json(&line, &run_id) { + Ok(payload) => { + if let Err(err) = run_store.append_event(&payload).await { + tracing::warn!(error = %err, "Failed to append detached failure event to store"); } } + Err(err) => { + tracing::warn!(error = %err, "Failed to build detached failure event payload"); + } } Ok(())