fix(namepool): persist custom names to settings/config.json

The gt namepool add command was replacing custom_names instead of
appending because it saved to the runtime state file, but Load()
intentionally ignores CustomNames from that file (expecting config
to come from settings/config.json).

Changes:
- runNamepoolAdd now loads existing settings, appends the new name,
  and saves to settings/config.json (the source of truth)
- runNamepoolSet now preserves existing custom names when changing
  themes (was passing nil which cleared them)
- Added duplicate check to avoid adding same name twice

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
gastown/crew/dennis
2026-01-17 00:37:35 -08:00
committed by beads/crew/emma
parent 8dab7b662a
commit d8bb9a9ba9
2 changed files with 44 additions and 31 deletions

View File

@@ -187,8 +187,17 @@ func runNamepoolSet(cmd *cobra.Command, args []string) error {
return fmt.Errorf("saving pool: %w", err)
}
// Also save to rig config
if err := saveRigNamepoolConfig(rigPath, theme, nil); err != nil {
// Load existing settings to preserve custom names when changing theme
settingsPath := filepath.Join(rigPath, "settings", "config.json")
var existingNames []string
if existingSettings, err := config.LoadRigSettings(settingsPath); err == nil {
if existingSettings.Namepool != nil {
existingNames = existingSettings.Namepool.Names
}
}
// Also save to rig config, preserving existing custom names
if err := saveRigNamepoolConfig(rigPath, theme, existingNames); err != nil {
return fmt.Errorf("saving config: %w", err)
}
@@ -206,14 +215,44 @@ func runNamepoolAdd(cmd *cobra.Command, args []string) error {
return fmt.Errorf("not in a rig directory")
}
// Load pool
// Load existing rig settings to get current theme and custom names
settingsPath := filepath.Join(rigPath, "settings", "config.json")
settings, err := config.LoadRigSettings(settingsPath)
if err != nil {
if os.IsNotExist(err) || strings.Contains(err.Error(), "not found") {
settings = config.NewRigSettings()
} else {
return fmt.Errorf("loading settings: %w", err)
}
}
// Initialize namepool config if needed
if settings.Namepool == nil {
settings.Namepool = config.DefaultNamepoolConfig()
}
// Check if name already exists
for _, n := range settings.Namepool.Names {
if n == name {
fmt.Printf("Name '%s' already in pool\n", name)
return nil
}
}
// Append new name to existing custom names
settings.Namepool.Names = append(settings.Namepool.Names, name)
// Save to settings/config.json (the source of truth for config)
if err := config.SaveRigSettings(settingsPath, settings); err != nil {
return fmt.Errorf("saving settings: %w", err)
}
// Also update runtime pool for immediate use
pool := polecat.NewNamePool(rigPath, rigName)
if err := pool.Load(); err != nil && !os.IsNotExist(err) {
return fmt.Errorf("loading pool: %w", err)
}
pool.AddCustomName(name)
if err := pool.Save(); err != nil {
return fmt.Errorf("saving pool: %w", err)
}