diff --git a/hive-c0re/src/rebuild_queue.rs b/hive-c0re/src/rebuild_queue.rs index bb5b00fc..37dc02d9 100644 --- a/hive-c0re/src/rebuild_queue.rs +++ b/hive-c0re/src/rebuild_queue.rs @@ -648,7 +648,7 @@ pub async fn meta_update_cascade_agents(inputs: &[String]) -> Vec { .filter_map(|i| i.strip_prefix("agent-")) .map(|rest| rest.split('/').next().unwrap_or(rest).to_owned()) .collect(); - if touched_hyperhive || inputs.is_empty() { + let mut names = if touched_hyperhive || inputs.is_empty() { crate::lifecycle::list() .await .unwrap_or_default() @@ -664,7 +664,12 @@ pub async fn meta_update_cascade_agents(inputs: &[String]) -> Vec { .collect() } else { touched_agents - } + }; + // Sort parents before children so the sequential queue worker + // always rebuilds a parent before any of its dependents. + let topo = crate::topology::read(); + crate::auto_update::topology_sort(&mut names, &topo); + names } /// Current unix timestamp in seconds. `now()` calls are pulled into a @@ -1164,3 +1169,4 @@ mod tests { ); } } +