summaryrefslogtreecommitdiff
path: root/makima/src/server/handlers/contracts.rs
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-29 02:30:16 +0000
committersoryu <soryu@soryu.co>2026-01-29 02:30:16 +0000
commit7af8561677cfdcfd23d099a25783c7fef51d1ba6 (patch)
treea15cddfa7e5492c3d883419e60a1dad3c9d2d0f3 /makima/src/server/handlers/contracts.rs
parentcfe3ea0aae878ae8f591acdc33a48332ac875b9e (diff)
downloadsoryu-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.rs13
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,