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>
This commit is contained in:
103
internal/server/role_profiles.go
Normal file
103
internal/server/role_profiles.go
Normal file
@@ -0,0 +1,103 @@
|
||||
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",
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user