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
+20 -20
View File
@@ -4,7 +4,7 @@ use std::path::Path;
/// Only untouched templates contain this marker — real project content
/// will never include it, so it avoids false positives when the project
/// itself is an "Agentic AI Code Assistant".
const TEMPLATE_SENTINEL: &str = "<!-- storkit:scaffold-template -->";
const TEMPLATE_SENTINEL: &str = "<!-- huskies:scaffold-template -->";
/// Marker found in the default `script/test` scaffold output.
const TEMPLATE_MARKER_SCRIPT: &str = "No tests configured";
@@ -18,7 +18,7 @@ pub struct OnboardingStatus {
pub needs_stack: bool,
/// True when `script/test` still contains the scaffold placeholder.
pub needs_test_script: bool,
/// True when `.storkit/project.toml` is missing or has no
/// True when `.huskies/project.toml` is missing or has no
/// `[[component]]` entries.
pub needs_project_toml: bool,
}
@@ -33,7 +33,7 @@ impl OnboardingStatus {
/// Inspect the project at `project_root` and determine which onboarding
/// steps are still required.
pub fn check_onboarding_status(project_root: &Path) -> OnboardingStatus {
let story_kit = project_root.join(".storkit");
let story_kit = project_root.join(".huskies");
OnboardingStatus {
needs_context: is_template_or_missing(
@@ -99,13 +99,13 @@ mod tests {
// Write content that includes the scaffold sentinel
fs::write(
root.join(".storkit/specs/00_CONTEXT.md"),
"<!-- storkit:scaffold-template -->\n# Project Context\nPlaceholder...",
root.join(".huskies/specs/00_CONTEXT.md"),
"<!-- huskies:scaffold-template -->\n# Project Context\nPlaceholder...",
)
.unwrap();
fs::write(
root.join(".storkit/specs/tech/STACK.md"),
"<!-- storkit:scaffold-template -->\n# Tech Stack\nPlaceholder...",
root.join(".huskies/specs/tech/STACK.md"),
"<!-- huskies:scaffold-template -->\n# Tech Stack\nPlaceholder...",
)
.unwrap();
@@ -123,12 +123,12 @@ mod tests {
// Real project content that happens to mention "Agentic AI Code Assistant"
// but does NOT contain the scaffold sentinel — should NOT trigger onboarding.
fs::write(
root.join(".storkit/specs/00_CONTEXT.md"),
root.join(".huskies/specs/00_CONTEXT.md"),
"# Project Context\nTo build a standalone Agentic AI Code Assistant application.",
)
.unwrap();
fs::write(
root.join(".storkit/specs/tech/STACK.md"),
root.join(".huskies/specs/tech/STACK.md"),
"# Tech Stack\nThis is an Agentic Code Assistant binary.",
)
.unwrap();
@@ -145,12 +145,12 @@ mod tests {
let root = setup_project(&dir);
fs::write(
root.join(".storkit/specs/00_CONTEXT.md"),
root.join(".huskies/specs/00_CONTEXT.md"),
"# My Project\n\nThis is an e-commerce platform for selling widgets.",
)
.unwrap();
fs::write(
root.join(".storkit/specs/tech/STACK.md"),
root.join(".huskies/specs/tech/STACK.md"),
"# Tech Stack\n\n## Backend: Python + FastAPI\n## Frontend: React + TypeScript",
)
.unwrap();
@@ -166,8 +166,8 @@ mod tests {
let dir = TempDir::new().unwrap();
let root = setup_project(&dir);
fs::write(root.join(".storkit/specs/00_CONTEXT.md"), " \n").unwrap();
fs::write(root.join(".storkit/specs/tech/STACK.md"), "").unwrap();
fs::write(root.join(".huskies/specs/00_CONTEXT.md"), " \n").unwrap();
fs::write(root.join(".huskies/specs/tech/STACK.md"), "").unwrap();
let status = check_onboarding_status(&root);
assert!(status.needs_context);
@@ -222,7 +222,7 @@ mod tests {
let dir = TempDir::new().unwrap();
let root = setup_project(&dir);
fs::write(root.join(".storkit/project.toml"), "# empty config\n").unwrap();
fs::write(root.join(".huskies/project.toml"), "# empty config\n").unwrap();
let status = check_onboarding_status(&root);
assert!(status.needs_project_toml);
@@ -234,7 +234,7 @@ mod tests {
let root = setup_project(&dir);
fs::write(
root.join(".storkit/project.toml"),
root.join(".huskies/project.toml"),
"[[component]]\nname = \"app\"\npath = \".\"\nsetup = [\"cargo check\"]\n",
)
.unwrap();
@@ -252,12 +252,12 @@ mod tests {
// Write real content for the required onboarding files
fs::write(
root.join(".storkit/specs/00_CONTEXT.md"),
root.join(".huskies/specs/00_CONTEXT.md"),
"# My Project\n\nReal project context.",
)
.unwrap();
fs::write(
root.join(".storkit/specs/tech/STACK.md"),
root.join(".huskies/specs/tech/STACK.md"),
"# My Stack\n\nReal stack content.",
)
.unwrap();
@@ -289,13 +289,13 @@ mod tests {
// Context still has sentinel
fs::write(
root.join(".storkit/specs/00_CONTEXT.md"),
"<!-- storkit:scaffold-template -->\n# Project Context\nPlaceholder...",
root.join(".huskies/specs/00_CONTEXT.md"),
"<!-- huskies:scaffold-template -->\n# Project Context\nPlaceholder...",
)
.unwrap();
// Stack is customised (no sentinel)
fs::write(
root.join(".storkit/specs/tech/STACK.md"),
root.join(".huskies/specs/tech/STACK.md"),
"# My Stack\nRuby on Rails + PostgreSQL",
)
.unwrap();