storkit: merge 387_story_configurable_base_branch_name_in_project_toml

This commit is contained in:
dave
2026-03-25 13:30:48 +00:00
parent 96ebd7ecb8
commit a1a30bcc42
4 changed files with 157 additions and 3 deletions
+20 -2
View File
@@ -69,7 +69,10 @@ pub async fn create_worktree(
) -> Result<WorktreeInfo, String> {
let wt_path = worktree_path(project_root, story_id);
let branch = branch_name(story_id);
let base_branch = detect_base_branch(project_root);
let base_branch = config
.base_branch
.clone()
.unwrap_or_else(|| detect_base_branch(project_root));
let root = project_root.to_path_buf();
// Already exists — reuse (ensure sparse checkout is configured)
@@ -199,7 +202,10 @@ pub async fn remove_worktree_by_story_id(
return Err(format!("Worktree not found for story: {story_id}"));
}
let branch = branch_name(story_id);
let base_branch = detect_base_branch(project_root);
let base_branch = config
.base_branch
.clone()
.unwrap_or_else(|| detect_base_branch(project_root));
let info = WorktreeInfo {
path,
branch,
@@ -519,6 +525,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
// Should complete without panic
run_setup_commands(tmp.path(), &config).await;
@@ -540,6 +547,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
// Should complete without panic
run_setup_commands(tmp.path(), &config).await;
@@ -561,6 +569,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
// Setup command failures are non-fatal — should not panic or propagate
run_setup_commands(tmp.path(), &config).await;
@@ -582,6 +591,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
// Teardown failures are best-effort — should not propagate
assert!(run_teardown_commands(tmp.path(), &config).await.is_ok());
@@ -602,6 +612,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
let info = create_worktree(&project_root, "42_fresh_test", &config, 3001)
.await
@@ -629,6 +640,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
// First creation
let _info1 = create_worktree(&project_root, "43_reuse_test", &config, 3001)
@@ -697,6 +709,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
let result = remove_worktree_by_story_id(tmp.path(), "99_nonexistent", &config).await;
@@ -723,6 +736,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
create_worktree(&project_root, "88_remove_by_id", &config, 3001)
.await
@@ -796,6 +810,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
// Even though setup commands fail, create_worktree must succeed
// so the agent can start and fix the problem itself.
@@ -825,6 +840,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
// First creation — no setup commands, should succeed
create_worktree(&project_root, "173_reuse_fail", &empty_config, 3001)
@@ -844,6 +860,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
// Second call — worktree exists, setup commands fail, must still succeed
let result = create_worktree(&project_root, "173_reuse_fail", &failing_config, 3002).await;
@@ -869,6 +886,7 @@ mod tests {
default_coder_model: None,
max_coders: None,
max_retries: 2,
base_branch: None,
};
let info = create_worktree(&project_root, "77_remove_async", &config, 3001)
.await