mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-13 00:19:03 +02:00
fix(uninstall): provenance-gate the shape-2 and cursor sweeps; document the alias-name coupling
Three ways gstack-uninstall could touch a user's own skills: - Shape 2 (real dir + symlinked SKILL.md) matched the link target against a bare *gstack* substring, so a skill symlinked from ~/tools/gstack-fork/ was wiped on uninstall. The gate now requires "gstack" as an anchored path segment (gstack/*|*/gstack/*, same pattern as shape 1) AND the dir name in gstack's skill inventory (parity with shape 3); anything else is listed to stderr, never deleted. - The new Cursor removals (~/.cursor/skills/gstack* and repo-local .cursor/skills/gstack*) rm -rf'd any glob match with no provenance check, so a hand-written ~/.cursor/skills/gstack-fork-notes was swept. Real dirs now require the AUTO-GENERATED banner in SKILL.md; non-matching dirs are kept and listed. Legacy codex/factory/kiro globs are untouched (tracked in TODOS as a follow-up). - The _INVENTORY seed list hardcodes alias names created by setup's _install_alias_skill_md; both sites now carry mirrored keep-in-sync comments so a renamed alias can't silently strand its dir. The skipped-entry report moves to the end of the run so cursor skips are listed alongside the Claude ones. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
166ac2ceee
commit
4a95ce61a0
@@ -843,6 +843,10 @@ link_claude_skill_dirs() {
|
||||
# (#2511, #2201). Copy-then-rewrite instead: sed reads the SOURCE and writes a
|
||||
# fresh copy with name: set to the alias. It must never edit through an
|
||||
# existing symlink — that would rewrite the generated source file itself.
|
||||
# NOTE: every alias name passed to this helper (_gstack-command,
|
||||
# connect-chrome, gstack-connect-chrome) is hardcoded in the _INVENTORY seed
|
||||
# list in bin/gstack-uninstall — keep the two sites in sync when adding or
|
||||
# renaming an alias, or uninstall will refuse to delete the new alias dir.
|
||||
_install_alias_skill_md() {
|
||||
local src_skill_md="$1"
|
||||
local dst_dir="$2"
|
||||
|
||||
Reference in New Issue
Block a user