From 6f3a9d88c7a31b1cf6d25ca872696e29970f13d9 Mon Sep 17 00:00:00 2001 From: Tibsfox Date: Fri, 27 Mar 2026 11:22:04 -0700 Subject: [PATCH] fix(install): preserve USER-PROFILE.md and dev-preferences.md on update The uninstall step wipes get-shit-done/ and commands/gsd/ directories entirely, destroying user-generated files like USER-PROFILE.md (from /gsd:profile-user) and dev-preferences.md. These files are now read before rmSync and restored immediately after. Closes #1423 Co-Authored-By: Claude Opus 4.6 (1M context) --- bin/install.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/bin/install.js b/bin/install.js index 9d5a58c4e..d21b98dfa 100755 --- a/bin/install.js +++ b/bin/install.js @@ -3650,9 +3650,20 @@ function uninstall(isGlobal, runtime = 'claude') { // Gemini: still uses commands/gsd/ const gsdCommandsDir = path.join(targetDir, 'commands', 'gsd'); if (fs.existsSync(gsdCommandsDir)) { + // Preserve user-generated files before wipe (#1423) + const devPrefsPath = path.join(gsdCommandsDir, 'dev-preferences.md'); + const preservedDevPrefs = fs.existsSync(devPrefsPath) ? fs.readFileSync(devPrefsPath, 'utf-8') : null; + fs.rmSync(gsdCommandsDir, { recursive: true }); removedCount++; console.log(` ${green}✓${reset} Removed commands/gsd/`); + + // Restore user-generated files + if (preservedDevPrefs) { + fs.mkdirSync(gsdCommandsDir, { recursive: true }); + fs.writeFileSync(devPrefsPath, preservedDevPrefs); + console.log(` ${green}✓${reset} Preserved commands/gsd/dev-preferences.md`); + } } } else { // Claude Code: remove skills/gsd-*/ directories @@ -3684,9 +3695,20 @@ function uninstall(isGlobal, runtime = 'claude') { // 2. Remove get-shit-done directory const gsdDir = path.join(targetDir, 'get-shit-done'); if (fs.existsSync(gsdDir)) { + // Preserve user-generated files before wipe (#1423) + const userProfilePath = path.join(gsdDir, 'USER-PROFILE.md'); + const preservedProfile = fs.existsSync(userProfilePath) ? fs.readFileSync(userProfilePath, 'utf-8') : null; + fs.rmSync(gsdDir, { recursive: true }); removedCount++; console.log(` ${green}✓${reset} Removed get-shit-done/`); + + // Restore user-generated files + if (preservedProfile) { + fs.mkdirSync(gsdDir, { recursive: true }); + fs.writeFileSync(userProfilePath, preservedProfile); + console.log(` ${green}✓${reset} Preserved get-shit-done/USER-PROFILE.md`); + } } // 3. Remove GSD agents (gsd-*.md files only)