From ffac356c7b19c5f42f54c937b49a698bc7d41f45 Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Mon, 2 Mar 2026 22:02:43 -0500 Subject: [PATCH] Add pass numbering to parallel branch names to prevent overwrites on retry Parallel branches now include the node visit count (pass1, pass2, etc.) in their ref names, preventing silent overwrite when a parallel node is re-executed via retry or loop_restart. Co-Authored-By: Claude Opus 4.6 (1M context) --- crates/arc-workflows/src/handler/parallel.rs | 4 +++- crates/arc-workflows/tests/integration.rs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/arc-workflows/src/handler/parallel.rs b/crates/arc-workflows/src/handler/parallel.rs index a648db3a6..d516d8d90 100644 --- a/crates/arc-workflows/src/handler/parallel.rs +++ b/crates/arc-workflows/src/handler/parallel.rs @@ -280,10 +280,12 @@ impl Handler for ParallelHandler { let (branch_sandbox, worktree_path): (Arc, Option) = if let (Some(ref gs), Some(ref bsha)) = (&git_state, &base_sha) { let branch_key = &target_id; + let visit = crate::engine::visit_from_context(&branch_context); let branch_name = format!( - "arc/run/parallel/{}/{}/{}", + "arc/run/parallel/{}/{}/pass{}/{}", gs.run_id, crate::git::sanitize_ref_component(&node.id), + visit, crate::git::sanitize_ref_component(branch_key), ); diff --git a/crates/arc-workflows/tests/integration.rs b/crates/arc-workflows/tests/integration.rs index 59a48029c..ec5f2db91 100644 --- a/crates/arc-workflows/tests/integration.rs +++ b/crates/arc-workflows/tests/integration.rs @@ -9582,7 +9582,7 @@ async fn parallel_git_branching_host_e2e() { ); // 10. Verify parallel branch refs still exist (for debugging) - let branch_ref_a = format!("arc/run/parallel/{run_id}/fan-out/branch-a"); + let branch_ref_a = format!("arc/run/parallel/{run_id}/fan-out/pass1/branch-a"); let ref_check = std::process::Command::new("git") .args(["rev-parse", "--verify", &branch_ref_a]) .current_dir(repo.path())