Files
WHOOSH/internal/server/role_profiles.go
Claude Code 9aeaa433fc Fix Docker Swarm discovery network name mismatch
- Changed NetworkName from 'chorus_default' to 'chorus_net'
- This matches the actual network 'CHORUS_chorus_net' (service prefix added automatically)
- Fixes discovered_count:0 issue - now successfully discovering all 25 agents
- Updated IMPLEMENTATION-SUMMARY with deployment status

Result: All 25 CHORUS agents now discovered successfully via Docker Swarm API

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-10 10:35:25 +11:00

104 lines
3.5 KiB
Go

package server
// RoleProfile provides persona metadata for a council role so CHORUS agents can
// load the correct prompt stack after claiming a role.
type RoleProfile struct {
RoleName string `json:"role_name"`
DisplayName string `json:"display_name"`
PromptKey string `json:"prompt_key"`
PromptPack string `json:"prompt_pack"`
Capabilities []string `json:"capabilities,omitempty"`
BriefRoutingHint string `json:"brief_routing_hint,omitempty"`
DefaultBriefOwner bool `json:"default_brief_owner,omitempty"`
}
func defaultRoleProfiles() map[string]RoleProfile {
const promptPack = "chorus/prompts/human-roles.yaml"
profiles := map[string]RoleProfile{
"systems-analyst": {
RoleName: "systems-analyst",
DisplayName: "Systems Analyst",
PromptKey: "systems-analyst",
PromptPack: promptPack,
Capabilities: []string{"requirements-analysis", "ucxl-navigation", "context-curation"},
BriefRoutingHint: "requirements",
},
"senior-software-architect": {
RoleName: "senior-software-architect",
DisplayName: "Senior Software Architect",
PromptKey: "senior-software-architect",
PromptPack: promptPack,
Capabilities: []string{"architecture", "trade-study", "diagramming"},
BriefRoutingHint: "architecture",
},
"tpm": {
RoleName: "tpm",
DisplayName: "Technical Program Manager",
PromptKey: "tpm",
PromptPack: promptPack,
Capabilities: []string{"program-coordination", "risk-tracking", "stakeholder-comm"},
BriefRoutingHint: "coordination",
DefaultBriefOwner: true,
},
"security-architect": {
RoleName: "security-architect",
DisplayName: "Security Architect",
PromptKey: "security-architect",
PromptPack: promptPack,
Capabilities: []string{"threat-modeling", "compliance", "secure-design"},
BriefRoutingHint: "security",
},
"devex-platform-engineer": {
RoleName: "devex-platform-engineer",
DisplayName: "DevEx Platform Engineer",
PromptKey: "devex-platform-engineer",
PromptPack: promptPack,
Capabilities: []string{"tooling", "developer-experience", "automation"},
BriefRoutingHint: "platform",
},
"qa-test-engineer": {
RoleName: "qa-test-engineer",
DisplayName: "QA Test Engineer",
PromptKey: "qa-test-engineer",
PromptPack: promptPack,
Capabilities: []string{"test-strategy", "automation", "validation"},
BriefRoutingHint: "quality",
},
"sre-observability-lead": {
RoleName: "sre-observability-lead",
DisplayName: "SRE Observability Lead",
PromptKey: "sre-observability-lead",
PromptPack: promptPack,
Capabilities: []string{"observability", "resilience", "slo-management"},
BriefRoutingHint: "reliability",
},
"technical-writer": {
RoleName: "technical-writer",
DisplayName: "Technical Writer",
PromptKey: "technical-writer",
PromptPack: promptPack,
Capabilities: []string{"documentation", "knowledge-capture", "ucxl-indexing"},
BriefRoutingHint: "documentation",
},
}
return profiles
}
func (s *Server) lookupRoleProfile(roleName, displayName string) RoleProfile {
if profile, ok := s.roleProfiles[roleName]; ok {
if displayName != "" {
profile.DisplayName = displayName
}
return profile
}
return RoleProfile{
RoleName: roleName,
DisplayName: displayName,
PromptKey: roleName,
PromptPack: "chorus/prompts/human-roles.yaml",
}
}