feat(#2450): append_subgraph primitive + sweep MetaLock grows rebuilds in-DAG

First half of making the startup sweep one DAG. Adds the runtime
subgraph-append machinery and switches the sweep MetaLock from fanning out
child Rebuild DAGs to growing one rebuild subgraph per stale agent into the
same DAG:

- JobQueue::append_subgraph(dag_id, nodes, dep_on) — the multi-node,
  multi-agent generalisation of append_node: rebases a subgraph's local deps
  onto the DAG's id space and roots it on the emitting node.
- NodeOutput.append_subgraph: Vec<Vec<NodeSpec>> — the executor→scheduler
  channel for it; scheduler drains it before completing the emitting node
  (same ordering as append_nodes).
- run_meta_lock sweep branch returns the stale agents' rebuild_nodes
  subgraphs via append_subgraph instead of fanout.

Follow-up commit collapses submit_boot_tree (drop boot_root + per-agent
reconcile child DAGs) so the whole boot is one DAG built inline.
This commit is contained in:
atlas 2026-07-15 01:11:01 +02:00 committed by mara
commit b6defdeaaf
3 changed files with 92 additions and 3 deletions

View file

@ -116,6 +116,15 @@ async fn handle_completion(
.job_queue
.append_node(claim.dag_id, kind, claim.node_id);
}
// Same before-completion ordering as `append_nodes`, but for
// whole per-agent subgraphs (the startup sweep's rebuild
// subgraphs growing into the boot DAG) — each an independent
// subgraph rooted on this node.
for subgraph in output.append_subgraph {
coord
.job_queue
.append_subgraph(claim.dag_id, subgraph, claim.node_id);
}
coord
.job_queue
.complete_node(claim.dag_id, claim.node_id, Ok(()));