summaryrefslogtreecommitdiff
path: root/makima/src/server/handlers/mesh_daemon.rs
diff options
context:
space:
mode:
Diffstat (limited to 'makima/src/server/handlers/mesh_daemon.rs')
-rw-r--r--makima/src/server/handlers/mesh_daemon.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/makima/src/server/handlers/mesh_daemon.rs b/makima/src/server/handlers/mesh_daemon.rs
index 87b5e44..2ea7805 100644
--- a/makima/src/server/handlers/mesh_daemon.rs
+++ b/makima/src/server/handlers/mesh_daemon.rs
@@ -1303,6 +1303,23 @@ async fn handle_daemon_connection(socket: WebSocket, state: SharedState, auth_re
}),
).await;
+ // Auto-advance directive DAG when a directive step task completes
+ if let Some(step_id) = updated_task.directive_step_id {
+ let step_status = if updated_task.status == "done" { "completed" } else { "failed" };
+ let step_update = crate::db::models::UpdateDirectiveStepRequest {
+ status: Some(step_status.to_string()),
+ ..Default::default()
+ };
+ let _ = repository::update_directive_step(&pool, step_id, step_update).await;
+
+ if let Some(directive_id) = updated_task.directive_id {
+ // Advance newly-ready steps in the DAG
+ let _ = repository::advance_directive_ready_steps(&pool, directive_id).await;
+ // Check if all steps are done → set directive to idle
+ let _ = repository::check_directive_idle(&pool, directive_id).await;
+ }
+ }
+
}
Ok(None) => {
tracing::warn!(