huskies: rename project from storkit to huskies

Rename all references from storkit to huskies across the codebase:
- .storkit/ directory → .huskies/
- Binary name, Cargo package name, Docker image references
- Server code, frontend code, config files, scripts
- Fix script/test to build frontend before cargo clippy/test
  so merge worktrees have frontend/dist available for RustEmbed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Timmy
2026-04-03 16:12:52 +01:00
parent a7035b6ba7
commit 2d8ccb3eb6
572 changed files with 1340 additions and 1220 deletions
+33 -33
View File
@@ -87,7 +87,7 @@ impl AgentPool {
let front_matter_agent: Option<String> = if agent_name.is_none() {
find_active_story_stage(project_root, story_id).and_then(|stage_dir| {
let path = project_root
.join(".storkit")
.join(".huskies")
.join("work")
.join(stage_dir)
.join(format!("{story_id}.md"));
@@ -873,7 +873,7 @@ mod tests {
#[tokio::test]
async fn start_agent_auto_selects_second_coder_when_first_busy() {
let tmp = tempfile::tempdir().unwrap();
let sk = tmp.path().join(".storkit");
let sk = tmp.path().join(".huskies");
std::fs::create_dir_all(&sk).unwrap();
std::fs::write(
sk.join("project.toml"),
@@ -919,7 +919,7 @@ stage = "coder"
#[tokio::test]
async fn start_agent_returns_busy_when_all_coders_occupied() {
let tmp = tempfile::tempdir().unwrap();
let sk = tmp.path().join(".storkit");
let sk = tmp.path().join(".huskies");
std::fs::create_dir_all(&sk).unwrap();
std::fs::write(
sk.join("project.toml"),
@@ -951,7 +951,7 @@ stage = "coder"
#[tokio::test]
async fn start_agent_moves_story_to_current_when_coders_busy() {
let tmp = tempfile::tempdir().unwrap();
let sk = tmp.path().join(".storkit");
let sk = tmp.path().join(".huskies");
let backlog = sk.join("work/1_backlog");
std::fs::create_dir_all(&backlog).unwrap();
std::fs::write(
@@ -996,7 +996,7 @@ stage = "coder"
#[tokio::test]
async fn start_agent_story_already_in_current_is_noop() {
let tmp = tempfile::tempdir().unwrap();
let sk = tmp.path().join(".storkit");
let sk = tmp.path().join(".huskies");
let current = sk.join("work/2_current");
std::fs::create_dir_all(&current).unwrap();
std::fs::write(
@@ -1023,7 +1023,7 @@ stage = "coder"
#[tokio::test]
async fn start_agent_explicit_name_unchanged_when_busy() {
let tmp = tempfile::tempdir().unwrap();
let sk = tmp.path().join(".storkit");
let sk = tmp.path().join(".huskies");
std::fs::create_dir_all(&sk).unwrap();
std::fs::write(
sk.join("project.toml"),
@@ -1062,7 +1062,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(&sk_dir).unwrap();
fs::write(sk_dir.join("project.toml"), "[[agent]]\nname = \"qa\"\n").unwrap();
@@ -1089,7 +1089,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(&sk_dir).unwrap();
fs::write(sk_dir.join("project.toml"), "[[agent]]\nname = \"qa\"\n").unwrap();
@@ -1115,7 +1115,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(&sk_dir).unwrap();
fs::write(
sk_dir.join("project.toml"),
@@ -1123,7 +1123,7 @@ stage = "coder"
)
.unwrap();
let upcoming = root.join(".storkit/work/1_backlog");
let upcoming = root.join(".huskies/work/1_backlog");
fs::create_dir_all(&upcoming).unwrap();
fs::write(upcoming.join("50_story_test.md"), "---\nname: Test\n---\n").unwrap();
@@ -1181,7 +1181,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(&sk_dir).unwrap();
fs::write(sk_dir.join("project.toml"), "[[agent]]\nname = \"qa\"\n").unwrap();
@@ -1207,7 +1207,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(&sk_dir).unwrap();
fs::write(
sk_dir.join("project.toml"),
@@ -1238,20 +1238,20 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path().to_path_buf();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(sk_dir.join("work/1_backlog")).unwrap();
fs::write(
root.join(".storkit/project.toml"),
root.join(".huskies/project.toml"),
"[[agent]]\nname = \"coder-1\"\n",
)
.unwrap();
fs::write(
root.join(".storkit/work/1_backlog/86_story_foo.md"),
root.join(".huskies/work/1_backlog/86_story_foo.md"),
"---\nname: Foo\n---\n",
)
.unwrap();
fs::write(
root.join(".storkit/work/1_backlog/130_story_bar.md"),
root.join(".huskies/work/1_backlog/130_story_bar.md"),
"---\nname: Bar\n---\n",
)
.unwrap();
@@ -1303,7 +1303,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(&sk_dir).unwrap();
fs::write(
sk_dir.join("project.toml"),
@@ -1340,7 +1340,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(&sk_dir).unwrap();
fs::write(
sk_dir.join("project.toml"),
@@ -1372,15 +1372,15 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path().to_path_buf();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(sk_dir.join("work/2_current")).unwrap();
fs::write(
root.join(".storkit/project.toml"),
root.join(".huskies/project.toml"),
"[[agent]]\nname = \"coder-1\"\n\n[[agent]]\nname = \"coder-2\"\n",
)
.unwrap();
fs::write(
root.join(".storkit/work/2_current/42_story_foo.md"),
root.join(".huskies/work/2_current/42_story_foo.md"),
"---\nname: Foo\n---\n",
)
.unwrap();
@@ -1426,15 +1426,15 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(sk_dir.join("work/1_backlog")).unwrap();
fs::write(
root.join(".storkit/project.toml"),
root.join(".huskies/project.toml"),
"[[agent]]\nname = \"coder-1\"\n\n[[agent]]\nname = \"coder-2\"\n",
)
.unwrap();
fs::write(
root.join(".storkit/work/1_backlog/99_story_baz.md"),
root.join(".huskies/work/1_backlog/99_story_baz.md"),
"---\nname: Baz\n---\n",
)
.unwrap();
@@ -1464,7 +1464,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(sk_dir.join("work/2_current")).unwrap();
fs::write(
sk_dir.join("project.toml"),
@@ -1501,7 +1501,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(sk_dir.join("work/3_qa")).unwrap();
fs::write(
sk_dir.join("project.toml"),
@@ -1538,7 +1538,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(sk_dir.join("work/4_merge")).unwrap();
fs::write(
sk_dir.join("project.toml"),
@@ -1575,7 +1575,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(sk_dir.join("work/2_current")).unwrap();
fs::write(
sk_dir.join("project.toml"),
@@ -1611,7 +1611,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let sk_dir = root.join(".storkit");
let sk_dir = root.join(".huskies");
fs::create_dir_all(sk_dir.join("work/4_merge")).unwrap();
fs::write(
sk_dir.join("project.toml"),
@@ -1674,7 +1674,7 @@ stage = "coder"
#[tokio::test]
async fn start_agent_honours_front_matter_agent_when_idle() {
let tmp = tempfile::tempdir().unwrap();
let sk = tmp.path().join(".storkit");
let sk = tmp.path().join(".huskies");
let backlog = sk.join("work/1_backlog");
std::fs::create_dir_all(&backlog).unwrap();
std::fs::write(
@@ -1730,7 +1730,7 @@ stage = "coder"
#[tokio::test]
async fn start_agent_returns_error_when_front_matter_agent_busy() {
let tmp = tempfile::tempdir().unwrap();
let sk = tmp.path().join(".storkit");
let sk = tmp.path().join(".huskies");
let backlog = sk.join("work/1_backlog");
std::fs::create_dir_all(&backlog).unwrap();
std::fs::write(
@@ -1781,7 +1781,7 @@ stage = "coder"
let tmp = tempfile::tempdir().unwrap();
let root = tmp.path();
let current = root.join(".storkit/work/2_current");
let current = root.join(".huskies/work/2_current");
fs::create_dir_all(&current).unwrap();
fs::write(current.join("60_story_cleanup.md"), "test").unwrap();
@@ -1804,7 +1804,7 @@ stage = "coder"
assert_eq!(remaining[0].story_id, "61_story_other");
assert!(
root.join(".storkit/work/5_done/60_story_cleanup.md")
root.join(".huskies/work/5_done/60_story_cleanup.md")
.exists()
);
}