From d91e32b3ce3ea653b6e9b14253ad6bd463edc6ee Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Fri, 17 Jul 2026 17:56:28 -0400 Subject: [PATCH] =?UTF-8?q?fix(#2383):=20untrack=20node=5Fmodules=20?= =?UTF-8?q?=E2=80=94=20accidentally=20committed=20as=20a=20hardcoded=20abs?= =?UTF-8?q?olute-path=20symlink=20(#2385)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(#2383): untrack node_modules — accidentally committed as a hardcoded absolute-path symlink cf004df67 (#2360/#2364) swept node_modules into git as a tracked 120000 (symlink) blob pointing at /Users/trekkie/projects/gsd-core/node_modules — a path specific to one contributor's machine. .gitignore already lists node_modules/, so this was almost certainly a broad `git add` run while node_modules happened to be a symlink at that path, not intentional (git add on an explicitly-added path isn't blocked by .gitignore). Two concrete problems this caused: (1) anyone else cloning the repo, or any CI runner, checks out a symlink pointing at a path that does not exist on their machine; (2) it silently self-heals for most people (npm ci detects the checked-out symlink is "not a directory" and replaces it), but anyone who runs a tool directly against node_modules/.bin/* before ever running npm ci hits ENOENT/ELOOP failures that read as environment corruption and are expensive to diagnose — exactly what happened while preparing PR #2380 before this tracked entry was found to be the actual root cause. git rm --cached only, no working-tree content touched. .gitignore already covers node_modules/ going forward; confirmed via `git show cf004df67 --stat` that no other file was swept into that same commit by the same mistake. Closes #2383 Co-Authored-By: Claude Opus 4.8 * fix(#2383): gitignore node_modules regardless of file type node_modules/ (trailing slash) only matches directories, so it never suppressed the worktree-sharing symlink some worktrees use to point node_modules back at the main checkout — every such worktree showed a perpetual, un-ignorable "?? node_modules" in git status, exactly the noise that trains people to stop reading git status output. Dropping the trailing slash matches node_modules regardless of whether it's a real directory, a file, or a symlink, which is what every other repo's node_modules ignore rule actually needs to do. Found while directly verifying #2383's untrack fix was complete, not assumed. Co-Authored-By: Claude Opus 4.8 * chore: regenerate cursor golden-install-parity fixture after rebase next advanced again during rebase — #2386 (fix #2341, "de-dup Cursor menu by marking skills user-invocable:false") landed and legitimately changed every cursor SKILL.md's content. Confirmed via git log that this is the explanation before committing: all 71 changed hash entries are isolated to cursor.json, matching a runtime-specific skill-output change, not noise. Co-Authored-By: Claude Opus 4.8 * fix: regenerate cursor golden fixture from a clean clone (worktree was stale) Local worktree regeneration didn't match CI's clean-room result despite multiple attempts; a fresh clone + npm ci + regenerate in isolation produced a different, correct result. Using that. --------- Co-authored-by: Claude Opus 4.8 --- .gitignore | 2 +- node_modules | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 120000 node_modules diff --git a/.gitignore b/.gitignore index 3df1d9a5d..4938ca057 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -node_modules/ +node_modules .DS_Store # ESLint cache diff --git a/node_modules b/node_modules deleted file mode 120000 index 602255347..000000000 --- a/node_modules +++ /dev/null @@ -1 +0,0 @@ -/Users/trekkie/projects/gsd-core/node_modules \ No newline at end of file