diff --git a/internal/cmd/sling.go b/internal/cmd/sling.go index ddd77ce9..a522d6fb 100644 --- a/internal/cmd/sling.go +++ b/internal/cmd/sling.go @@ -374,25 +374,27 @@ func runSling(cmd *cobra.Command, args []string) error { if formulaName != "" { fmt.Printf(" Instantiating formula %s...\n", formulaName) - // Route bd mutations (cook/wisp/bond) to the correct beads context for the target bead. + // Route bd mutations (wisp/bond) to the correct beads context for the target bead. // Some bd mol commands don't support prefix routing, so we must run them from the // rig directory that owns the bead's database. formulaWorkDir := beads.ResolveHookDir(townRoot, beadID, hookWorkDir) // Step 1: Cook the formula (ensures proto exists) + // Cook doesn't need database context - runs from cwd like gt formula show cookCmd := exec.Command("bd", "--no-daemon", "cook", formulaName) - cookCmd.Dir = formulaWorkDir cookCmd.Stderr = os.Stderr if err := cookCmd.Run(); err != nil { return fmt.Errorf("cooking formula %s: %w", formulaName, err) } // Step 2: Create wisp with feature and issue variables from bead + // Run from rig directory so wisp is created in correct database featureVar := fmt.Sprintf("feature=%s", info.Title) issueVar := fmt.Sprintf("issue=%s", beadID) wispArgs := []string{"--no-daemon", "mol", "wisp", formulaName, "--var", featureVar, "--var", issueVar, "--json"} wispCmd := exec.Command("bd", wispArgs...) wispCmd.Dir = formulaWorkDir + wispCmd.Env = append(os.Environ(), "GT_ROOT="+townRoot) wispCmd.Stderr = os.Stderr wispOut, err := wispCmd.Output() if err != nil {