diff --git a/internal/cmd/costs.go b/internal/cmd/costs.go index 7568055e..5945f91a 100644 --- a/internal/cmd/costs.go +++ b/internal/cmd/costs.go @@ -649,9 +649,13 @@ func deriveSessionName() string { return fmt.Sprintf("gt-%s-crew-%s", rig, crew) } - // Town-level roles (mayor, deacon): gt-{town}-{role} - if (role == "mayor" || role == "deacon") && town != "" { - return fmt.Sprintf("gt-%s-%s", town, role) + // Town-level roles (mayor, deacon): gt-{town}-{role} or gt-{role} + if role == "mayor" || role == "deacon" { + if town != "" { + return fmt.Sprintf("gt-%s-%s", town, role) + } + // No town set - use simple gt-{role} pattern + return fmt.Sprintf("gt-%s", role) } // Rig-based roles (witness, refinery): gt-{rig}-{role} diff --git a/internal/cmd/costs_test.go b/internal/cmd/costs_test.go index 5af03d66..26307e64 100644 --- a/internal/cmd/costs_test.go +++ b/internal/cmd/costs_test.go @@ -61,6 +61,20 @@ func TestDeriveSessionName(t *testing.T) { }, expected: "gt-ai-deacon", }, + { + name: "mayor session without GT_TOWN", + envVars: map[string]string{ + "GT_ROLE": "mayor", + }, + expected: "gt-mayor", + }, + { + name: "deacon session without GT_TOWN", + envVars: map[string]string{ + "GT_ROLE": "deacon", + }, + expected: "gt-deacon", + }, { name: "no env vars", envVars: map[string]string{},