From 7af8561677cfdcfd23d099a25783c7fef51d1ba6 Mon Sep 17 00:00:00 2001 From: soryu Date: Thu, 29 Jan 2026 02:30:16 +0000 Subject: Fix worktree cleanup to not run for shared worktrees --- makima/src/server/handlers/contracts.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'makima/src/server/handlers/contracts.rs') diff --git a/makima/src/server/handlers/contracts.rs b/makima/src/server/handlers/contracts.rs index 3ad38da..7ed84e3 100644 --- a/makima/src/server/handlers/contracts.rs +++ b/makima/src/server/handlers/contracts.rs @@ -301,6 +301,7 @@ pub async fn create_contract( merge_mode: None, branched_from_task_id: None, conversation_history: None, + supervisor_worktree_task_id: None, // Supervisor uses its own worktree }; match repository::create_task_for_owner(pool, auth.owner_id, supervisor_req).await { @@ -1673,7 +1674,19 @@ async fn cleanup_contract_worktrees( ); // Send cleanup command to each task's daemon + // Skip tasks that share a supervisor's worktree (they don't own the worktree) for task in tasks { + // Skip tasks that reuse the supervisor's worktree - the supervisor owns it + if task.supervisor_worktree_task_id.is_some() { + tracing::debug!( + task_id = %task.id, + supervisor_worktree_task_id = ?task.supervisor_worktree_task_id, + contract_id = %contract_id, + "Task shares supervisor worktree, skipping worktree cleanup" + ); + continue; + } + if let Some(daemon_id) = task.daemon_id { let cmd = crate::server::state::DaemonCommand::CleanupWorktree { task_id: task.id, -- cgit v1.2.3