fix(sling): Use target's working directory for bd update commands

When slinging to an existing polecat, the bd update command was running
from town root which doesn't support prefix-based routing for writes.

Fix: Capture the target agent's working directory from resolveTargetAgent
and use it as hookWorkDir. This ensures bd update runs from the polecat's
worktree where the .beads/redirect file enables routing to the correct
database.

Also fixed the self-sling case to capture and use selfWorkDir.
This commit is contained in:
kustrun
2026-01-02 21:05:09 +01:00
parent b380ded2cc
commit 58e7c96936

View File

@@ -259,17 +259,27 @@ func runSling(cmd *cobra.Command, args []string) error {
} else {
// Slinging to an existing agent
// Skip pane lookup if --naked (agent may be terminated)
targetAgent, targetPane, _, err = resolveTargetAgent(target, slingNaked)
var targetWorkDir string
targetAgent, targetPane, targetWorkDir, err = resolveTargetAgent(target, slingNaked)
if err != nil {
return fmt.Errorf("resolving target: %w", err)
}
// Use target's working directory for bd commands (needed for redirect-based routing)
if targetWorkDir != "" {
hookWorkDir = targetWorkDir
}
}
} else {
// Slinging to self
targetAgent, targetPane, _, err = resolveSelfTarget()
var selfWorkDir string
targetAgent, targetPane, selfWorkDir, err = resolveSelfTarget()
if err != nil {
return err
}
// Use self's working directory for bd commands
if selfWorkDir != "" {
hookWorkDir = selfWorkDir
}
}
// Display what we're doing
@@ -738,17 +748,22 @@ func runSlingFormula(args []string) error {
} else {
// Slinging to an existing agent
// Skip pane lookup if --naked (agent may be terminated)
targetAgent, targetPane, _, err = resolveTargetAgent(target, slingNaked)
var targetWorkDir string
targetAgent, targetPane, targetWorkDir, err = resolveTargetAgent(target, slingNaked)
if err != nil {
return fmt.Errorf("resolving target: %w", err)
}
// Use target's working directory for bd commands (needed for redirect-based routing)
_ = targetWorkDir // Formula sling doesn't need hookWorkDir
}
} else {
// Slinging to self
targetAgent, targetPane, _, err = resolveSelfTarget()
var selfWorkDir string
targetAgent, targetPane, selfWorkDir, err = resolveSelfTarget()
if err != nil {
return err
}
_ = selfWorkDir // Formula sling doesn't need hookWorkDir
}
fmt.Printf("%s Slinging formula %s to %s...\n", style.Bold.Render("🎯"), formulaName, targetAgent)