From a3c7064606b4d92413f1fd10f4fcc03cc82a8473 Mon Sep 17 00:00:00 2001 From: Mike-Swanson Date: Sun, 24 May 2026 10:24:05 -0700 Subject: [PATCH] chore: purge garbled Windows-path filenames; guard sync.sh against recurrence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed 5 tracked files whose names were mangled Windows paths (C:\ProgramData\..., D:\claudetools\.claude\current-mode, and version-bump script fragments) — the illegal :/\ chars were stored as Unicode Private-Use-Area substitutes (U+F03A, U+F00A). Added purge_garbled_paths() to sync.sh: before each 'git add -A', any UNTRACKED path containing control chars, ':', '\', or PUA U+E000-U+F8FF bytes is removed and not staged, so this cruft never reaches Gitea again. Tracked content is never auto-deleted. Co-Authored-By: Claude Opus 4.7 (1M context) --- ...' fi', '', ' # Dashboard', r | 0 ... ' fi', '', ' # Server', r | 0 ...[[ == true ]]; then', ' log Committing | 0 .claude/scripts/sync.sh | 26 +++++++++++++++++++ CProgramDatagp_user.txt | 0 Dclaudetools.claudecurrent-mode | 1 - 6 files changed, 26 insertions(+), 1 deletion(-) delete mode 100644 ', ' VERSION_BUMPED=true', ' fi', '', ' # Dashboard', r delete mode 100644 ', ' VERSION_BUMPED=true', ' fi', '', ' # Server', r delete mode 100644 ', ' VERSION_BUMPED=true', ' fi', '', ' if [[ == true ]]; then', ' log Committing delete mode 100644 CProgramDatagp_user.txt delete mode 100644 Dclaudetools.claudecurrent-mode diff --git a/', ' VERSION_BUMPED=true', ' fi', '', ' # Dashboard', r b/', ' VERSION_BUMPED=true', ' fi', '', ' # Dashboard', r deleted file mode 100644 index e69de29..0000000 diff --git a/', ' VERSION_BUMPED=true', ' fi', '', ' # Server', r b/', ' VERSION_BUMPED=true', ' fi', '', ' # Server', r deleted file mode 100644 index e69de29..0000000 diff --git a/', ' VERSION_BUMPED=true', ' fi', '', ' if [[ == true ]]; then', ' log Committing b/', ' VERSION_BUMPED=true', ' fi', '', ' if [[ == true ]]; then', ' log Committing deleted file mode 100644 index e69de29..0000000 diff --git a/.claude/scripts/sync.sh b/.claude/scripts/sync.sh index 255d42a..b831a66 100755 --- a/.claude/scripts/sync.sh +++ b/.claude/scripts/sync.sh @@ -12,6 +12,30 @@ YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' +# --- Guard: strip Windows path-as-filename cruft before staging ------------- +# Windows machines occasionally drop files literally named like "C:\path" or +# ".claude\current-mode" into the repo. The illegal ':' / '\' chars get stored +# as Unicode Private-Use-Area substitutes (U+F03A, U+F00A, ...). A blind +# `git add -A` would stage and propagate them to Gitea. This removes any such +# UNTRACKED path before staging. Only untracked files are touched — tracked +# content is never auto-deleted (use `git rm` for that, deliberately). +purge_garbled_paths() { + local rec st p removed=0 + while IFS= read -r -d '' rec; do + st="${rec:0:2}" + p="${rec:3}" + [ -z "$p" ] && continue + [ "$st" = "??" ] || continue # untracked only + if printf '%s' "$p" | LC_ALL=C grep -qaP '[\x00-\x1f\\:]|\xee[\x80-\xbf]|\xef[\x80-\xa3]'; then + echo -e "${YELLOW}[WARNING]${NC} Removing garbled untracked path before staging: $(printf '%s' "$p" | cat -v)" + rm -f -- "$p" 2>/dev/null || true + removed=1 + fi + done < <(git status --porcelain -z) + [ "$removed" = 1 ] && echo -e "${YELLOW}[WARNING]${NC} Garbled Windows path-as-filename cruft removed (not synced)." + return 0 +} + # Machine + timestamp if [ -n "$COMPUTERNAME" ]; then MACHINE="$COMPUTERNAME" @@ -100,6 +124,7 @@ if [ -n "$(git status --porcelain)" ]; then echo "" echo -e "${GREEN}[OK]${NC} Staging all changes..." + purge_garbled_paths git add -A # Commit message (Co-Authored-By uses local git user if configured) @@ -275,6 +300,7 @@ else # Commit any local vault changes (porcelain catches untracked-only too) if [ -n "$(git status --porcelain)" ]; then echo -e "${YELLOW}[INFO]${NC} Local vault changes detected — committing..." + purge_garbled_paths git add -A git commit -m "sync: auto-sync vault from $MACHINE at $TIMESTAMP" echo -e "${GREEN}[OK]${NC} Vault committed." diff --git a/CProgramDatagp_user.txt b/CProgramDatagp_user.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Dclaudetools.claudecurrent-mode b/Dclaudetools.claudecurrent-mode deleted file mode 100644 index 38f8e88..0000000 --- a/Dclaudetools.claudecurrent-mode +++ /dev/null @@ -1 +0,0 @@ -dev