feat: Add 'hooked' status for GUPP work assignment (bd-s00m)

Separates semantics of 'pinned' (identity records) from work-on-hook:
- 'pinned' = domain table / identity record (agents, roles) - non-blocking
- 'hooked' = work on agent's hook (GUPP-driven) - blocks dependents

Changes:
- Add StatusHooked constant to types.go
- Update all blocking queries to include 'hooked' status
- Add cyan styling for 'hooked' in UI output
- Create migration 032 to convert pinned work items to hooked

Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-28 22:36:46 -08:00
parent 4a6d942fad
commit 7d1ee6d3e9
10 changed files with 61 additions and 15 deletions

View File

@@ -1066,7 +1066,7 @@ func (m *MemoryStorage) GetReadyWork(ctx context.Context, filter types.WorkFilte
return results, nil
}
// getOpenBlockers returns the IDs of blockers that are currently open/in_progress/blocked/deferred.
// getOpenBlockers returns the IDs of blockers that are currently open/in_progress/blocked/deferred/hooked.
// The caller must hold at least a read lock.
func (m *MemoryStorage) getOpenBlockers(issueID string) []string {
deps := m.dependencies[issueID]
@@ -1086,7 +1086,7 @@ func (m *MemoryStorage) getOpenBlockers(issueID string) []string {
continue
}
switch blocker.Status {
case types.StatusOpen, types.StatusInProgress, types.StatusBlocked, types.StatusDeferred:
case types.StatusOpen, types.StatusInProgress, types.StatusBlocked, types.StatusDeferred, types.StatusHooked:
blockers = append(blockers, blocker.ID)
}
}