mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-10 10:40:32 +01:00
* Stop gstack-uninstall deleting a repo's committed .gstack files and unsaved worktrees (GST-2197) --keep-state now keeps the repo's .gstack/ and .gstack-worktrees/. A plain uninstall keeps git-tracked .gstack files, removes only ignored state, and stops before removing anything when a worktree has uncommitted changes unless --force-worktrees is given. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Keep moved, config-hidden and committed worktree work from gstack-uninstall (GST-2197) The dirty-worktree guard now checks every checkout on disk under .gstack-worktrees/, pins git status flags so config cannot hide new files, refuses a checkout whose commits no branch or tag holds, and keeps .gstack/ when git cannot list its tracked files. Review-Finding: p1/red-team#2 reader=red-team Review-Finding: p1/red-team#3 reader=red-team Review-Finding: p1/specialist-batched#1 reader=security Review-Finding: p1/red-team#4 reader=red-team Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Make gstack-uninstall list worktree checkouts safely and never run their config (GST-2197) Checkouts are listed NUL-separated and through a symlinked .gstack-worktrees, only worktrees this repository registered are opened with git, and those git calls turn off fsmonitor, hooks and optional index writes. Review-Finding: v1/adversarial-native#1 reader=adversarial-native Review-Finding: v1/adversarial-native#5 reader=adversarial-native Review-Finding: v1/adversarial-native#2 reader=adversarial-native Review-Loop-Grant: a-f3b2ff8e662e Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Check a .gstack-worktrees that is itself a git repo before gstack-uninstall deletes it (GST-2197) Review-Finding: fc1/fix-check#1 reader=fix-check Review-Loop-Grant: a-3b80e7929588 Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Document what gstack-uninstall keeps and refuses, and the new --force-worktrees flag (GST-2197) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Stop gstack-uninstall dropping the registration of worktrees it did not delete (GST-2197) Uninstall ran a repo-wide git worktree prune, which unregistered every worktree whose folder was missing at that moment, including ones outside .gstack-worktrees on an unmounted drive, and left their detached commits unreachable. It now unregisters only the gstack checkouts it just removed. Review-Finding: p1/red-team#1 reader=red-team Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Say that gstack-uninstall does not yet check worktrees nested inside another checkout (GST-2197) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Stop gstack-uninstall deleting checkouts through a .gstack-worktrees symlink that points outside the repo (GST-2197) Review-Finding: p1/red-team#1 reader=red-team Review-Finding: p1/red-team#2 reader=red-team Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Make gstack-uninstall remove only the link when .gstack-worktrees is a symlink, as before (GST-2197) Review-Finding: p2/red-team#1 reader=red-team Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Drop release-note wording from the gstack-uninstall docs (GST-2197) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>