diff --git a/labs/12-product-engineering-loop/boatstack-distribution/release-notes/2026-07-21-prevent-worktree-dirty-state.md b/labs/12-product-engineering-loop/boatstack-distribution/release-notes/2026-07-21-prevent-worktree-dirty-state.md new file mode 100644 index 000000000..86529055e --- /dev/null +++ b/labs/12-product-engineering-loop/boatstack-distribution/release-notes/2026-07-21-prevent-worktree-dirty-state.md @@ -0,0 +1,4 @@ +### Ignore linked worktrees to prevent primary checkout dirty state + +Boatstack now automatically ignores `worktrees/` inside the `.product-loop/` directory by explicitly adding it to the generated `.product-loop/.gitignore` file. This prevents linked worktree directories from dirtying the primary repository checkout, ensuring commands like `boatstack-update` can run smoothly. Users should still commit or clean up their untracked `features/` and `intake/` copies before updating. + diff --git a/labs/12-product-engineering-loop/product-engineering-loop/export.go b/labs/12-product-engineering-loop/product-engineering-loop/export.go index 16d6991a0..7c3b54a87 100644 --- a/labs/12-product-engineering-loop/product-engineering-loop/export.go +++ b/labs/12-product-engineering-loop/product-engineering-loop/export.go @@ -211,7 +211,7 @@ func BuildExportBundle(configPath string, config ProjectConfig, rawConfig []byte return ExportBundle{}, err } files[".product-loop/project.json"] = projectJSON - files[".product-loop/.gitignore"] = []byte("bin/\n") + files[".product-loop/.gitignore"] = []byte("bin/\nworktrees/\n") files[".product-loop/intake/.gitkeep"] = []byte{} files[".product-loop/hooks/guard.sh"] = guardShellScript() files[".product-loop/hooks/guard.ps1"] = guardPowerShellScript()