aboutsummaryrefslogtreecommitdiff
path: root/scripts/sync-language-bundle.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/sync-language-bundle.sh')
-rwxr-xr-xscripts/sync-language-bundle.sh23
1 files changed, 19 insertions, 4 deletions
diff --git a/scripts/sync-language-bundle.sh b/scripts/sync-language-bundle.sh
index 45f8259..fe922af 100755
--- a/scripts/sync-language-bundle.sh
+++ b/scripts/sync-language-bundle.sh
@@ -105,7 +105,7 @@ inbox_drop() {
# shared generic rules, its hooks/githooks, and surfaces settings.json.
process_bundle() {
local kind="$1" src="${2%/}"
- local name rules rf f rel manual_before
+ local name rules rf f rel manual_before base
name="$(basename "$src")"
rules="$src/claude/rules"
[ -d "$rules" ] || return 0
@@ -126,12 +126,27 @@ process_bundle() {
HEADER_DONE=0
manual_before=$MANUAL
- # AUTO-FIX: language bundles carry the shared generic rules; team overlays
- # carry only their own rule(s).
+ # SWEEP: generic rules are installed once at ~/.claude/rules/ by `make
+ # install` and load in every session. Language bundles used to copy them into
+ # each project too, which made Claude Code load them twice — and project rules
+ # take priority over user-level ones, so a stale project copy silently
+ # overrode the fresh global rule until the next startup healed it. The bundle
+ # now owns only its own language rules, and sweeps the duplicates it shipped
+ # before.
+ #
+ # The sweep only fires when the global rule is actually present to take over.
+ # On a machine mid-bootstrap, or one where `make install` has not run, the
+ # project copy is the only copy and removing it would leave no rule at all.
if [ "$kind" = language ]; then
for f in "$GENERIC_RULES"/*.md; do
[ -f "$f" ] || continue
- fix "$f" "$PROJECT/.claude/rules/$(basename "$f")"
+ base="$(basename "$f")"
+ [ -f "$PROJECT/.claude/rules/$base" ] || continue
+ [ -f "$HOME/.claude/rules/$base" ] || continue
+ rm -f "$PROJECT/.claude/rules/$base"
+ ensure_header
+ OUT+=" swept .claude/rules/$base (duplicate of ~/.claude/rules/)"$'\n'
+ FIXED=$((FIXED + 1))
done
fi
for f in "$rules"/*.md; do