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

@@ -56,26 +56,6 @@ func isTrackedByConvoy(beadID string) string {
return convoyID
}
// filterEnvExcluding returns a copy of the environment with specified keys removed.
// This is used to prevent rig-specific environment variables from affecting
// commands that need to run in a different context (e.g., HQ beads).
func filterEnvExcluding(env []string, excludeKeys ...string) []string {
result := make([]string, 0, len(env))
for _, e := range env {
exclude := false
for _, key := range excludeKeys {
if strings.HasPrefix(e, key+"=") {
exclude = true
break
}
}
if !exclude {
result = append(result, e)
}
}
return result
}
// createAutoConvoy creates an auto-convoy for a single issue and tracks it.
// Returns the created convoy ID.
func createAutoConvoy(beadID, beadTitle string) (string, error) {
@@ -105,13 +85,8 @@ func createAutoConvoy(beadID, beadTitle string) (string, error) {
createArgs = append(createArgs, "--force")
}
// Clear BEADS_DIR so bd discovers the database from townBeads directory
// instead of using the rig's beads (which has a different prefix)
cleanEnv := filterEnvExcluding(os.Environ(), "BEADS_DIR")
createCmd := exec.Command("bd", append([]string{"--no-daemon"}, createArgs...)...)
createCmd.Dir = townBeads
createCmd.Env = cleanEnv
createCmd.Stderr = os.Stderr
if err := createCmd.Run(); err != nil {
@@ -123,7 +98,6 @@ func createAutoConvoy(beadID, beadTitle string) (string, error) {
depArgs := []string{"--no-daemon", "dep", "add", convoyID, trackBeadID, "--type=tracks"}
depCmd := exec.Command("bd", depArgs...)
depCmd.Dir = townBeads
depCmd.Env = cleanEnv
depCmd.Stderr = os.Stderr
if err := depCmd.Run(); err != nil {