Reviewed: Fix is correct - cook runs from cwd for formula access, wisp gets GT_ROOT for formula lookup.
This commit is contained in:
@@ -374,25 +374,27 @@ func runSling(cmd *cobra.Command, args []string) error {
|
|||||||
if formulaName != "" {
|
if formulaName != "" {
|
||||||
fmt.Printf(" Instantiating formula %s...\n", 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
|
// Some bd mol commands don't support prefix routing, so we must run them from the
|
||||||
// rig directory that owns the bead's database.
|
// rig directory that owns the bead's database.
|
||||||
formulaWorkDir := beads.ResolveHookDir(townRoot, beadID, hookWorkDir)
|
formulaWorkDir := beads.ResolveHookDir(townRoot, beadID, hookWorkDir)
|
||||||
|
|
||||||
// Step 1: Cook the formula (ensures proto exists)
|
// 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 := exec.Command("bd", "--no-daemon", "cook", formulaName)
|
||||||
cookCmd.Dir = formulaWorkDir
|
|
||||||
cookCmd.Stderr = os.Stderr
|
cookCmd.Stderr = os.Stderr
|
||||||
if err := cookCmd.Run(); err != nil {
|
if err := cookCmd.Run(); err != nil {
|
||||||
return fmt.Errorf("cooking formula %s: %w", formulaName, err)
|
return fmt.Errorf("cooking formula %s: %w", formulaName, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 2: Create wisp with feature and issue variables from bead
|
// 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)
|
featureVar := fmt.Sprintf("feature=%s", info.Title)
|
||||||
issueVar := fmt.Sprintf("issue=%s", beadID)
|
issueVar := fmt.Sprintf("issue=%s", beadID)
|
||||||
wispArgs := []string{"--no-daemon", "mol", "wisp", formulaName, "--var", featureVar, "--var", issueVar, "--json"}
|
wispArgs := []string{"--no-daemon", "mol", "wisp", formulaName, "--var", featureVar, "--var", issueVar, "--json"}
|
||||||
wispCmd := exec.Command("bd", wispArgs...)
|
wispCmd := exec.Command("bd", wispArgs...)
|
||||||
wispCmd.Dir = formulaWorkDir
|
wispCmd.Dir = formulaWorkDir
|
||||||
|
wispCmd.Env = append(os.Environ(), "GT_ROOT="+townRoot)
|
||||||
wispCmd.Stderr = os.Stderr
|
wispCmd.Stderr = os.Stderr
|
||||||
wispOut, err := wispCmd.Output()
|
wispOut, err := wispCmd.Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user