From 58e7c96936665ed30451870b3840150131aab3ae Mon Sep 17 00:00:00 2001 From: kustrun Date: Fri, 2 Jan 2026 21:05:09 +0100 Subject: [PATCH] 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. --- internal/cmd/sling.go | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/internal/cmd/sling.go b/internal/cmd/sling.go index 7ccded38..921de5ce 100644 --- a/internal/cmd/sling.go +++ b/internal/cmd/sling.go @@ -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)