From 57cd96fc6c503d75881065258f1554f0554e08d0 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Fri, 6 Mar 2026 10:21:24 +0100 Subject: [PATCH] supervisor: require claimable label for bead assignment --- internal/supervisor/supervisor.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/internal/supervisor/supervisor.go b/internal/supervisor/supervisor.go index 0c8ee0a..144c734 100644 --- a/internal/supervisor/supervisor.go +++ b/internal/supervisor/supervisor.go @@ -43,17 +43,27 @@ func (s *Supervisor) assignWork() { return } - // Filter for unassigned tasks - unassigned := []map[string]interface{}{} + // Filter for claimable, unassigned tasks + claimable := []map[string]interface{}{} for _, bead := range beads { // Skip if already assigned if assignee, ok := bead["assignee"].(string); ok && assignee != "" { continue } - unassigned = append(unassigned, bead) + // Only consider beads labeled claimable + labels, ok := bead["labels"].([]interface{}) + if !ok { + continue + } + for _, label := range labels { + if labelStr, ok := label.(string); ok && labelStr == "claimable" { + claimable = append(claimable, bead) + break + } + } } - if len(unassigned) == 0 { + if len(claimable) == 0 { return } @@ -76,7 +86,7 @@ func (s *Supervisor) assignWork() { } // Only assign if session CWD is exactly or under task mountpoint - for _, bead := range unassigned { + for _, bead := range claimable { taskCwd, ok := bead["cwd"].(string) if !ok { continue