storkit: merge 371_bug_no_arg_storkit_in_empty_directory_skips_scaffold

This commit is contained in:
dave
2026-03-23 14:06:05 +00:00
parent fbab93f493
commit 5c8c4b7ff3
2 changed files with 46 additions and 7 deletions

View File

@@ -876,6 +876,39 @@ mod tests {
assert!(content.contains("localhost"), "mcp.json should reference localhost"); assert!(content.contains("localhost"), "mcp.json should reference localhost");
} }
/// Regression test for bug 371: no-arg `storkit` in empty directory skips scaffold.
/// `open_project` on a directory without `.storkit/` must create all required scaffold
/// files — the same files that `storkit .` produces.
#[tokio::test]
async fn open_project_on_empty_dir_creates_full_scaffold() {
let dir = tempdir().unwrap();
let project_dir = dir.path().join("myproject");
fs::create_dir_all(&project_dir).unwrap();
let store = make_store(&dir);
let state = SessionState::default();
open_project(project_dir.to_string_lossy().to_string(), &state, &store, 3001)
.await
.unwrap();
assert!(
project_dir.join(".storkit/project.toml").exists(),
"open_project must create .storkit/project.toml"
);
assert!(
project_dir.join(".mcp.json").exists(),
"open_project must create .mcp.json"
);
assert!(
project_dir.join("CLAUDE.md").exists(),
"open_project must create CLAUDE.md"
);
assert!(
project_dir.join("script/test").exists(),
"open_project must create script/test"
);
}
#[tokio::test] #[tokio::test]
async fn close_project_clears_root() { async fn close_project_clears_root() {
let dir = tempdir().unwrap(); let dir = tempdir().unwrap();

View File

@@ -177,13 +177,19 @@ async fn main() -> Result<(), std::io::Error> {
config::ProjectConfig::load(&project_root) config::ProjectConfig::load(&project_root)
.unwrap_or_else(|e| panic!("Invalid project.toml: {e}")); .unwrap_or_else(|e| panic!("Invalid project.toml: {e}"));
} else { } else {
// No .storkit/ found — fall back to cwd so existing behaviour is preserved. // No .storkit/ found in cwd or parents — scaffold cwd as a new
// TRACE:MERGE-DEBUG — remove once root cause is found // project, exactly like `storkit .` does.
slog!( io::fs::open_project(
"[MERGE-DEBUG] main: no .storkit/ found, falling back to cwd {:?}", cwd.to_string_lossy().to_string(),
cwd &app_state,
); store.as_ref(),
*app_state.project_root.lock().unwrap() = Some(cwd.clone()); port,
)
.await
.unwrap_or_else(|e| {
slog!("Warning: failed to scaffold project at {cwd:?}: {e}");
cwd.to_string_lossy().to_string()
});
} }
} }