diff options
| author | soryu <soryu@soryu.co> | 2026-01-29 02:30:16 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-01-29 02:30:16 +0000 |
| commit | 7af8561677cfdcfd23d099a25783c7fef51d1ba6 (patch) | |
| tree | a15cddfa7e5492c3d883419e60a1dad3c9d2d0f3 /makima/src/server/handlers/contracts.rs | |
| parent | cfe3ea0aae878ae8f591acdc33a48332ac875b9e (diff) | |
| download | soryu-7af8561677cfdcfd23d099a25783c7fef51d1ba6.tar.gz soryu-7af8561677cfdcfd23d099a25783c7fef51d1ba6.zip | |
Fix worktree cleanup to not run for shared worktrees
Diffstat (limited to 'makima/src/server/handlers/contracts.rs')
| -rw-r--r-- | makima/src/server/handlers/contracts.rs | 13 |
1 files changed, 13 insertions, 0 deletions
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, |
