From 0521910503d5764b4d157cc769909667decc48c9 Mon Sep 17 00:00:00 2001 From: Steve Yegge Date: Mon, 29 Dec 2025 16:17:51 -0800 Subject: [PATCH] fix: --var flag now allows commas in values (#786) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changed all --var flags from StringSlice to StringArray. StringSlice splits on commas, breaking values like 'desc=A, B, C'. StringArray only splits on separate --var flags. Affected commands: pour, cook, wisp, mol distill, mol bond, template instantiate 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- cmd/bd/cook.go | 4 ++-- cmd/bd/mol_bond.go | 4 ++-- cmd/bd/mol_distill.go | 4 ++-- cmd/bd/pour.go | 4 ++-- cmd/bd/template.go | 4 ++-- cmd/bd/wisp.go | 6 +++--- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/cmd/bd/cook.go b/cmd/bd/cook.go index 8c0325bb..850a068b 100644 --- a/cmd/bd/cook.go +++ b/cmd/bd/cook.go @@ -118,7 +118,7 @@ func parseCookFlags(cmd *cobra.Command, args []string) (*cookFlags, error) { force, _ := cmd.Flags().GetBool("force") searchPaths, _ := cmd.Flags().GetStringSlice("search-path") prefix, _ := cmd.Flags().GetString("prefix") - varFlags, _ := cmd.Flags().GetStringSlice("var") + varFlags, _ := cmd.Flags().GetStringArray("var") mode, _ := cmd.Flags().GetString("mode") // Parse variables @@ -917,7 +917,7 @@ func init() { cookCmd.Flags().Bool("force", false, "Replace existing proto if it exists (requires --persist)") cookCmd.Flags().StringSlice("search-path", []string{}, "Additional paths to search for formula inheritance") cookCmd.Flags().String("prefix", "", "Prefix to prepend to proto ID (e.g., 'gt-' creates 'gt-mol-feature')") - cookCmd.Flags().StringSlice("var", []string{}, "Variable substitution (key=value), enables runtime mode") + cookCmd.Flags().StringArray("var", []string{}, "Variable substitution (key=value), enables runtime mode") cookCmd.Flags().String("mode", "", "Cooking mode: compile (keep placeholders) or runtime (substitute vars)") rootCmd.AddCommand(cookCmd) diff --git a/cmd/bd/mol_bond.go b/cmd/bd/mol_bond.go index 01ede1b0..1778d66c 100644 --- a/cmd/bd/mol_bond.go +++ b/cmd/bd/mol_bond.go @@ -101,7 +101,7 @@ func runMolBond(cmd *cobra.Command, args []string) { bondType, _ := cmd.Flags().GetString("type") customTitle, _ := cmd.Flags().GetString("as") dryRun, _ := cmd.Flags().GetBool("dry-run") - varFlags, _ := cmd.Flags().GetStringSlice("var") + varFlags, _ := cmd.Flags().GetStringArray("var") ephemeral, _ := cmd.Flags().GetBool("ephemeral") pour, _ := cmd.Flags().GetBool("pour") childRef, _ := cmd.Flags().GetString("ref") @@ -629,7 +629,7 @@ func init() { molBondCmd.Flags().String("type", types.BondTypeSequential, "Bond type: sequential, parallel, or conditional") molBondCmd.Flags().String("as", "", "Custom title for compound proto (proto+proto only)") molBondCmd.Flags().Bool("dry-run", false, "Preview what would be created") - molBondCmd.Flags().StringSlice("var", []string{}, "Variable substitution for spawned protos (key=value)") + molBondCmd.Flags().StringArray("var", []string{}, "Variable substitution for spawned protos (key=value)") molBondCmd.Flags().Bool("ephemeral", false, "Force spawn as vapor (ephemeral, Ephemeral=true)") molBondCmd.Flags().Bool("pour", false, "Force spawn as liquid (persistent, Ephemeral=false)") molBondCmd.Flags().String("ref", "", "Custom child reference with {{var}} substitution (e.g., arm-{{polecat_name}})") diff --git a/cmd/bd/mol_distill.go b/cmd/bd/mol_distill.go index 2acdcbc2..b21bff4a 100644 --- a/cmd/bd/mol_distill.go +++ b/cmd/bd/mol_distill.go @@ -113,7 +113,7 @@ func runMolDistill(cmd *cobra.Command, args []string) { os.Exit(1) } - varFlags, _ := cmd.Flags().GetStringSlice("var") + varFlags, _ := cmd.Flags().GetStringArray("var") dryRun, _ := cmd.Flags().GetBool("dry-run") outputDir, _ := cmd.Flags().GetString("output") @@ -363,7 +363,7 @@ func subgraphToFormula(subgraph *TemplateSubgraph, name string, replacements map } func init() { - molDistillCmd.Flags().StringSlice("var", []string{}, "Replace value with {{variable}} placeholder (variable=value)") + molDistillCmd.Flags().StringArray("var", []string{}, "Replace value with {{variable}} placeholder (variable=value)") molDistillCmd.Flags().Bool("dry-run", false, "Preview what would be created") molDistillCmd.Flags().String("output", "", "Output directory for formula file") diff --git a/cmd/bd/pour.go b/cmd/bd/pour.go index 2ced6f1a..bddc197f 100644 --- a/cmd/bd/pour.go +++ b/cmd/bd/pour.go @@ -65,7 +65,7 @@ func runPour(cmd *cobra.Command, args []string) { } dryRun, _ := cmd.Flags().GetBool("dry-run") - varFlags, _ := cmd.Flags().GetStringSlice("var") + varFlags, _ := cmd.Flags().GetStringArray("var") assignee, _ := cmd.Flags().GetString("assignee") attachFlags, _ := cmd.Flags().GetStringSlice("attach") attachType, _ := cmd.Flags().GetString("attach-type") @@ -275,7 +275,7 @@ func runPour(cmd *cobra.Command, args []string) { func init() { // Pour command flags - pourCmd.Flags().StringSlice("var", []string{}, "Variable substitution (key=value)") + pourCmd.Flags().StringArray("var", []string{}, "Variable substitution (key=value)") pourCmd.Flags().Bool("dry-run", false, "Preview what would be created") pourCmd.Flags().String("assignee", "", "Assign the root issue to this agent/user") pourCmd.Flags().StringSlice("attach", []string{}, "Proto to attach after spawning (repeatable)") diff --git a/cmd/bd/template.go b/cmd/bd/template.go index 3573e3b1..8b30295a 100644 --- a/cmd/bd/template.go +++ b/cmd/bd/template.go @@ -237,7 +237,7 @@ Example: ctx := rootCtx dryRun, _ := cmd.Flags().GetBool("dry-run") - varFlags, _ := cmd.Flags().GetStringSlice("var") + varFlags, _ := cmd.Flags().GetStringArray("var") assignee, _ := cmd.Flags().GetString("assignee") // Parse variables @@ -355,7 +355,7 @@ Example: } func init() { - templateInstantiateCmd.Flags().StringSlice("var", []string{}, "Variable substitution (key=value)") + templateInstantiateCmd.Flags().StringArray("var", []string{}, "Variable substitution (key=value)") templateInstantiateCmd.Flags().Bool("dry-run", false, "Preview what would be created") templateInstantiateCmd.Flags().String("assignee", "", "Assign the root epic to this agent/user") diff --git a/cmd/bd/wisp.go b/cmd/bd/wisp.go index 40d45068..75b9c2fe 100644 --- a/cmd/bd/wisp.go +++ b/cmd/bd/wisp.go @@ -147,7 +147,7 @@ func runWispCreate(cmd *cobra.Command, args []string) { } dryRun, _ := cmd.Flags().GetBool("dry-run") - varFlags, _ := cmd.Flags().GetStringSlice("var") + varFlags, _ := cmd.Flags().GetStringArray("var") // Parse variables vars := make(map[string]string) @@ -663,11 +663,11 @@ func runWispGC(cmd *cobra.Command, args []string) { func init() { // Wisp command flags (for direct create: bd mol wisp ) - wispCmd.Flags().StringSlice("var", []string{}, "Variable substitution (key=value)") + wispCmd.Flags().StringArray("var", []string{}, "Variable substitution (key=value)") wispCmd.Flags().Bool("dry-run", false, "Preview what would be created") // Wisp create command flags (kept for backwards compat: bd mol wisp create ) - wispCreateCmd.Flags().StringSlice("var", []string{}, "Variable substitution (key=value)") + wispCreateCmd.Flags().StringArray("var", []string{}, "Variable substitution (key=value)") wispCreateCmd.Flags().Bool("dry-run", false, "Preview what would be created") wispListCmd.Flags().Bool("all", false, "Include closed wisps")