fix(agents-init): address final review issues (CLAUDE.md safety, rm-rf guard, gitignore anchoring, worktree detection)

This commit is contained in:
2026-06-12 22:09:44 -04:00
parent 11dc584104
commit 45cba3a15b
2 changed files with 14 additions and 16 deletions
+1 -1
View File
@@ -37,7 +37,7 @@ function _agents_init_ensure_gitignore
# Prefer git check-ignore (respects wildcards, parent globs, negations).
# --no-index lets it evaluate non-existent paths.
set -l already_ignored 0
if test -d "$root/.git"
if git -C "$root" rev-parse --git-dir >/dev/null 2>&1
git -C "$root" check-ignore -q --no-index "$pattern" 2>/dev/null
and set already_ignored 1
else if test -f "$gitignore"
+13 -15
View File
@@ -71,7 +71,7 @@ function agents-init --description 'scaffold AGENTS/ sub-repo with agent spec fi
set -l plugins_dir "$agents_dir/plugins"
# ─────────────────────── Always: AGENTS/ sub-repo ───────────────────────
set -l did_init 0 # ponytail: set to 1 after git init — consumed by auto-commit in Task 5
set -l did_init 0 # set to 1 when git init runs this invocation; selects commit message
if not test -d "$agents_dir"
if not mkdir -p "$agents_dir"
@@ -129,17 +129,11 @@ function agents-init --description 'scaffold AGENTS/ sub-repo with agent spec fi
echo "$c_ok→ Linked AGENTS.md → AGENTS/AGENTS.md$c_reset"
end
# Move real CLAUDE.md into sub-repo if it exists as a regular file
if test -f "$root/CLAUDE.md"; and not test -L "$root/CLAUDE.md"
if not mv "$root/CLAUDE.md" "$agents_dir/CLAUDE.md"
echo "$c_err""Error: could not move CLAUDE.md → AGENTS/CLAUDE.md$c_reset" >&2
return 1
end
echo "$c_ok→ Moved CLAUDE.md → AGENTS/CLAUDE.md$c_reset"
end
# Symlink CLAUDE.md → AGENTS/AGENTS.md in project root
if not test -L "$root/CLAUDE.md"
# If a real CLAUDE.md already exists, warn and skip — don't clobber or orphan content.
if test -f "$root/CLAUDE.md"; and not test -L "$root/CLAUDE.md"
echo "$c_warn""Warning: CLAUDE.md exists as a real file — skipping symlink. Remove it manually to let agents-init manage it.$c_reset" >&2
else if not test -L "$root/CLAUDE.md"
if not ln -s AGENTS/AGENTS.md "$root/CLAUDE.md"
echo "$c_err""Error: could not create CLAUDE.md symlink$c_reset" >&2
return 1
@@ -148,7 +142,7 @@ function agents-init --description 'scaffold AGENTS/ sub-repo with agent spec fi
end
# Update .gitignore
for pattern in "AGENTS/" "AGENTS.md" "CLAUDE.md"
for pattern in "AGENTS/" "/AGENTS.md" "/CLAUDE.md"
_agents_init_ensure_gitignore "$root" "$pattern"
end
end
@@ -171,13 +165,17 @@ function agents-init --description 'scaffold AGENTS/ sub-repo with agent spec fi
# If a real directory exists in docs/, move its contents to AGENTS/plugins/
if test -d "$docs_target"; and not test -L "$docs_target"
if test -n (ls -A $docs_target 2>/dev/null)
set -l contents (ls -A "$docs_target" 2>/dev/null)
if test (count $contents) -gt 0
if not cp -r "$docs_target/." "$agents_target/"
echo "$c_err""Error: could not move docs/$plug → AGENTS/plugins/$plug$c_reset" >&2
echo "$c_err""Error: could not copy docs/$plug → AGENTS/plugins/$plug$c_reset" >&2
return 1
end
end
rm -rf "$docs_target"
if not rm -rf "$docs_target"
echo "$c_err""Error: could not remove docs/$plug after copy$c_reset" >&2
return 1
end
echo "$c_ok→ Moved docs/$plug → AGENTS/plugins/$plug$c_reset"
end