From e2121a2e074bb48edb4cd5a7eb5440d539ed3450 Mon Sep 17 00:00:00 2001 From: beads/crew/grip Date: Wed, 31 Dec 2025 13:01:03 -0800 Subject: [PATCH] fix(refile): address code review feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Warn if source issue is already closed - Copy all issue fields (SourceRepo, Ephemeral, MolType, RoleType, Rig) - Log warnings on label copy failures instead of silently ignoring - Schedule auto-flush when source is local store - Remove stale comment 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- cmd/bd/refile.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/cmd/bd/refile.go b/cmd/bd/refile.go index 77e0b2a9..28db81cd 100644 --- a/cmd/bd/refile.go +++ b/cmd/bd/refile.go @@ -54,6 +54,11 @@ Examples: sourceIssue := result.Issue resolvedSourceID := result.ResolvedID + // Warn if source issue is already closed + if sourceIssue.Status == types.StatusClosed { + fmt.Fprintf(os.Stderr, "%s Source issue %s is already closed\n", ui.RenderWarn("⚠"), resolvedSourceID) + } + // Step 2: Find the town-level beads directory townBeadsDir, err := findTownBeadsDir() if err != nil { @@ -97,8 +102,12 @@ Examples: Assignee: sourceIssue.Assignee, ExternalRef: sourceIssue.ExternalRef, EstimatedMinutes: sourceIssue.EstimatedMinutes, + SourceRepo: sourceIssue.SourceRepo, + Ephemeral: sourceIssue.Ephemeral, + MolType: sourceIssue.MolType, + RoleType: sourceIssue.RoleType, + Rig: sourceIssue.Rig, CreatedBy: actor, - // Add note about origin } // Append refiled note to description @@ -115,7 +124,9 @@ Examples: labels, err := result.Store.GetLabels(ctx, resolvedSourceID) if err == nil && len(labels) > 0 { for _, label := range labels { - _ = targetStore.AddLabel(ctx, newIssue.ID, label, actor) + if err := targetStore.AddLabel(ctx, newIssue.ID, label, actor); err != nil { + WarnError("failed to copy label %s: %v", label, err) + } } } @@ -125,6 +136,10 @@ Examples: if err := result.Store.CloseIssue(ctx, resolvedSourceID, closeReason, actor); err != nil { WarnError("failed to close source issue: %v", err) } + // Schedule auto-flush if source was local store + if !result.Routed { + markDirtyAndScheduleFlush() + } } // Output