From 3c6354c0514932159910de05989941710d8dfa56 Mon Sep 17 00:00:00 2001 From: Steve Yegge Date: Mon, 29 Dec 2025 21:41:03 -0800 Subject: [PATCH] fix: prevent label accumulation when updating agent role_type/rig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When updating role_type or rig on an agent bead, remove existing role_type:* or rig:* labels before adding the new one. This prevents label accumulation that would break filtering. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- internal/rpc/server_issues_epics.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/internal/rpc/server_issues_epics.go b/internal/rpc/server_issues_epics.go index 2b3359f5..1788fd31 100644 --- a/internal/rpc/server_issues_epics.go +++ b/internal/rpc/server_issues_epics.go @@ -516,8 +516,17 @@ func (s *Server) handleUpdate(req *Request) Response { // Auto-add role_type/rig labels for agent beads when these fields are set // This enables filtering queries like: bd list --type=agent --label=role_type:witness + // Note: We remove old role_type/rig labels first to prevent accumulation if issue.IssueType == types.TypeAgent { if updateArgs.RoleType != nil && *updateArgs.RoleType != "" { + // Remove any existing role_type:* labels first + existingLabels, _ := store.GetLabels(ctx, updateArgs.ID) + for _, l := range existingLabels { + if strings.HasPrefix(l, "role_type:") { + _ = store.RemoveLabel(ctx, updateArgs.ID, l, actor) + } + } + // Add new label label := "role_type:" + *updateArgs.RoleType if err := store.AddLabel(ctx, updateArgs.ID, label, actor); err != nil { return Response{ @@ -527,6 +536,14 @@ func (s *Server) handleUpdate(req *Request) Response { } } if updateArgs.Rig != nil && *updateArgs.Rig != "" { + // Remove any existing rig:* labels first + existingLabels, _ := store.GetLabels(ctx, updateArgs.ID) + for _, l := range existingLabels { + if strings.HasPrefix(l, "rig:") { + _ = store.RemoveLabel(ctx, updateArgs.ID, l, actor) + } + } + // Add new label label := "rig:" + *updateArgs.Rig if err := store.AddLabel(ctx, updateArgs.ID, label, actor); err != nil { return Response{